1This is doc/gcc.info, produced by makeinfo version 4.12 from 2/space/rguenther/gcc-4.8.5/gcc-4.8.5/gcc/doc/gcc.texi. 3 4Copyright (C) 1988-2015 Free Software Foundation, Inc. 5 6 Permission is granted to copy, distribute and/or modify this document 7under the terms of the GNU Free Documentation License, Version 1.3 or 8any later version published by the Free Software Foundation; with the 9Invariant Sections being "Funding Free Software", the Front-Cover Texts 10being (a) (see below), and with the Back-Cover Texts being (b) (see 11below). A copy of the license is included in the section entitled "GNU 12Free Documentation License". 13 14 (a) The FSF's Front-Cover Text is: 15 16 A GNU Manual 17 18 (b) The FSF's Back-Cover Text is: 19 20 You have freedom to copy and modify this GNU Manual, like GNU 21software. Copies published by the Free Software Foundation raise 22funds for GNU development. 23 24INFO-DIR-SECTION Software development 25START-INFO-DIR-ENTRY 26* gcc: (gcc). The GNU Compiler Collection. 27* g++: (gcc). The GNU C++ compiler. 28* gcov: (gcc) Gcov. `gcov'--a test coverage program. 29END-INFO-DIR-ENTRY 30 This file documents the use of the GNU compilers. 31 32 Copyright (C) 1988-2015 Free Software Foundation, Inc. 33 34 Permission is granted to copy, distribute and/or modify this document 35under the terms of the GNU Free Documentation License, Version 1.3 or 36any later version published by the Free Software Foundation; with the 37Invariant Sections being "Funding Free Software", the Front-Cover Texts 38being (a) (see below), and with the Back-Cover Texts being (b) (see 39below). A copy of the license is included in the section entitled "GNU 40Free Documentation License". 41 42 (a) The FSF's Front-Cover Text is: 43 44 A GNU Manual 45 46 (b) The FSF's Back-Cover Text is: 47 48 You have freedom to copy and modify this GNU Manual, like GNU 49software. Copies published by the Free Software Foundation raise 50funds for GNU development. 51 52 53 54File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 55 56Introduction 57************ 58 59This manual documents how to use the GNU compilers, as well as their 60features and incompatibilities, and how to report bugs. It corresponds 61to the compilers (GCC) version 4.8.5. The internals of the GNU 62compilers, including how to port them to new targets and some 63information about how to write front ends for new languages, are 64documented in a separate manual. *Note Introduction: (gccint)Top. 65 66* Menu: 67 68* G++ and GCC:: You can compile C or C++ programs. 69* Standards:: Language standards supported by GCC. 70* Invoking GCC:: Command options supported by `gcc'. 71* C Implementation:: How GCC implements the ISO C specification. 72* C++ Implementation:: How GCC implements the ISO C++ specification. 73* C Extensions:: GNU extensions to the C language family. 74* C++ Extensions:: GNU extensions to the C++ language. 75* Objective-C:: GNU Objective-C runtime features. 76* Compatibility:: Binary Compatibility 77* Gcov:: `gcov'---a test coverage program. 78* Trouble:: If you have trouble using GCC. 79* Bugs:: How, why and where to report bugs. 80* Service:: How to find suppliers of support for GCC. 81* Contributing:: How to contribute to testing and developing GCC. 82 83* Funding:: How to help assure funding for free software. 84* GNU Project:: The GNU Project and GNU/Linux. 85 86* Copying:: GNU General Public License says 87 how you can copy and share GCC. 88* GNU Free Documentation License:: How you can copy and share this manual. 89* Contributors:: People who have contributed to GCC. 90 91* Option Index:: Index to command line options. 92* Keyword Index:: Index of concepts and symbol names. 93 94 95File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top 96 971 Programming Languages Supported by GCC 98**************************************** 99 100GCC stands for "GNU Compiler Collection". GCC is an integrated 101distribution of compilers for several major programming languages. 102These languages currently include C, C++, Objective-C, Objective-C++, 103Java, Fortran, Ada, and Go. 104 105 The abbreviation "GCC" has multiple meanings in common use. The 106current official meaning is "GNU Compiler Collection", which refers 107generically to the complete suite of tools. The name historically stood 108for "GNU C Compiler", and this usage is still common when the emphasis 109is on compiling C programs. Finally, the name is also used when 110speaking of the "language-independent" component of GCC: code shared 111among the compilers for all supported languages. 112 113 The language-independent component of GCC includes the majority of the 114optimizers, as well as the "back ends" that generate machine code for 115various processors. 116 117 The part of a compiler that is specific to a particular language is 118called the "front end". In addition to the front ends that are 119integrated components of GCC, there are several other front ends that 120are maintained separately. These support languages such as Pascal, 121Mercury, and COBOL. To use these, they must be built together with GCC 122proper. 123 124 Most of the compilers for languages other than C have their own names. 125The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 126talk about compiling one of those languages, we might refer to that 127compiler by its own name, or as GCC. Either is correct. 128 129 Historically, compilers for many languages, including C++ and Fortran, 130have been implemented as "preprocessors" which emit another high level 131language such as C. None of the compilers included in GCC are 132implemented this way; they all generate machine code directly. This 133sort of preprocessor should not be confused with the "C preprocessor", 134which is an integral feature of the C, C++, Objective-C and 135Objective-C++ languages. 136 137 138File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 139 1402 Language Standards Supported by GCC 141************************************* 142 143For each language compiled by GCC for which there is a standard, GCC 144attempts to follow one or more versions of that standard, possibly with 145some exceptions, and possibly with some extensions. 146 1472.1 C language 148============== 149 150GCC supports three versions of the C standard, although support for the 151most recent version is not yet complete. 152 153 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 154published in 1990. This standard was ratified as an ISO standard 155(ISO/IEC 9899:1990) later in 1990. There were no technical differences 156between these publications, although the sections of the ANSI standard 157were renumbered and became clauses in the ISO standard. This standard, 158in both its forms, is commonly known as "C89", or occasionally as 159"C90", from the dates of ratification. The ANSI standard, but not the 160ISO standard, also came with a Rationale document. To select this 161standard in GCC, use one of the options `-ansi', `-std=c90' or 162`-std=iso9899:1990'; to obtain all the diagnostics required by the 163standard, you should also specify `-pedantic' (or `-pedantic-errors' if 164you want them to be errors rather than warnings). *Note Options 165Controlling C Dialect: C Dialect Options. 166 167 Errors in the 1990 ISO C standard were corrected in two Technical 168Corrigenda published in 1994 and 1996. GCC does not support the 169uncorrected version. 170 171 An amendment to the 1990 standard was published in 1995. This 172amendment added digraphs and `__STDC_VERSION__' to the language, but 173otherwise concerned the library. This amendment is commonly known as 174"AMD1"; the amended standard is sometimes known as "C94" or "C95". To 175select this standard in GCC, use the option `-std=iso9899:199409' 176(with, as for other standard versions, `-pedantic' to receive all 177required diagnostics). 178 179 A new edition of the ISO C standard was published in 1999 as ISO/IEC 1809899:1999, and is commonly known as "C99". GCC has incomplete support 181for this standard version; see `http://gcc.gnu.org/c99status.html' for 182details. To select this standard, use `-std=c99' or 183`-std=iso9899:1999'. (While in development, drafts of this standard 184version were referred to as "C9X".) 185 186 Errors in the 1999 ISO C standard were corrected in three Technical 187Corrigenda published in 2001, 2004 and 2007. GCC does not support the 188uncorrected version. 189 190 A fourth version of the C standard, known as "C11", was published in 1912011 as ISO/IEC 9899:2011. GCC has limited incomplete support for 192parts of this standard, enabled with `-std=c11' or `-std=iso9899:2011'. 193(While in development, drafts of this standard version were referred to 194as "C1X".) 195 196 By default, GCC provides some extensions to the C language that on 197rare occasions conflict with the C standard. *Note Extensions to the C 198Language Family: C Extensions. Use of the `-std' options listed above 199will disable these extensions where they conflict with the C standard 200version selected. You may also select an extended version of the C 201language explicitly with `-std=gnu90' (for C90 with GNU extensions), 202`-std=gnu99' (for C99 with GNU extensions) or `-std=gnu11' (for C11 203with GNU extensions). The default, if no C language dialect options 204are given, is `-std=gnu90'; this will change to `-std=gnu99' or 205`-std=gnu11' in some future release when the C99 or C11 support is 206complete. Some features that are part of the C99 standard are accepted 207as extensions in C90 mode, and some features that are part of the C11 208standard are accepted as extensions in C90 and C99 modes. 209 210 The ISO C standard defines (in clause 4) two classes of conforming 211implementation. A "conforming hosted implementation" supports the 212whole standard including all the library facilities; a "conforming 213freestanding implementation" is only required to provide certain 214library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>', 215and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; since C99, 216also those in `<stdbool.h>' and `<stdint.h>'; and since C11, also those 217in `<stdalign.h>' and `<stdnoreturn.h>'. In addition, complex types, 218added in C99, are not required for freestanding implementations. The 219standard also defines two environments for programs, a "freestanding 220environment", required of all implementations and which may not have 221library facilities beyond those required of freestanding 222implementations, where the handling of program startup and termination 223are implementation-defined, and a "hosted environment", which is not 224required, in which all the library facilities are provided and startup 225is through a function `int main (void)' or `int main (int, char *[])'. 226An OS kernel would be a freestanding environment; a program using the 227facilities of an operating system would normally be in a hosted 228implementation. 229 230 GCC aims towards being usable as a conforming freestanding 231implementation, or as the compiler for a conforming hosted 232implementation. By default, it will act as the compiler for a hosted 233implementation, defining `__STDC_HOSTED__' as `1' and presuming that 234when the names of ISO C functions are used, they have the semantics 235defined in the standard. To make it act as a conforming freestanding 236implementation for a freestanding environment, use the option 237`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 238make assumptions about the meanings of function names from the standard 239library, with exceptions noted below. To build an OS kernel, you may 240well still need to make your own arrangements for linking and startup. 241*Note Options Controlling C Dialect: C Dialect Options. 242 243 GCC does not provide the library facilities required only of hosted 244implementations, nor yet all the facilities required by C99 of 245freestanding implementations; to use the facilities of a hosted 246environment, you will need to find them elsewhere (for example, in the 247GNU C library). *Note Standard Libraries: Standard Libraries. 248 249 Most of the compiler support routines used by GCC are present in 250`libgcc', but there are a few exceptions. GCC requires the 251freestanding environment provide `memcpy', `memmove', `memset' and 252`memcmp'. Finally, if `__builtin_trap' is used, and the target does 253not implement the `trap' pattern, then GCC will emit a call to `abort'. 254 255 For references to Technical Corrigenda, Rationale documents and 256information concerning the history of C that is available online, see 257`http://gcc.gnu.org/readings.html' 258 2592.2 C++ language 260================ 261 262GCC supports the original ISO C++ standard (1998) and contains 263experimental support for the second ISO C++ standard (2011). 264 265 The original ISO C++ standard was published as the ISO standard 266(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 2672003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and 268C++03, respectively. GCC implements the majority of C++98 (`export' is 269a notable exception) and most of the changes in C++03. To select this 270standard in GCC, use one of the options `-ansi', `-std=c++98', or 271`-std=c++03'; to obtain all the diagnostics required by the standard, 272you should also specify `-pedantic' (or `-pedantic-errors' if you want 273them to be errors rather than warnings). 274 275 A revised ISO C++ standard was published in 2011 as ISO/IEC 27614882:2011, and is referred to as C++11; before its publication it was 277commonly referred to as C++0x. C++11 contains several changes to the 278C++ language, most of which have been implemented in an experimental 279C++11 mode in GCC. For information regarding the C++11 features 280available in the experimental C++11 mode, see 281`http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in 282GCC, use the option `-std=c++11'; to obtain all the diagnostics 283required by the standard, you should also specify `-pedantic' (or 284`-pedantic-errors' if you want them to be errors rather than warnings). 285 286 More information about the C++ standards is available on the ISO C++ 287committee's web site at `http://www.open-std.org/jtc1/sc22/wg21/'. 288 289 By default, GCC provides some extensions to the C++ language; *Note 290Options Controlling C++ Dialect: C++ Dialect Options. Use of the 291`-std' option listed above will disable these extensions. You may also 292select an extended version of the C++ language explicitly with 293`-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++11' (for 294C++11 with GNU extensions). The default, if no C++ language dialect 295options are given, is `-std=gnu++98'. 296 2972.3 Objective-C and Objective-C++ languages 298=========================================== 299 300GCC supports "traditional" Objective-C (also known as "Objective-C 3011.0") and contains support for the Objective-C exception and 302synchronization syntax. It has also support for a number of 303"Objective-C 2.0" language extensions, including properties, fast 304enumeration (only for Objective-C), method attributes and the @optional 305and @required keywords in protocols. GCC supports Objective-C++ and 306features available in Objective-C are also available in Objective-C++. 307 308 GCC by default uses the GNU Objective-C runtime library, which is part 309of GCC and is not the same as the Apple/NeXT Objective-C runtime 310library used on Apple systems. There are a number of differences 311documented in this manual. The options `-fgnu-runtime' and 312`-fnext-runtime' allow you to switch between producing output that 313works with the GNU Objective-C runtime library and output that works 314with the Apple/NeXT Objective-C runtime library. 315 316 There is no formal written standard for Objective-C or Objective-C++. 317The authoritative manual on traditional Objective-C (1.0) is 318"Object-Oriented Programming and the Objective-C Language", available 319at a number of web sites: 320 * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf' 321 is the original NeXTstep document; 322 323 * `http://objc.toodarkpark.net' is the same document in another 324 format; 325 326 * 327 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 328 has an updated version but make sure you search for "Object 329 Oriented Programming and the Objective-C Programming Language 1.0", 330 not documentation on the newer "Objective-C 2.0" language 331 332 The Objective-C exception and synchronization syntax (that is, the 333keywords @try, @throw, @catch, @finally and @synchronized) is supported 334by GCC and is enabled with the option `-fobjc-exceptions'. The syntax 335is briefly documented in this manual and in the Objective-C 2.0 manuals 336from Apple. 337 338 The Objective-C 2.0 language extensions and features are automatically 339enabled; they include properties (via the @property, @synthesize and 340@dynamic keywords), fast enumeration (not available in Objective-C++), 341attributes for methods (such as deprecated, noreturn, sentinel, 342format), the unused attribute for method arguments, the @package 343keyword for instance variables and the @optional and @required keywords 344in protocols. You can disable all these Objective-C 2.0 language 345extensions with the option `-fobjc-std=objc1', which causes the 346compiler to recognize the same Objective-C language syntax recognized 347by GCC 4.0, and to produce an error if one of the new features is used. 348 349 GCC has currently no support for non-fragile instance variables. 350 351 The authoritative manual on Objective-C 2.0 is available from Apple: 352 * 353 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 354 355 For more information concerning the history of Objective-C that is 356available online, see `http://gcc.gnu.org/readings.html' 357 3582.4 Go language 359=============== 360 361As of the GCC 4.7.1 release, GCC supports the Go 1 language standard, 362described at `http://golang.org/doc/go1.html'. 363 3642.5 References for other languages 365================================== 366 367*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 368conformance and compatibility of the Ada compiler. 369 370 *Note Standards: (gfortran)Standards, for details of standards 371supported by GNU Fortran. 372 373 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 374details of compatibility between `gcj' and the Java Platform. 375 376 377File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 378 3793 GCC Command Options 380********************* 381 382When you invoke GCC, it normally does preprocessing, compilation, 383assembly and linking. The "overall options" allow you to stop this 384process at an intermediate stage. For example, the `-c' option says 385not to run the linker. Then the output consists of object files output 386by the assembler. 387 388 Other options are passed on to one stage of processing. Some options 389control the preprocessor and others the compiler itself. Yet other 390options control the assembler and linker; most of these are not 391documented here, since you rarely need to use any of them. 392 393 Most of the command-line options that you can use with GCC are useful 394for C programs; when an option is only useful with another language 395(usually C++), the explanation says so explicitly. If the description 396for a particular option does not mention a source language, you can use 397that option with all supported languages. 398 399 *Note Compiling C++ Programs: Invoking G++, for a summary of special 400options for compiling C++ programs. 401 402 The `gcc' program accepts options and file names as operands. Many 403options have multi-letter names; therefore multiple single-letter 404options may _not_ be grouped: `-dv' is very different from `-d -v'. 405 406 You can mix options and other arguments. For the most part, the order 407you use doesn't matter. Order does matter when you use several options 408of the same kind; for example, if you specify `-L' more than once, the 409directories are searched in the order specified. Also, the placement 410of the `-l' option is significant. 411 412 Many options have long names starting with `-f' or with `-W'--for 413example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 414have both positive and negative forms; the negative form of `-ffoo' is 415`-fno-foo'. This manual documents only one of these two forms, 416whichever one is not the default. 417 418 *Note Option Index::, for an index to GCC's options. 419 420* Menu: 421 422* Option Summary:: Brief list of all options, without explanations. 423* Overall Options:: Controlling the kind of output: 424 an executable, object files, assembler files, 425 or preprocessed source. 426* Invoking G++:: Compiling C++ programs. 427* C Dialect Options:: Controlling the variant of C language compiled. 428* C++ Dialect Options:: Variations on C++. 429* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 430 and Objective-C++. 431* Language Independent Options:: Controlling how diagnostics should be 432 formatted. 433* Warning Options:: How picky should the compiler be? 434* Debugging Options:: Symbol tables, measurements, and debugging dumps. 435* Optimize Options:: How much optimization? 436* Preprocessor Options:: Controlling header files and macro definitions. 437 Also, getting dependency information for Make. 438* Assembler Options:: Passing options to the assembler. 439* Link Options:: Specifying libraries and so on. 440* Directory Options:: Where to find header files and libraries. 441 Where to find the compiler executable files. 442* Spec Files:: How to pass switches to sub-processes. 443* Target Options:: Running a cross-compiler, or an old version of GCC. 444* Submodel Options:: Specifying minor hardware or convention variations, 445 such as 68010 vs 68020. 446* Code Gen Options:: Specifying conventions for function calls, data layout 447 and register usage. 448* Environment Variables:: Env vars that affect GCC. 449* Precompiled Headers:: Compiling a header once, and using it many times. 450 451 452File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 453 4543.1 Option Summary 455================== 456 457Here is a summary of all the options, grouped by type. Explanations are 458in the following sections. 459 460_Overall Options_ 461 *Note Options Controlling the Kind of Output: Overall Options. 462 -c -S -E -o FILE -no-canonical-prefixes 463 -pipe -pass-exit-codes 464 -x LANGUAGE -v -### --help[=CLASS[,...]] --target-help 465 --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG 466 -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE 467 468_C Language Options_ 469 *Note Options Controlling C Dialect: C Dialect Options. 470 -ansi -std=STANDARD -fgnu89-inline 471 -aux-info FILENAME -fallow-parameterless-variadic-functions 472 -fno-asm -fno-builtin -fno-builtin-FUNCTION 473 -fhosted -ffreestanding -fopenmp -fms-extensions -fplan9-extensions 474 -trigraphs -traditional -traditional-cpp 475 -fallow-single-precision -fcond-mismatch -flax-vector-conversions 476 -fsigned-bitfields -fsigned-char 477 -funsigned-bitfields -funsigned-char 478 479_C++ Language Options_ 480 *Note Options Controlling C++ Dialect: C++ Dialect Options. 481 -fabi-version=N -fno-access-control -fcheck-new 482 -fconstexpr-depth=N -ffriend-injection 483 -fno-elide-constructors 484 -fno-enforce-eh-specs 485 -ffor-scope -fno-for-scope -fno-gnu-keywords 486 -fno-implicit-templates 487 -fno-implicit-inline-templates 488 -fno-implement-inlines -fms-extensions 489 -fno-nonansi-builtins -fnothrow-opt -fno-operator-names 490 -fno-optional-diags -fpermissive 491 -fno-pretty-templates 492 -frepo -fno-rtti -fstats -ftemplate-backtrace-limit=N 493 -ftemplate-depth=N 494 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 495 -fno-default-inline -fvisibility-inlines-hidden 496 -fvisibility-ms-compat 497 -fext-numeric-literals 498 -Wabi -Wconversion-null -Wctor-dtor-privacy 499 -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing 500 -Wnoexcept -Wnon-virtual-dtor -Wreorder 501 -Weffc++ -Wstrict-null-sentinel 502 -Wno-non-template-friend -Wold-style-cast 503 -Woverloaded-virtual -Wno-pmf-conversions 504 -Wsign-promo 505 506_Objective-C and Objective-C++ Language Options_ 507 *Note Options Controlling Objective-C and Objective-C++ Dialects: 508 Objective-C and Objective-C++ Dialect Options. 509 -fconstant-string-class=CLASS-NAME 510 -fgnu-runtime -fnext-runtime 511 -fno-nil-receivers 512 -fobjc-abi-version=N 513 -fobjc-call-cxx-cdtors 514 -fobjc-direct-dispatch 515 -fobjc-exceptions 516 -fobjc-gc 517 -fobjc-nilcheck 518 -fobjc-std=objc1 519 -freplace-objc-classes 520 -fzero-link 521 -gen-decls 522 -Wassign-intercept 523 -Wno-protocol -Wselector 524 -Wstrict-selector-match 525 -Wundeclared-selector 526 527_Language Independent Options_ 528 *Note Options to Control Diagnostic Messages Formatting: Language 529 Independent Options. 530 -fmessage-length=N 531 -fdiagnostics-show-location=[once|every-line] 532 -fno-diagnostics-show-option -fno-diagnostics-show-caret 533 534_Warning Options_ 535 *Note Options to Request or Suppress Warnings: Warning Options. 536 -fsyntax-only -fmax-errors=N -Wpedantic 537 -pedantic-errors 538 -w -Wextra -Wall -Waddress -Waggregate-return 539 -Waggressive-loop-optimizations -Warray-bounds 540 -Wno-attributes -Wno-builtin-macro-redefined 541 -Wc++-compat -Wc++11-compat -Wcast-align -Wcast-qual 542 -Wchar-subscripts -Wclobbered -Wcomment 543 -Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated 544 -Wno-deprecated-declarations -Wdisabled-optimization 545 -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare 546 -Wno-endif-labels -Werror -Werror=* 547 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 548 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral 549 -Wformat-security -Wformat-y2k 550 -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init 551 -Wignored-qualifiers 552 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 553 -Winit-self -Winline -Wmaybe-uninitialized 554 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 555 -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations 556 -Wlogical-op -Wlong-long 557 -Wmain -Wmaybe-uninitialized -Wmissing-braces -Wmissing-field-initializers 558 -Wmissing-include-dirs 559 -Wno-mudflap 560 -Wno-multichar -Wnonnull -Wno-overflow 561 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded 562 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format 563 -Wpointer-arith -Wno-pointer-to-int-cast 564 -Wredundant-decls -Wno-return-local-addr 565 -Wreturn-type -Wsequence-point -Wshadow 566 -Wsign-compare -Wsign-conversion -Wsizeof-pointer-memaccess 567 -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing 568 -Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=N 569 -Wsuggest-attribute=[pure|const|noreturn|format] 570 -Wmissing-format-attribute 571 -Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand 572 -Wsystem-headers -Wtrampolines -Wtrigraphs -Wtype-limits -Wundef 573 -Wuninitialized -Wunknown-pragmas -Wno-pragmas 574 -Wunsuffixed-float-constants -Wunused -Wunused-function 575 -Wunused-label -Wunused-local-typedefs -Wunused-parameter 576 -Wno-unused-result -Wunused-value -Wunused-variable 577 -Wunused-but-set-parameter -Wunused-but-set-variable 578 -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance 579 -Wvla -Wvolatile-register-var -Wwrite-strings -Wzero-as-null-pointer-constant 580 581_C and Objective-C-only Warning Options_ 582 -Wbad-function-cast -Wmissing-declarations 583 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs 584 -Wold-style-declaration -Wold-style-definition 585 -Wstrict-prototypes -Wtraditional -Wtraditional-conversion 586 -Wdeclaration-after-statement -Wpointer-sign 587 588_Debugging Options_ 589 *Note Options for Debugging Your Program or GCC: Debugging Options. 590 -dLETTERS -dumpspecs -dumpmachine -dumpversion 591 -fsanitize=STYLE 592 -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST 593 -fdisable-ipa-PASS_NAME 594 -fdisable-rtl-PASS_NAME 595 -fdisable-rtl-PASS-NAME=RANGE-LIST 596 -fdisable-tree-PASS_NAME 597 -fdisable-tree-PASS-NAME=RANGE-LIST 598 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links 599 -fdump-translation-unit[-N] 600 -fdump-class-hierarchy[-N] 601 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline 602 -fdump-passes 603 -fdump-statistics 604 -fdump-tree-all 605 -fdump-tree-original[-N] 606 -fdump-tree-optimized[-N] 607 -fdump-tree-cfg -fdump-tree-alias 608 -fdump-tree-ch 609 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 610 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 611 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N] 612 -fdump-tree-dom[-N] 613 -fdump-tree-dse[-N] 614 -fdump-tree-phiprop[-N] 615 -fdump-tree-phiopt[-N] 616 -fdump-tree-forwprop[-N] 617 -fdump-tree-copyrename[-N] 618 -fdump-tree-nrv -fdump-tree-vect 619 -fdump-tree-sink 620 -fdump-tree-sra[-N] 621 -fdump-tree-forwprop[-N] 622 -fdump-tree-fre[-N] 623 -fdump-tree-vrp[-N] 624 -ftree-vectorizer-verbose=N 625 -fdump-tree-storeccp[-N] 626 -fdump-final-insns=FILE 627 -fcompare-debug[=OPTS] -fcompare-debug-second 628 -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types 629 -feliminate-unused-debug-symbols -femit-class-debug-always 630 -fenable-KIND-PASS 631 -fenable-KIND-PASS=RANGE-LIST 632 -fdebug-types-section -fmem-report-wpa 633 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 634 -fopt-info 635 -fopt-info-OPTIONS[=FILE] 636 -frandom-seed=STRING -fsched-verbose=N 637 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose 638 -fstack-usage -ftest-coverage -ftime-report -fvar-tracking 639 -fvar-tracking-assignments -fvar-tracking-assignments-toggle 640 -g -gLEVEL -gtoggle -gcoff -gdwarf-VERSION 641 -ggdb -grecord-gcc-switches -gno-record-gcc-switches 642 -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf 643 -gvms -gxcoff -gxcoff+ 644 -fno-merge-debug-strings -fno-dwarf2-cfi-asm 645 -fdebug-prefix-map=OLD=NEW 646 -femit-struct-debug-baseonly -femit-struct-debug-reduced 647 -femit-struct-debug-detailed[=SPEC-LIST] 648 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 649 -print-multi-directory -print-multi-lib -print-multi-os-directory 650 -print-prog-name=PROGRAM -print-search-dirs -Q 651 -print-sysroot -print-sysroot-headers-suffix 652 -save-temps -save-temps=cwd -save-temps=obj -time[=FILE] 653 654_Optimization Options_ 655 *Note Options that Control Optimization: Optimize Options. 656 -faggressive-loop-optimizations -falign-functions[=N] 657 -falign-jumps[=N] 658 -falign-labels[=N] -falign-loops[=N] 659 -fassociative-math -fauto-inc-dec -fbranch-probabilities 660 -fbranch-target-load-optimize -fbranch-target-load-optimize2 661 -fbtr-bb-exclusive -fcaller-saves 662 -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack 663 -fcompare-elim -fcprop-registers -fcrossjumping 664 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules 665 -fcx-limited-range 666 -fdata-sections -fdce -fdelayed-branch 667 -fdelete-null-pointer-checks -fdevirtualize -fdse 668 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects 669 -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE 670 -fforward-propagate -ffp-contract=STYLE -ffunction-sections 671 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity 672 -fgcse-sm -fhoist-adjacent-loads -fif-conversion 673 -fif-conversion2 -findirect-inlining 674 -finline-functions -finline-functions-called-once -finline-limit=N 675 -finline-small-functions -fipa-cp -fipa-cp-clone 676 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference 677 -fira-algorithm=ALGORITHM 678 -fira-region=REGION -fira-hoist-pressure 679 -fira-loop-pressure -fno-ira-share-save-slots 680 -fno-ira-share-spill-slots -fira-verbose=N 681 -fivopts -fkeep-inline-functions -fkeep-static-consts 682 -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize 683 -floop-parallelize-all -flto -flto-compression-level 684 -flto-partition=ALG -flto-report -fmerge-all-constants 685 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves 686 -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg 687 -fno-default-inline 688 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 689 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 690 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 691 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 692 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls 693 -fpartial-inlining -fpeel-loops -fpredictive-commoning 694 -fprefetch-loop-arrays -fprofile-report 695 -fprofile-correction -fprofile-dir=PATH -fprofile-generate 696 -fprofile-generate=PATH 697 -fprofile-use -fprofile-use=PATH -fprofile-values 698 -freciprocal-math -free -fregmove -frename-registers -freorder-blocks 699 -freorder-blocks-and-partition -freorder-functions 700 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 701 -frounding-math -fsched2-use-superblocks -fsched-pressure 702 -fsched-spec-load -fsched-spec-load-dangerous 703 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 704 -fsched-group-heuristic -fsched-critical-path-heuristic 705 -fsched-spec-insn-heuristic -fsched-rank-heuristic 706 -fsched-last-insn-heuristic -fsched-dep-count-heuristic 707 -fschedule-insns -fschedule-insns2 -fsection-anchors 708 -fselective-scheduling -fselective-scheduling2 709 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops 710 -fshrink-wrap -fsignaling-nans -fsingle-precision-constant 711 -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector 712 -fstack-protector-all -fstrict-aliasing -fstrict-overflow 713 -fthread-jumps -ftracer -ftree-bit-ccp 714 -ftree-builtin-call-dce -ftree-ccp -ftree-ch 715 -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop 716 -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse 717 -ftree-forwprop -ftree-fre -ftree-loop-if-convert 718 -ftree-loop-if-convert-stores -ftree-loop-im 719 -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns 720 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize 721 -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta 722 -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra 723 -ftree-switch-conversion -ftree-tail-merge 724 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp 725 -funit-at-a-time -funroll-all-loops -funroll-loops 726 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops 727 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb 728 -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin 729 --param NAME=VALUE 730 -O -O0 -O1 -O2 -O3 -Os -Ofast -Og 731 732_Preprocessor Options_ 733 *Note Options Controlling the Preprocessor: Preprocessor Options. 734 -AQUESTION=ANSWER 735 -A-QUESTION[=ANSWER] 736 -C -dD -dI -dM -dN 737 -DMACRO[=DEFN] -E -H 738 -idirafter DIR 739 -include FILE -imacros FILE 740 -iprefix FILE -iwithprefix DIR 741 -iwithprefixbefore DIR -isystem DIR 742 -imultilib DIR -isysroot DIR 743 -M -MM -MF -MG -MP -MQ -MT -nostdinc 744 -P -fdebug-cpp -ftrack-macro-expansion -fworking-directory 745 -remap -trigraphs -undef -UMACRO 746 -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp 747 748_Assembler Option_ 749 *Note Passing Options to the Assembler: Assembler Options. 750 -Wa,OPTION -Xassembler OPTION 751 752_Linker Options_ 753 *Note Options for Linking: Link Options. 754 OBJECT-FILE-NAME -lLIBRARY 755 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 756 -s -static -static-libgcc -static-libstdc++ 757 -static-libasan -static-libtsan 758 -shared -shared-libgcc -symbolic 759 -T SCRIPT -Wl,OPTION -Xlinker OPTION 760 -u SYMBOL 761 762_Directory Options_ 763 *Note Options for Directory Search: Directory Options. 764 -BPREFIX -IDIR -iplugindir=DIR 765 -iquoteDIR -LDIR -specs=FILE -I- 766 --sysroot=DIR --no-sysroot-suffix 767 768_Machine Dependent Options_ 769 *Note Hardware Models and Configurations: Submodel Options. 770 771 _AArch64 Options_ 772 -mbig-endian -mlittle-endian 773 -mgeneral-regs-only 774 -mcmodel=tiny -mcmodel=small -mcmodel=large 775 -mstrict-align 776 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 777 -mtls-dialect=desc -mtls-dialect=traditional 778 -mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 779 -march=NAME -mcpu=NAME -mtune=NAME 780 781 _Adapteva Epiphany Options_ 782 -mhalf-reg-file -mprefer-short-insn-regs 783 -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf 784 -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM 785 -mround-nearest -mlong-calls -mshort-calls -msmall16 786 -mfp-mode=MODE -mvect-double -max-vect-align=NUM 787 -msplit-vecmove-early -m1reg-REG 788 789 _ARM Options_ 790 -mapcs-frame -mno-apcs-frame 791 -mabi=NAME 792 -mapcs-stack-check -mno-apcs-stack-check 793 -mapcs-float -mno-apcs-float 794 -mapcs-reentrant -mno-apcs-reentrant 795 -msched-prolog -mno-sched-prolog 796 -mlittle-endian -mbig-endian -mwords-little-endian 797 -mfloat-abi=NAME 798 -mfp16-format=NAME 799 -mthumb-interwork -mno-thumb-interwork 800 -mcpu=NAME -march=NAME -mfpu=NAME 801 -mstructure-size-boundary=N 802 -mabort-on-noreturn 803 -mlong-calls -mno-long-calls 804 -msingle-pic-base -mno-single-pic-base 805 -mpic-register=REG 806 -mnop-fun-dllimport 807 -mpoke-function-name 808 -mthumb -marm 809 -mtpcs-frame -mtpcs-leaf-frame 810 -mcaller-super-interworking -mcallee-super-interworking 811 -mtp=NAME -mtls-dialect=DIALECT 812 -mword-relocations 813 -mfix-cortex-m3-ldrd 814 -munaligned-access 815 816 _AVR Options_ 817 -mmcu=MCU -maccumulate-args -mbranch-cost=COST 818 -mcall-prologues -mint8 -mno-interrupts -mrelax 819 -mstrict-X -mtiny-stack -Waddr-space-convert 820 821 _Blackfin Options_ 822 -mcpu=CPU[-SIREVISION] 823 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 824 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 825 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 826 -mno-id-shared-library -mshared-library-id=N 827 -mleaf-id-shared-library -mno-leaf-id-shared-library 828 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 829 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 830 -micplb 831 832 _C6X Options_ 833 -mbig-endian -mlittle-endian -march=CPU 834 -msim -msdata=SDATA-TYPE 835 836 _CRIS Options_ 837 -mcpu=CPU -march=CPU -mtune=CPU 838 -mmax-stack-frame=N -melinux-stacksize=N 839 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 840 -mstack-align -mdata-align -mconst-align 841 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 842 -melf -maout -melinux -mlinux -sim -sim2 843 -mmul-bug-workaround -mno-mul-bug-workaround 844 845 _CR16 Options_ 846 -mmac 847 -mcr16cplus -mcr16c 848 -msim -mint32 -mbit-ops 849 -mdata-model=MODEL 850 851 _Darwin Options_ 852 -all_load -allowable_client -arch -arch_errors_fatal 853 -arch_only -bind_at_load -bundle -bundle_loader 854 -client_name -compatibility_version -current_version 855 -dead_strip 856 -dependency-file -dylib_file -dylinker_install_name 857 -dynamic -dynamiclib -exported_symbols_list 858 -filelist -flat_namespace -force_cpusubtype_ALL 859 -force_flat_namespace -headerpad_max_install_names 860 -iframework 861 -image_base -init -install_name -keep_private_externs 862 -multi_module -multiply_defined -multiply_defined_unused 863 -noall_load -no_dead_strip_inits_and_terms 864 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 865 -pagezero_size -prebind -prebind_all_twolevel_modules 866 -private_bundle -read_only_relocs -sectalign 867 -sectobjectsymbols -whyload -seg1addr 868 -sectcreate -sectobjectsymbols -sectorder 869 -segaddr -segs_read_only_addr -segs_read_write_addr 870 -seg_addr_table -seg_addr_table_filename -seglinkedit 871 -segprot -segs_read_only_addr -segs_read_write_addr 872 -single_module -static -sub_library -sub_umbrella 873 -twolevel_namespace -umbrella -undefined 874 -unexported_symbols_list -weak_reference_mismatches 875 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 876 -mkernel -mone-byte-bool 877 878 _DEC Alpha Options_ 879 -mno-fp-regs -msoft-float 880 -mieee -mieee-with-inexact -mieee-conformant 881 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 882 -mtrap-precision=MODE -mbuild-constants 883 -mcpu=CPU-TYPE -mtune=CPU-TYPE 884 -mbwx -mmax -mfix -mcix 885 -mfloat-vax -mfloat-ieee 886 -mexplicit-relocs -msmall-data -mlarge-data 887 -msmall-text -mlarge-text 888 -mmemory-latency=TIME 889 890 _FR30 Options_ 891 -msmall-model -mno-lsim 892 893 _FRV Options_ 894 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 895 -mhard-float -msoft-float 896 -malloc-cc -mfixed-cc -mdword -mno-dword 897 -mdouble -mno-double 898 -mmedia -mno-media -mmuladd -mno-muladd 899 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 900 -mlinked-fp -mlong-calls -malign-labels 901 -mlibrary-pic -macc-4 -macc-8 902 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 903 -moptimize-membar -mno-optimize-membar 904 -mscc -mno-scc -mcond-exec -mno-cond-exec 905 -mvliw-branch -mno-vliw-branch 906 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 907 -mno-nested-cond-exec -mtomcat-stats 908 -mTLS -mtls 909 -mcpu=CPU 910 911 _GNU/Linux Options_ 912 -mglibc -muclibc -mbionic -mandroid 913 -tno-android-cc -tno-android-ld 914 915 _H8/300 Options_ 916 -mrelax -mh -ms -mn -mexr -mno-exr -mint32 -malign-300 917 918 _HPPA Options_ 919 -march=ARCHITECTURE-TYPE 920 -mbig-switch -mdisable-fpregs -mdisable-indexing 921 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 922 -mfixed-range=REGISTER-RANGE 923 -mjump-in-delay -mlinker-opt -mlong-calls 924 -mlong-load-store -mno-big-switch -mno-disable-fpregs 925 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 926 -mno-jump-in-delay -mno-long-load-store 927 -mno-portable-runtime -mno-soft-float 928 -mno-space-regs -msoft-float -mpa-risc-1-0 929 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 930 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 931 -munix=UNIX-STD -nolibdld -static -threads 932 933 _i386 and x86-64 Options_ 934 -mtune=CPU-TYPE -march=CPU-TYPE 935 -mfpmath=UNIT 936 -masm=DIALECT -mno-fancy-math-387 937 -mno-fp-ret-in-387 -msoft-float 938 -mno-wide-multiply -mrtd -malign-double 939 -mpreferred-stack-boundary=NUM 940 -mincoming-stack-boundary=NUM 941 -mcld -mcx16 -msahf -mmovbe -mcrc32 942 -mrecip -mrecip=OPT 943 -mvzeroupper -mprefer-avx128 944 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 945 -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma 946 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt 947 -mbmi2 -mrtm -mlwp -mthreads 948 -mno-align-stringops -minline-all-stringops 949 -minline-stringops-dynamically -mstringop-strategy=ALG 950 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 951 -m96bit-long-double -mlong-double-64 -mlong-double-80 952 -mregparm=NUM -msseregparm 953 -mveclibabi=TYPE -mvect8-ret-in-mem 954 -mpc32 -mpc64 -mpc80 -mstackrealign 955 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 956 -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE 957 -m32 -m64 -mx32 -mlarge-data-threshold=NUM 958 -msse2avx -mfentry -m8bit-idiv 959 -mavx256-split-unaligned-load -mavx256-split-unaligned-store 960 961 _i386 and x86-64 Windows Options_ 962 -mconsole -mcygwin -mno-cygwin -mdll 963 -mnop-fun-dllimport -mthread 964 -municode -mwin32 -mwindows -fno-set-stack-executable 965 966 _IA-64 Options_ 967 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 968 -mvolatile-asm-stop -mregister-names -msdata -mno-sdata 969 -mconstant-gp -mauto-pic -mfused-madd 970 -minline-float-divide-min-latency 971 -minline-float-divide-max-throughput 972 -mno-inline-float-divide 973 -minline-int-divide-min-latency 974 -minline-int-divide-max-throughput 975 -mno-inline-int-divide 976 -minline-sqrt-min-latency -minline-sqrt-max-throughput 977 -mno-inline-sqrt 978 -mdwarf2-asm -mearly-stop-bits 979 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 980 -mtune=CPU-TYPE -milp32 -mlp64 981 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec 982 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 983 -msched-spec-ldc -msched-spec-control-ldc 984 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns 985 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path 986 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost 987 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS 988 989 _LM32 Options_ 990 -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled 991 -msign-extend-enabled -muser-enabled 992 993 _M32R/D Options_ 994 -m32r2 -m32rx -m32r 995 -mdebug 996 -malign-loops -mno-align-loops 997 -missue-rate=NUMBER 998 -mbranch-cost=NUMBER 999 -mmodel=CODE-SIZE-MODEL-TYPE 1000 -msdata=SDATA-TYPE 1001 -mno-flush-func -mflush-func=NAME 1002 -mno-flush-trap -mflush-trap=NUMBER 1003 -G NUM 1004 1005 _M32C Options_ 1006 -mcpu=CPU -msim -memregs=NUMBER 1007 1008 _M680x0 Options_ 1009 -march=ARCH -mcpu=CPU -mtune=TUNE 1010 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 1011 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 1012 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 1013 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 1014 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 1015 -malign-int -mstrict-align -msep-data -mno-sep-data 1016 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 1017 -mxgot -mno-xgot 1018 1019 _MCore Options_ 1020 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 1021 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 1022 -m4byte-functions -mno-4byte-functions -mcallgraph-data 1023 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 1024 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 1025 1026 _MeP Options_ 1027 -mabsdiff -mall-opts -maverage -mbased=N -mbitops 1028 -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2 1029 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax 1030 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf 1031 -mtiny=N 1032 1033 _MicroBlaze Options_ 1034 -msoft-float -mhard-float -msmall-divides -mcpu=CPU 1035 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift 1036 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss 1037 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt 1038 -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL 1039 1040 _MIPS Options_ 1041 -EL -EB -march=ARCH -mtune=ARCH 1042 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 1043 -mips64 -mips64r2 1044 -mips16 -mno-mips16 -mflip-mips16 1045 -minterlink-mips16 -mno-interlink-mips16 1046 -mabi=ABI -mabicalls -mno-abicalls 1047 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 1048 -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float 1049 -mno-float -msingle-float -mdouble-float 1050 -mdsp -mno-dsp -mdspr2 -mno-dspr2 1051 -mmcu -mmno-mcu 1052 -mfpu=FPU-TYPE 1053 -msmartmips -mno-smartmips 1054 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 1055 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 1056 -mlong64 -mlong32 -msym32 -mno-sym32 1057 -GNUM -mlocal-sdata -mno-local-sdata 1058 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 1059 -membedded-data -mno-embedded-data 1060 -muninit-const-in-rodata -mno-uninit-const-in-rodata 1061 -mcode-readable=SETTING 1062 -msplit-addresses -mno-split-addresses 1063 -mexplicit-relocs -mno-explicit-relocs 1064 -mcheck-zero-division -mno-check-zero-division 1065 -mdivide-traps -mdivide-breaks 1066 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 1067 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 1068 -mfix-24k -mno-fix-24k 1069 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 1070 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 1071 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 1072 -mflush-func=FUNC -mno-flush-func 1073 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 1074 -mfp-exceptions -mno-fp-exceptions 1075 -mvr4130-align -mno-vr4130-align -msynci -mno-synci 1076 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address 1077 1078 _MMIX Options_ 1079 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 1080 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 1081 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 1082 -mno-base-addresses -msingle-exit -mno-single-exit 1083 1084 _MN10300 Options_ 1085 -mmult-bug -mno-mult-bug 1086 -mno-am33 -mam33 -mam33-2 -mam34 1087 -mtune=CPU-TYPE 1088 -mreturn-pointer-on-d0 1089 -mno-crt0 -mrelax -mliw -msetlb 1090 1091 _Moxie Options_ 1092 -meb -mel -mno-crt0 1093 1094 _PDP-11 Options_ 1095 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 1096 -mbcopy -mbcopy-builtin -mint32 -mno-int16 1097 -mint16 -mno-int32 -mfloat32 -mno-float64 1098 -mfloat64 -mno-float32 -mabshi -mno-abshi 1099 -mbranch-expensive -mbranch-cheap 1100 -munix-asm -mdec-asm 1101 1102 _picoChip Options_ 1103 -mae=AE_TYPE -mvliw-lookahead=N 1104 -msymbol-as-address -mno-inefficient-warnings 1105 1106 _PowerPC Options_ See RS/6000 and PowerPC Options. 1107 1108 _RL78 Options_ 1109 -msim -mmul=none -mmul=g13 -mmul=rl78 1110 1111 _RS/6000 and PowerPC Options_ 1112 -mcpu=CPU-TYPE 1113 -mtune=CPU-TYPE 1114 -mcmodel=CODE-MODEL 1115 -mpowerpc64 1116 -maltivec -mno-altivec 1117 -mpowerpc-gpopt -mno-powerpc-gpopt 1118 -mpowerpc-gfxopt -mno-powerpc-gfxopt 1119 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd 1120 -mfprnd -mno-fprnd 1121 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 1122 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 1123 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 1124 -malign-power -malign-natural 1125 -msoft-float -mhard-float -mmultiple -mno-multiple 1126 -msingle-float -mdouble-float -msimple-fpu 1127 -mstring -mno-string -mupdate -mno-update 1128 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 1129 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 1130 -mstrict-align -mno-strict-align -mrelocatable 1131 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 1132 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 1133 -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base 1134 -mprioritize-restricted-insns=PRIORITY 1135 -msched-costly-dep=DEPENDENCE_TYPE 1136 -minsert-sched-nops=SCHEME 1137 -mcall-sysv -mcall-netbsd 1138 -maix-struct-return -msvr4-struct-return 1139 -mabi=ABI-TYPE -msecure-plt -mbss-plt 1140 -mblock-move-inline-limit=NUM 1141 -misel -mno-isel 1142 -misel=yes -misel=no 1143 -mspe -mno-spe 1144 -mspe=yes -mspe=no 1145 -mpaired 1146 -mgen-cell-microcode -mwarn-cell-microcode 1147 -mvrsave -mno-vrsave 1148 -mmulhw -mno-mulhw 1149 -mdlmzb -mno-dlmzb 1150 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 1151 -mprototype -mno-prototype 1152 -msim -mmvme -mads -myellowknife -memb -msdata 1153 -msdata=OPT -mvxworks -G NUM -pthread 1154 -mrecip -mrecip=OPT -mno-recip -mrecip-precision 1155 -mno-recip-precision 1156 -mveclibabi=TYPE -mfriz -mno-friz 1157 -mpointers-to-nested-functions -mno-pointers-to-nested-functions 1158 -msave-toc-indirect -mno-save-toc-indirect 1159 -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector 1160 -mcrypto -mno-crypto -mdirect-move -mno-direct-move 1161 -mquad-memory -mno-quad-memory 1162 -mquad-memory-atomic -mno-quad-memory-atomic 1163 -mcompat-align-parm -mno-compat-align-parm 1164 1165 _RX Options_ 1166 -m64bit-doubles -m32bit-doubles -fpu -nofpu 1167 -mcpu= 1168 -mbig-endian-data -mlittle-endian-data 1169 -msmall-data 1170 -msim -mno-sim 1171 -mas100-syntax -mno-as100-syntax 1172 -mrelax 1173 -mmax-constant-size= 1174 -mint-register= 1175 -mpid 1176 -mno-warn-multiple-fast-interrupts 1177 -msave-acc-in-interrupts 1178 1179 _S/390 and zSeries Options_ 1180 -mtune=CPU-TYPE -march=CPU-TYPE 1181 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 1182 -mlong-double-64 -mlong-double-128 1183 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 1184 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 1185 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 1186 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 1187 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 1188 -mhotpatch=HALFWORDS,HALFWORDS 1189 1190 _Score Options_ 1191 -meb -mel 1192 -mnhwloop 1193 -muls 1194 -mmac 1195 -mscore5 -mscore5u -mscore7 -mscore7d 1196 1197 _SH Options_ 1198 -m1 -m2 -m2e 1199 -m2a-nofpu -m2a-single-only -m2a-single -m2a 1200 -m3 -m3e 1201 -m4-nofpu -m4-single-only -m4-single -m4 1202 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1203 -m5-64media -m5-64media-nofpu 1204 -m5-32media -m5-32media-nofpu 1205 -m5-compact -m5-compact-nofpu 1206 -mb -ml -mdalign -mrelax 1207 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1208 -mieee -mno-ieee -mbitops -misize -minline-ic_invalidate -mpadstruct 1209 -mspace -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1210 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1211 -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1212 -maccumulate-outgoing-args -minvalid-symbols 1213 -matomic-model=ATOMIC-MODEL 1214 -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch -mcbranchdi -mcmpeqdi 1215 -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra 1216 -mpretend-cmove -mtas 1217 1218 _Solaris 2 Options_ 1219 -mimpure-text -mno-impure-text 1220 -pthreads -pthread 1221 1222 _SPARC Options_ 1223 -mcpu=CPU-TYPE 1224 -mtune=CPU-TYPE 1225 -mcmodel=CODE-MODEL 1226 -mmemory-model=MEM-MODEL 1227 -m32 -m64 -mapp-regs -mno-app-regs 1228 -mfaster-structs -mno-faster-structs -mflat -mno-flat 1229 -mfpu -mno-fpu -mhard-float -msoft-float 1230 -mhard-quad-float -msoft-quad-float 1231 -mstack-bias -mno-stack-bias 1232 -munaligned-doubles -mno-unaligned-doubles 1233 -muser-mode -mno-user-mode 1234 -mv8plus -mno-v8plus -mvis -mno-vis 1235 -mvis2 -mno-vis2 -mvis3 -mno-vis3 1236 -mcbcond -mno-cbcond 1237 -mfmaf -mno-fmaf -mpopc -mno-popc 1238 -mfix-at697f -mfix-ut699 1239 1240 _SPU Options_ 1241 -mwarn-reloc -merror-reloc 1242 -msafe-dma -munsafe-dma 1243 -mbranch-hints 1244 -msmall-mem -mlarge-mem -mstdmain 1245 -mfixed-range=REGISTER-RANGE 1246 -mea32 -mea64 1247 -maddress-space-conversion -mno-address-space-conversion 1248 -mcache-size=CACHE-SIZE 1249 -matomic-updates -mno-atomic-updates 1250 1251 _System V Options_ 1252 -Qy -Qn -YP,PATHS -Ym,DIR 1253 1254 _TILE-Gx Options_ 1255 -mcpu=CPU -m32 -m64 -mcmodel=CODE-MODEL 1256 1257 _TILEPro Options_ 1258 -mcpu=CPU -m32 1259 1260 _V850 Options_ 1261 -mlong-calls -mno-long-calls -mep -mno-ep 1262 -mprolog-function -mno-prolog-function -mspace 1263 -mtda=N -msda=N -mzda=N 1264 -mapp-regs -mno-app-regs 1265 -mdisable-callt -mno-disable-callt 1266 -mv850e2v3 -mv850e2 -mv850e1 -mv850es 1267 -mv850e -mv850 -mv850e3v5 1268 -mloop 1269 -mrelax 1270 -mlong-jumps 1271 -msoft-float 1272 -mhard-float 1273 -mgcc-abi 1274 -mrh850-abi 1275 -mbig-switch 1276 1277 _VAX Options_ 1278 -mg -mgnu -munix 1279 1280 _VMS Options_ 1281 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 1282 -mpointer-size=SIZE 1283 1284 _VxWorks Options_ 1285 -mrtp -non-static -Bstatic -Bdynamic 1286 -Xbind-lazy -Xbind-now 1287 1288 _x86-64 Options_ See i386 and x86-64 Options. 1289 1290 _Xstormy16 Options_ 1291 -msim 1292 1293 _Xtensa Options_ 1294 -mconst16 -mno-const16 1295 -mfused-madd -mno-fused-madd 1296 -mforce-no-pic 1297 -mserialize-volatile -mno-serialize-volatile 1298 -mtext-section-literals -mno-text-section-literals 1299 -mtarget-align -mno-target-align 1300 -mlongcalls -mno-longcalls 1301 1302 _zSeries Options_ See S/390 and zSeries Options. 1303 1304_Code Generation Options_ 1305 *Note Options for Code Generation Conventions: Code Gen Options. 1306 -fcall-saved-REG -fcall-used-REG 1307 -ffixed-REG -fexceptions 1308 -fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables 1309 -fasynchronous-unwind-tables 1310 -fno-gnu-unique 1311 -finhibit-size-directive -finstrument-functions 1312 -finstrument-functions-exclude-function-list=SYM,SYM,... 1313 -finstrument-functions-exclude-file-list=FILE,FILE,... 1314 -fno-common -fno-ident 1315 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1316 -fno-jump-tables 1317 -frecord-gcc-switches 1318 -freg-struct-return -fshort-enums 1319 -fshort-double -fshort-wchar 1320 -fverbose-asm -fpack-struct[=N] -fstack-check 1321 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1322 -fno-stack-limit -fsplit-stack 1323 -fleading-underscore -ftls-model=MODEL 1324 -fstack-reuse=REUSE_LEVEL 1325 -ftrapv -fwrapv -fbounds-check 1326 -fvisibility -fstrict-volatile-bitfields -fsync-libcalls 1327 1328 1329* Menu: 1330 1331* Overall Options:: Controlling the kind of output: 1332 an executable, object files, assembler files, 1333 or preprocessed source. 1334* C Dialect Options:: Controlling the variant of C language compiled. 1335* C++ Dialect Options:: Variations on C++. 1336* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 1337 and Objective-C++. 1338* Language Independent Options:: Controlling how diagnostics should be 1339 formatted. 1340* Warning Options:: How picky should the compiler be? 1341* Debugging Options:: Symbol tables, measurements, and debugging dumps. 1342* Optimize Options:: How much optimization? 1343* Preprocessor Options:: Controlling header files and macro definitions. 1344 Also, getting dependency information for Make. 1345* Assembler Options:: Passing options to the assembler. 1346* Link Options:: Specifying libraries and so on. 1347* Directory Options:: Where to find header files and libraries. 1348 Where to find the compiler executable files. 1349* Spec Files:: How to pass switches to sub-processes. 1350* Target Options:: Running a cross-compiler, or an old version of GCC. 1351 1352 1353File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1354 13553.2 Options Controlling the Kind of Output 1356========================================== 1357 1358Compilation can involve up to four stages: preprocessing, compilation 1359proper, assembly and linking, always in that order. GCC is capable of 1360preprocessing and compiling several files either into several assembler 1361input files, or into one assembler input file; then each assembler 1362input file produces an object file, and linking combines all the object 1363files (those newly compiled, and those specified as input) into an 1364executable file. 1365 1366 For any given input file, the file name suffix determines what kind of 1367compilation is done: 1368 1369`FILE.c' 1370 C source code that must be preprocessed. 1371 1372`FILE.i' 1373 C source code that should not be preprocessed. 1374 1375`FILE.ii' 1376 C++ source code that should not be preprocessed. 1377 1378`FILE.m' 1379 Objective-C source code. Note that you must link with the 1380 `libobjc' library to make an Objective-C program work. 1381 1382`FILE.mi' 1383 Objective-C source code that should not be preprocessed. 1384 1385`FILE.mm' 1386`FILE.M' 1387 Objective-C++ source code. Note that you must link with the 1388 `libobjc' library to make an Objective-C++ program work. Note 1389 that `.M' refers to a literal capital M. 1390 1391`FILE.mii' 1392 Objective-C++ source code that should not be preprocessed. 1393 1394`FILE.h' 1395 C, C++, Objective-C or Objective-C++ header file to be turned into 1396 a precompiled header (default), or C, C++ header file to be turned 1397 into an Ada spec (via the `-fdump-ada-spec' switch). 1398 1399`FILE.cc' 1400`FILE.cp' 1401`FILE.cxx' 1402`FILE.cpp' 1403`FILE.CPP' 1404`FILE.c++' 1405`FILE.C' 1406 C++ source code that must be preprocessed. Note that in `.cxx', 1407 the last two letters must both be literally `x'. Likewise, `.C' 1408 refers to a literal capital C. 1409 1410`FILE.mm' 1411`FILE.M' 1412 Objective-C++ source code that must be preprocessed. 1413 1414`FILE.mii' 1415 Objective-C++ source code that should not be preprocessed. 1416 1417`FILE.hh' 1418`FILE.H' 1419`FILE.hp' 1420`FILE.hxx' 1421`FILE.hpp' 1422`FILE.HPP' 1423`FILE.h++' 1424`FILE.tcc' 1425 C++ header file to be turned into a precompiled header or Ada spec. 1426 1427`FILE.f' 1428`FILE.for' 1429`FILE.ftn' 1430 Fixed form Fortran source code that should not be preprocessed. 1431 1432`FILE.F' 1433`FILE.FOR' 1434`FILE.fpp' 1435`FILE.FPP' 1436`FILE.FTN' 1437 Fixed form Fortran source code that must be preprocessed (with the 1438 traditional preprocessor). 1439 1440`FILE.f90' 1441`FILE.f95' 1442`FILE.f03' 1443`FILE.f08' 1444 Free form Fortran source code that should not be preprocessed. 1445 1446`FILE.F90' 1447`FILE.F95' 1448`FILE.F03' 1449`FILE.F08' 1450 Free form Fortran source code that must be preprocessed (with the 1451 traditional preprocessor). 1452 1453`FILE.go' 1454 Go source code. 1455 1456`FILE.ads' 1457 Ada source code file that contains a library unit declaration (a 1458 declaration of a package, subprogram, or generic, or a generic 1459 instantiation), or a library unit renaming declaration (a package, 1460 generic, or subprogram renaming declaration). Such files are also 1461 called "specs". 1462 1463`FILE.adb' 1464 Ada source code file containing a library unit body (a subprogram 1465 or package body). Such files are also called "bodies". 1466 1467`FILE.s' 1468 Assembler code. 1469 1470`FILE.S' 1471`FILE.sx' 1472 Assembler code that must be preprocessed. 1473 1474`OTHER' 1475 An object file to be fed straight into linking. Any file name 1476 with no recognized suffix is treated this way. 1477 1478 You can specify the input language explicitly with the `-x' option: 1479 1480`-x LANGUAGE' 1481 Specify explicitly the LANGUAGE for the following input files 1482 (rather than letting the compiler choose a default based on the 1483 file name suffix). This option applies to all following input 1484 files until the next `-x' option. Possible values for LANGUAGE 1485 are: 1486 c c-header cpp-output 1487 c++ c++-header c++-cpp-output 1488 objective-c objective-c-header objective-c-cpp-output 1489 objective-c++ objective-c++-header objective-c++-cpp-output 1490 assembler assembler-with-cpp 1491 ada 1492 f77 f77-cpp-input f95 f95-cpp-input 1493 go 1494 java 1495 1496`-x none' 1497 Turn off any specification of a language, so that subsequent files 1498 are handled according to their file name suffixes (as they are if 1499 `-x' has not been used at all). 1500 1501`-pass-exit-codes' 1502 Normally the `gcc' program exits with the code of 1 if any phase 1503 of the compiler returns a non-success return code. If you specify 1504 `-pass-exit-codes', the `gcc' program instead returns with the 1505 numerically highest error produced by any phase returning an error 1506 indication. The C, C++, and Fortran front ends return 4 if an 1507 internal compiler error is encountered. 1508 1509 If you only want some of the stages of compilation, you can use `-x' 1510(or filename suffixes) to tell `gcc' where to start, and one of the 1511options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1512some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1513do nothing at all. 1514 1515`-c' 1516 Compile or assemble the source files, but do not link. The linking 1517 stage simply is not done. The ultimate output is in the form of an 1518 object file for each source file. 1519 1520 By default, the object file name for a source file is made by 1521 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1522 1523 Unrecognized input files, not requiring compilation or assembly, 1524 are ignored. 1525 1526`-S' 1527 Stop after the stage of compilation proper; do not assemble. The 1528 output is in the form of an assembler code file for each 1529 non-assembler input file specified. 1530 1531 By default, the assembler file name for a source file is made by 1532 replacing the suffix `.c', `.i', etc., with `.s'. 1533 1534 Input files that don't require compilation are ignored. 1535 1536`-E' 1537 Stop after the preprocessing stage; do not run the compiler 1538 proper. The output is in the form of preprocessed source code, 1539 which is sent to the standard output. 1540 1541 Input files that don't require preprocessing are ignored. 1542 1543`-o FILE' 1544 Place output in file FILE. This applies to whatever sort of 1545 output is being produced, whether it be an executable file, an 1546 object file, an assembler file or preprocessed C code. 1547 1548 If `-o' is not specified, the default is to put an executable file 1549 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1550 assembler file in `SOURCE.s', a precompiled header file in 1551 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1552 output. 1553 1554`-v' 1555 Print (on standard error output) the commands executed to run the 1556 stages of compilation. Also print the version number of the 1557 compiler driver program and of the preprocessor and the compiler 1558 proper. 1559 1560`-###' 1561 Like `-v' except the commands are not executed and arguments are 1562 quoted unless they contain only alphanumeric characters or `./-_'. 1563 This is useful for shell scripts to capture the driver-generated 1564 command lines. 1565 1566`-pipe' 1567 Use pipes rather than temporary files for communication between the 1568 various stages of compilation. This fails to work on some systems 1569 where the assembler is unable to read from a pipe; but the GNU 1570 assembler has no trouble. 1571 1572`--help' 1573 Print (on the standard output) a description of the command-line 1574 options understood by `gcc'. If the `-v' option is also specified 1575 then `--help' is also passed on to the various processes invoked 1576 by `gcc', so that they can display the command-line options they 1577 accept. If the `-Wextra' option has also been specified (prior to 1578 the `--help' option), then command-line options that have no 1579 documentation associated with them are also displayed. 1580 1581`--target-help' 1582 Print (on the standard output) a description of target-specific 1583 command-line options for each tool. For some targets extra 1584 target-specific information may also be printed. 1585 1586`--help={CLASS|[^]QUALIFIER}[,...]' 1587 Print (on the standard output) a description of the command-line 1588 options understood by the compiler that fit into all specified 1589 classes and qualifiers. These are the supported classes: 1590 1591 `optimizers' 1592 Display all of the optimization options supported by the 1593 compiler. 1594 1595 `warnings' 1596 Display all of the options controlling warning messages 1597 produced by the compiler. 1598 1599 `target' 1600 Display target-specific options. Unlike the `--target-help' 1601 option however, target-specific options of the linker and 1602 assembler are not displayed. This is because those tools do 1603 not currently support the extended `--help=' syntax. 1604 1605 `params' 1606 Display the values recognized by the `--param' option. 1607 1608 LANGUAGE 1609 Display the options supported for LANGUAGE, where LANGUAGE is 1610 the name of one of the languages supported in this version of 1611 GCC. 1612 1613 `common' 1614 Display the options that are common to all languages. 1615 1616 These are the supported qualifiers: 1617 1618 `undocumented' 1619 Display only those options that are undocumented. 1620 1621 `joined' 1622 Display options taking an argument that appears after an equal 1623 sign in the same continuous piece of text, such as: 1624 `--help=target'. 1625 1626 `separate' 1627 Display options taking an argument that appears as a separate 1628 word following the original option, such as: `-o output-file'. 1629 1630 Thus for example to display all the undocumented target-specific 1631 switches supported by the compiler, use: 1632 1633 --help=target,undocumented 1634 1635 The sense of a qualifier can be inverted by prefixing it with the 1636 `^' character, so for example to display all binary warning 1637 options (i.e., ones that are either on or off and that do not take 1638 an argument) that have a description, use: 1639 1640 --help=warnings,^joined,^undocumented 1641 1642 The argument to `--help=' should not consist solely of inverted 1643 qualifiers. 1644 1645 Combining several classes is possible, although this usually 1646 restricts the output so much that there is nothing to display. One 1647 case where it does work, however, is when one of the classes is 1648 TARGET. For example, to display all the target-specific 1649 optimization options, use: 1650 1651 --help=target,optimizers 1652 1653 The `--help=' option can be repeated on the command line. Each 1654 successive use displays its requested class of options, skipping 1655 those that have already been displayed. 1656 1657 If the `-Q' option appears on the command line before the 1658 `--help=' option, then the descriptive text displayed by `--help=' 1659 is changed. Instead of describing the displayed options, an 1660 indication is given as to whether the option is enabled, disabled 1661 or set to a specific value (assuming that the compiler knows this 1662 at the point where the `--help=' option is used). 1663 1664 Here is a truncated example from the ARM port of `gcc': 1665 1666 % gcc -Q -mabi=2 --help=target -c 1667 The following options are target specific: 1668 -mabi= 2 1669 -mabort-on-noreturn [disabled] 1670 -mapcs [disabled] 1671 1672 The output is sensitive to the effects of previous command-line 1673 options, so for example it is possible to find out which 1674 optimizations are enabled at `-O2' by using: 1675 1676 -Q -O2 --help=optimizers 1677 1678 Alternatively you can discover which binary optimizations are 1679 enabled by `-O3' by using: 1680 1681 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1682 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1683 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1684 1685`-no-canonical-prefixes' 1686 Do not expand any symbolic links, resolve references to `/../' or 1687 `/./', or make the path absolute when generating a relative prefix. 1688 1689`--version' 1690 Display the version number and copyrights of the invoked GCC. 1691 1692`-wrapper' 1693 Invoke all subcommands under a wrapper program. The name of the 1694 wrapper program and its parameters are passed as a comma separated 1695 list. 1696 1697 gcc -c t.c -wrapper gdb,--args 1698 1699 This invokes all subprograms of `gcc' under `gdb --args', thus the 1700 invocation of `cc1' is `gdb --args cc1 ...'. 1701 1702`-fplugin=NAME.so' 1703 Load the plugin code in file NAME.so, assumed to be a shared 1704 object to be dlopen'd by the compiler. The base name of the 1705 shared object file is used to identify the plugin for the purposes 1706 of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below). 1707 Each plugin should define the callback functions specified in the 1708 Plugins API. 1709 1710`-fplugin-arg-NAME-KEY=VALUE' 1711 Define an argument called KEY with a value of VALUE for the plugin 1712 called NAME. 1713 1714`-fdump-ada-spec[-slim]' 1715 For C and C++ source and include files, generate corresponding Ada 1716 specs. *Note Generating Ada Bindings for C and C++ headers: 1717 (gnat_ugn)Generating Ada Bindings for C and C++ headers, which 1718 provides detailed documentation on this feature. 1719 1720`-fada-spec-parent=UNIT' 1721 In conjunction with `-fdump-ada-spec[-slim]' above, generate Ada 1722 specs as child units of parent UNIT. 1723 1724`-fdump-go-spec=FILE' 1725 For input files in any language, generate corresponding Go 1726 declarations in FILE. This generates Go `const', `type', `var', 1727 and `func' declarations which may be a useful way to start writing 1728 a Go interface to code written in some other language. 1729 1730`@FILE' 1731 Read command-line options from FILE. The options read are 1732 inserted in place of the original @FILE option. If FILE does not 1733 exist, or cannot be read, then the option will be treated 1734 literally, and not removed. 1735 1736 Options in FILE are separated by whitespace. A whitespace 1737 character may be included in an option by surrounding the entire 1738 option in either single or double quotes. Any character 1739 (including a backslash) may be included by prefixing the character 1740 to be included with a backslash. The FILE may itself contain 1741 additional @FILE options; any such options will be processed 1742 recursively. 1743 1744 1745File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1746 17473.3 Compiling C++ Programs 1748========================== 1749 1750C++ source files conventionally use one of the suffixes `.C', `.cc', 1751`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1752`.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and 1753preprocessed C++ files use the suffix `.ii'. GCC recognizes files with 1754these names and compiles them as C++ programs even if you call the 1755compiler the same way as for compiling C programs (usually with the 1756name `gcc'). 1757 1758 However, the use of `gcc' does not add the C++ library. `g++' is a 1759program that calls GCC and automatically specifies linking against the 1760C++ library. It treats `.c', `.h' and `.i' files as C++ source files 1761instead of C source files unless `-x' is used. This program is also 1762useful when precompiling a C header file with a `.h' extension for use 1763in C++ compilations. On many systems, `g++' is also installed with the 1764name `c++'. 1765 1766 When you compile C++ programs, you may specify many of the same 1767command-line options that you use for compiling programs in any 1768language; or command-line options meaningful for C and related 1769languages; or options that are meaningful only for C++ programs. *Note 1770Options Controlling C Dialect: C Dialect Options, for explanations of 1771options for languages related to C. *Note Options Controlling C++ 1772Dialect: C++ Dialect Options, for explanations of options that are 1773meaningful only for C++ programs. 1774 1775 1776File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1777 17783.4 Options Controlling C Dialect 1779================================= 1780 1781The following options control the dialect of C (or languages derived 1782from C, such as C++, Objective-C and Objective-C++) that the compiler 1783accepts: 1784 1785`-ansi' 1786 In C mode, this is equivalent to `-std=c90'. In C++ mode, it is 1787 equivalent to `-std=c++98'. 1788 1789 This turns off certain features of GCC that are incompatible with 1790 ISO C90 (when compiling C code), or of standard C++ (when 1791 compiling C++ code), such as the `asm' and `typeof' keywords, and 1792 predefined macros such as `unix' and `vax' that identify the type 1793 of system you are using. It also enables the undesirable and 1794 rarely used ISO trigraph feature. For the C compiler, it disables 1795 recognition of C++ style `//' comments as well as the `inline' 1796 keyword. 1797 1798 The alternate keywords `__asm__', `__extension__', `__inline__' 1799 and `__typeof__' continue to work despite `-ansi'. You would not 1800 want to use them in an ISO C program, of course, but it is useful 1801 to put them in header files that might be included in compilations 1802 done with `-ansi'. Alternate predefined macros such as `__unix__' 1803 and `__vax__' are also available, with or without `-ansi'. 1804 1805 The `-ansi' option does not cause non-ISO programs to be rejected 1806 gratuitously. For that, `-Wpedantic' is required in addition to 1807 `-ansi'. *Note Warning Options::. 1808 1809 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1810 is used. Some header files may notice this macro and refrain from 1811 declaring certain functions or defining certain macros that the 1812 ISO standard doesn't call for; this is to avoid interfering with 1813 any programs that might use these names for other things. 1814 1815 Functions that are normally built in but do not have semantics 1816 defined by ISO C (such as `alloca' and `ffs') are not built-in 1817 functions when `-ansi' is used. *Note Other built-in functions 1818 provided by GCC: Other Builtins, for details of the functions 1819 affected. 1820 1821`-std=' 1822 Determine the language standard. *Note Language Standards 1823 Supported by GCC: Standards, for details of these standard 1824 versions. This option is currently only supported when compiling 1825 C or C++. 1826 1827 The compiler can accept several base standards, such as `c90' or 1828 `c++98', and GNU dialects of those standards, such as `gnu90' or 1829 `gnu++98'. When a base standard is specified, the compiler 1830 accepts all programs following that standard plus those using GNU 1831 extensions that do not contradict it. For example, `-std=c90' 1832 turns off certain features of GCC that are incompatible with ISO 1833 C90, such as the `asm' and `typeof' keywords, but not other GNU 1834 extensions that do not have a meaning in ISO C90, such as omitting 1835 the middle term of a `?:' expression. On the other hand, when a 1836 GNU dialect of a standard is specified, all features supported by 1837 the compiler are enabled, even when those features change the 1838 meaning of the base standard. As a result, some strict-conforming 1839 programs may be rejected. The particular standard is used by 1840 `-Wpedantic' to identify which features are GNU extensions given 1841 that version of the standard. For example `-std=gnu90 -Wpedantic' 1842 warns about C++ style `//' comments, while `-std=gnu99 -Wpedantic' 1843 does not. 1844 1845 A value for this option must be provided; possible values are 1846 1847 `c90' 1848 `c89' 1849 `iso9899:1990' 1850 Support all ISO C90 programs (certain GNU extensions that 1851 conflict with ISO C90 are disabled). Same as `-ansi' for C 1852 code. 1853 1854 `iso9899:199409' 1855 ISO C90 as modified in amendment 1. 1856 1857 `c99' 1858 `c9x' 1859 `iso9899:1999' 1860 `iso9899:199x' 1861 ISO C99. Note that this standard is not yet fully supported; 1862 see `http://gcc.gnu.org/c99status.html' for more information. 1863 The names `c9x' and `iso9899:199x' are deprecated. 1864 1865 `c11' 1866 `c1x' 1867 `iso9899:2011' 1868 ISO C11, the 2011 revision of the ISO C standard. Support is 1869 incomplete and experimental. The name `c1x' is deprecated. 1870 1871 `gnu90' 1872 `gnu89' 1873 GNU dialect of ISO C90 (including some C99 features). This is 1874 the default for C code. 1875 1876 `gnu99' 1877 `gnu9x' 1878 GNU dialect of ISO C99. When ISO C99 is fully implemented in 1879 GCC, this will become the default. The name `gnu9x' is 1880 deprecated. 1881 1882 `gnu11' 1883 `gnu1x' 1884 GNU dialect of ISO C11. Support is incomplete and 1885 experimental. The name `gnu1x' is deprecated. 1886 1887 `c++98' 1888 `c++03' 1889 The 1998 ISO C++ standard plus the 2003 technical corrigendum 1890 and some additional defect reports. Same as `-ansi' for C++ 1891 code. 1892 1893 `gnu++98' 1894 `gnu++03' 1895 GNU dialect of `-std=c++98'. This is the default for C++ 1896 code. 1897 1898 `c++11' 1899 `c++0x' 1900 The 2011 ISO C++ standard plus amendments. Support for C++11 1901 is still experimental, and may change in incompatible ways in 1902 future releases. The name `c++0x' is deprecated. 1903 1904 `gnu++11' 1905 `gnu++0x' 1906 GNU dialect of `-std=c++11'. Support for C++11 is still 1907 experimental, and may change in incompatible ways in future 1908 releases. The name `gnu++0x' is deprecated. 1909 1910 `c++1y' 1911 The next revision of the ISO C++ standard, tentatively 1912 planned for 2017. Support is highly experimental, and will 1913 almost certainly change in incompatible ways in future 1914 releases. 1915 1916 `gnu++1y' 1917 GNU dialect of `-std=c++1y'. Support is highly experimental, 1918 and will almost certainly change in incompatible ways in 1919 future releases. 1920 1921`-fgnu89-inline' 1922 The option `-fgnu89-inline' tells GCC to use the traditional GNU 1923 semantics for `inline' functions when in C99 mode. *Note An 1924 Inline Function is As Fast As a Macro: Inline. This option is 1925 accepted and ignored by GCC versions 4.1.3 up to but not including 1926 4.3. In GCC versions 4.3 and later it changes the behavior of GCC 1927 in C99 mode. Using this option is roughly equivalent to adding the 1928 `gnu_inline' function attribute to all inline functions (*note 1929 Function Attributes::). 1930 1931 The option `-fno-gnu89-inline' explicitly tells GCC to use the C99 1932 semantics for `inline' when in C99 or gnu99 mode (i.e., it 1933 specifies the default behavior). This option was first supported 1934 in GCC 4.3. This option is not supported in `-std=c90' or 1935 `-std=gnu90' mode. 1936 1937 The preprocessor macros `__GNUC_GNU_INLINE__' and 1938 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 1939 effect for `inline' functions. *Note Common Predefined Macros: 1940 (cpp)Common Predefined Macros. 1941 1942`-aux-info FILENAME' 1943 Output to the given filename prototyped declarations for all 1944 functions declared and/or defined in a translation unit, including 1945 those in header files. This option is silently ignored in any 1946 language other than C. 1947 1948 Besides declarations, the file indicates, in comments, the origin 1949 of each declaration (source file and line), whether the 1950 declaration was implicit, prototyped or unprototyped (`I', `N' for 1951 new or `O' for old, respectively, in the first character after the 1952 line number and the colon), and whether it came from a declaration 1953 or a definition (`C' or `F', respectively, in the following 1954 character). In the case of function definitions, a K&R-style list 1955 of arguments followed by their declarations is also provided, 1956 inside comments, after the declaration. 1957 1958`-fallow-parameterless-variadic-functions' 1959 Accept variadic functions without named parameters. 1960 1961 Although it is possible to define such a function, this is not very 1962 useful as it is not possible to read the arguments. This is only 1963 supported for C as this construct is allowed by C++. 1964 1965`-fno-asm' 1966 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1967 code can use these words as identifiers. You can use the keywords 1968 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1969 `-fno-asm'. 1970 1971 In C++, this switch only affects the `typeof' keyword, since `asm' 1972 and `inline' are standard keywords. You may want to use the 1973 `-fno-gnu-keywords' flag instead, which has the same effect. In 1974 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1975 the `asm' and `typeof' keywords, since `inline' is a standard 1976 keyword in ISO C99. 1977 1978`-fno-builtin' 1979`-fno-builtin-FUNCTION' 1980 Don't recognize built-in functions that do not begin with 1981 `__builtin_' as prefix. *Note Other built-in functions provided 1982 by GCC: Other Builtins, for details of the functions affected, 1983 including those which are not built-in functions when `-ansi' or 1984 `-std' options for strict ISO C conformance are used because they 1985 do not have an ISO standard meaning. 1986 1987 GCC normally generates special code to handle certain built-in 1988 functions more efficiently; for instance, calls to `alloca' may 1989 become single instructions which adjust the stack directly, and 1990 calls to `memcpy' may become inline copy loops. The resulting 1991 code is often both smaller and faster, but since the function 1992 calls no longer appear as such, you cannot set a breakpoint on 1993 those calls, nor can you change the behavior of the functions by 1994 linking with a different library. In addition, when a function is 1995 recognized as a built-in function, GCC may use information about 1996 that function to warn about problems with calls to that function, 1997 or to generate more efficient code, even if the resulting code 1998 still contains calls to that function. For example, warnings are 1999 given with `-Wformat' for bad calls to `printf' when `printf' is 2000 built in and `strlen' is known not to modify global memory. 2001 2002 With the `-fno-builtin-FUNCTION' option only the built-in function 2003 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 2004 If a function is named that is not built-in in this version of 2005 GCC, this option is ignored. There is no corresponding 2006 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 2007 functions selectively when using `-fno-builtin' or 2008 `-ffreestanding', you may define macros such as: 2009 2010 #define abs(n) __builtin_abs ((n)) 2011 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 2012 2013`-fhosted' 2014 Assert that compilation targets a hosted environment. This implies 2015 `-fbuiltin'. A hosted environment is one in which the entire 2016 standard library is available, and in which `main' has a return 2017 type of `int'. Examples are nearly everything except a kernel. 2018 This is equivalent to `-fno-freestanding'. 2019 2020`-ffreestanding' 2021 Assert that compilation targets a freestanding environment. This 2022 implies `-fno-builtin'. A freestanding environment is one in 2023 which the standard library may not exist, and program startup may 2024 not necessarily be at `main'. The most obvious example is an OS 2025 kernel. This is equivalent to `-fno-hosted'. 2026 2027 *Note Language Standards Supported by GCC: Standards, for details 2028 of freestanding and hosted environments. 2029 2030`-fopenmp' 2031 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 2032 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 2033 generates parallel code according to the OpenMP Application 2034 Program Interface v3.0 `http://www.openmp.org/'. This option 2035 implies `-pthread', and thus is only supported on targets that 2036 have support for `-pthread'. 2037 2038`-fgnu-tm' 2039 When the option `-fgnu-tm' is specified, the compiler generates 2040 code for the Linux variant of Intel's current Transactional Memory 2041 ABI specification document (Revision 1.1, May 6 2009). This is an 2042 experimental feature whose interface may change in future versions 2043 of GCC, as the official specification changes. Please note that 2044 not all architectures are supported for this feature. 2045 2046 For more information on GCC's support for transactional memory, 2047 *Note The GNU Transactional Memory Library: (libitm)Enabling 2048 libitm. 2049 2050 Note that the transactional memory feature is not supported with 2051 non-call exceptions (`-fnon-call-exceptions'). 2052 2053`-fms-extensions' 2054 Accept some non-standard constructs used in Microsoft header files. 2055 2056 In C++ code, this allows member names in structures to be similar 2057 to previous types declarations. 2058 2059 typedef int UOW; 2060 struct ABC { 2061 UOW UOW; 2062 }; 2063 2064 Some cases of unnamed fields in structures and unions are only 2065 accepted with this option. *Note Unnamed struct/union fields 2066 within structs/unions: Unnamed Fields, for details. 2067 2068`-fplan9-extensions' 2069 Accept some non-standard constructs used in Plan 9 code. 2070 2071 This enables `-fms-extensions', permits passing pointers to 2072 structures with anonymous fields to functions that expect pointers 2073 to elements of the type of the field, and permits referring to 2074 anonymous fields declared using a typedef. *Note Unnamed 2075 struct/union fields within structs/unions: Unnamed Fields, for 2076 details. This is only supported for C, not C++. 2077 2078`-trigraphs' 2079 Support ISO C trigraphs. The `-ansi' option (and `-std' options 2080 for strict ISO C conformance) implies `-trigraphs'. 2081 2082`-traditional' 2083`-traditional-cpp' 2084 Formerly, these options caused GCC to attempt to emulate a 2085 pre-standard C compiler. They are now only supported with the 2086 `-E' switch. The preprocessor continues to support a pre-standard 2087 mode. See the GNU CPP manual for details. 2088 2089`-fcond-mismatch' 2090 Allow conditional expressions with mismatched types in the second 2091 and third arguments. The value of such an expression is void. 2092 This option is not supported for C++. 2093 2094`-flax-vector-conversions' 2095 Allow implicit conversions between vectors with differing numbers 2096 of elements and/or incompatible element types. This option should 2097 not be used for new code. 2098 2099`-funsigned-char' 2100 Let the type `char' be unsigned, like `unsigned char'. 2101 2102 Each kind of machine has a default for what `char' should be. It 2103 is either like `unsigned char' by default or like `signed char' by 2104 default. 2105 2106 Ideally, a portable program should always use `signed char' or 2107 `unsigned char' when it depends on the signedness of an object. 2108 But many programs have been written to use plain `char' and expect 2109 it to be signed, or expect it to be unsigned, depending on the 2110 machines they were written for. This option, and its inverse, let 2111 you make such a program work with the opposite default. 2112 2113 The type `char' is always a distinct type from each of `signed 2114 char' or `unsigned char', even though its behavior is always just 2115 like one of those two. 2116 2117`-fsigned-char' 2118 Let the type `char' be signed, like `signed char'. 2119 2120 Note that this is equivalent to `-fno-unsigned-char', which is the 2121 negative form of `-funsigned-char'. Likewise, the option 2122 `-fno-signed-char' is equivalent to `-funsigned-char'. 2123 2124`-fsigned-bitfields' 2125`-funsigned-bitfields' 2126`-fno-signed-bitfields' 2127`-fno-unsigned-bitfields' 2128 These options control whether a bit-field is signed or unsigned, 2129 when the declaration does not use either `signed' or `unsigned'. 2130 By default, such a bit-field is signed, because this is 2131 consistent: the basic integer types such as `int' are signed types. 2132 2133 2134File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 2135 21363.5 Options Controlling C++ Dialect 2137=================================== 2138 2139This section describes the command-line options that are only meaningful 2140for C++ programs. You can also use most of the GNU compiler options 2141regardless of what language your program is in. For example, you might 2142compile a file `firstClass.C' like this: 2143 2144 g++ -g -frepo -O -c firstClass.C 2145 2146In this example, only `-frepo' is an option meant only for C++ 2147programs; you can use the other options with any language supported by 2148GCC. 2149 2150 Here is a list of options that are _only_ for compiling C++ programs: 2151 2152`-fabi-version=N' 2153 Use version N of the C++ ABI. The default is version 2. 2154 2155 Version 0 refers to the version conforming most closely to the C++ 2156 ABI specification. Therefore, the ABI obtained using version 0 2157 will change in different versions of G++ as ABI bugs are fixed. 2158 2159 Version 1 is the version of the C++ ABI that first appeared in G++ 2160 3.2. 2161 2162 Version 2 is the version of the C++ ABI that first appeared in G++ 2163 3.4. 2164 2165 Version 3 corrects an error in mangling a constant address as a 2166 template argument. 2167 2168 Version 4, which first appeared in G++ 4.5, implements a standard 2169 mangling for vector types. 2170 2171 Version 5, which first appeared in G++ 4.6, corrects the mangling 2172 of attribute const/volatile on function pointer types, decltype of 2173 a plain decl, and use of a function parameter in the declaration of 2174 another parameter. 2175 2176 Version 6, which first appeared in G++ 4.7, corrects the promotion 2177 behavior of C++11 scoped enums and the mangling of template 2178 argument packs, const/static_cast, prefix ++ and -, and a class 2179 scope function used as a template argument. 2180 2181 See also `-Wabi'. 2182 2183`-fno-access-control' 2184 Turn off all access checking. This switch is mainly useful for 2185 working around bugs in the access control code. 2186 2187`-fcheck-new' 2188 Check that the pointer returned by `operator new' is non-null 2189 before attempting to modify the storage allocated. This check is 2190 normally unnecessary because the C++ standard specifies that 2191 `operator new' only returns `0' if it is declared `throw()', in 2192 which case the compiler always checks the return value even 2193 without this option. In all other cases, when `operator new' has 2194 a non-empty exception specification, memory exhaustion is 2195 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 2196 2197`-fconstexpr-depth=N' 2198 Set the maximum nested evaluation depth for C++11 constexpr 2199 functions to N. A limit is needed to detect endless recursion 2200 during constant expression evaluation. The minimum specified by 2201 the standard is 512. 2202 2203`-fdeduce-init-list' 2204 Enable deduction of a template type parameter as 2205 `std::initializer_list' from a brace-enclosed initializer list, 2206 i.e. 2207 2208 template <class T> auto forward(T t) -> decltype (realfn (t)) 2209 { 2210 return realfn (t); 2211 } 2212 2213 void f() 2214 { 2215 forward({1,2}); // call forward<std::initializer_list<int>> 2216 } 2217 2218 This deduction was implemented as a possible extension to the 2219 originally proposed semantics for the C++11 standard, but was not 2220 part of the final standard, so it is disabled by default. This 2221 option is deprecated, and may be removed in a future version of 2222 G++. 2223 2224`-ffriend-injection' 2225 Inject friend functions into the enclosing namespace, so that they 2226 are visible outside the scope of the class in which they are 2227 declared. Friend functions were documented to work this way in 2228 the old Annotated C++ Reference Manual, and versions of G++ before 2229 4.1 always worked that way. However, in ISO C++ a friend function 2230 that is not declared in an enclosing scope can only be found using 2231 argument dependent lookup. This option causes friends to be 2232 injected as they were in earlier releases. 2233 2234 This option is for compatibility, and may be removed in a future 2235 release of G++. 2236 2237`-fno-elide-constructors' 2238 The C++ standard allows an implementation to omit creating a 2239 temporary that is only used to initialize another object of the 2240 same type. Specifying this option disables that optimization, and 2241 forces G++ to call the copy constructor in all cases. 2242 2243`-fno-enforce-eh-specs' 2244 Don't generate code to check for violation of exception 2245 specifications at run time. This option violates the C++ 2246 standard, but may be useful for reducing code size in production 2247 builds, much like defining `NDEBUG'. This does not give user code 2248 permission to throw exceptions in violation of the exception 2249 specifications; the compiler still optimizes based on the 2250 specifications, so throwing an unexpected exception results in 2251 undefined behavior at run time. 2252 2253`-fextern-tls-init' 2254`-fno-extern-tls-init' 2255 The C++11 and OpenMP standards allow `thread_local' and 2256 `threadprivate' variables to have dynamic (runtime) 2257 initialization. To support this, any use of such a variable goes 2258 through a wrapper function that performs any necessary 2259 initialization. When the use and definition of the variable are 2260 in the same translation unit, this overhead can be optimized away, 2261 but when the use is in a different translation unit there is 2262 significant overhead even if the variable doesn't actually need 2263 dynamic initialization. If the programmer can be sure that no use 2264 of the variable in a non-defining TU needs to trigger dynamic 2265 initialization (either because the variable is statically 2266 initialized, or a use of the variable in the defining TU will be 2267 executed before any uses in another TU), they can avoid this 2268 overhead with the `-fno-extern-tls-init' option. 2269 2270 On targets that support symbol aliases, the default is 2271 `-fextern-tls-init'. On targets that do not support symbol 2272 aliases, the default is `-fno-extern-tls-init'. 2273 2274`-ffor-scope' 2275`-fno-for-scope' 2276 If `-ffor-scope' is specified, the scope of variables declared in 2277 a for-init-statement is limited to the `for' loop itself, as 2278 specified by the C++ standard. If `-fno-for-scope' is specified, 2279 the scope of variables declared in a for-init-statement extends to 2280 the end of the enclosing scope, as was the case in old versions of 2281 G++, and other (traditional) implementations of C++. 2282 2283 If neither flag is given, the default is to follow the standard, 2284 but to allow and give a warning for old-style code that would 2285 otherwise be invalid, or have different behavior. 2286 2287`-fno-gnu-keywords' 2288 Do not recognize `typeof' as a keyword, so that code can use this 2289 word as an identifier. You can use the keyword `__typeof__' 2290 instead. `-ansi' implies `-fno-gnu-keywords'. 2291 2292`-fno-implicit-templates' 2293 Never emit code for non-inline templates that are instantiated 2294 implicitly (i.e. by use); only emit code for explicit 2295 instantiations. *Note Template Instantiation::, for more 2296 information. 2297 2298`-fno-implicit-inline-templates' 2299 Don't emit code for implicit instantiations of inline templates, 2300 either. The default is to handle inlines differently so that 2301 compiles with and without optimization need the same set of 2302 explicit instantiations. 2303 2304`-fno-implement-inlines' 2305 To save space, do not emit out-of-line copies of inline functions 2306 controlled by `#pragma implementation'. This causes linker errors 2307 if these functions are not inlined everywhere they are called. 2308 2309`-fms-extensions' 2310 Disable Wpedantic warnings about constructs used in MFC, such as 2311 implicit int and getting a pointer to member function via 2312 non-standard syntax. 2313 2314`-fno-nonansi-builtins' 2315 Disable built-in declarations of functions that are not mandated by 2316 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 2317 `bzero', `conjf', and other related functions. 2318 2319`-fnothrow-opt' 2320 Treat a `throw()' exception specification as if it were a 2321 `noexcept' specification to reduce or eliminate the text size 2322 overhead relative to a function with no exception specification. 2323 If the function has local variables of types with non-trivial 2324 destructors, the exception specification actually makes the 2325 function smaller because the EH cleanups for those variables can be 2326 optimized away. The semantic effect is that an exception thrown 2327 out of a function with such an exception specification results in 2328 a call to `terminate' rather than `unexpected'. 2329 2330`-fno-operator-names' 2331 Do not treat the operator name keywords `and', `bitand', `bitor', 2332 `compl', `not', `or' and `xor' as synonyms as keywords. 2333 2334`-fno-optional-diags' 2335 Disable diagnostics that the standard says a compiler does not 2336 need to issue. Currently, the only such diagnostic issued by G++ 2337 is the one for a name having multiple meanings within a class. 2338 2339`-fpermissive' 2340 Downgrade some diagnostics about nonconformant code from errors to 2341 warnings. Thus, using `-fpermissive' allows some nonconforming 2342 code to compile. 2343 2344`-fno-pretty-templates' 2345 When an error message refers to a specialization of a function 2346 template, the compiler normally prints the signature of the 2347 template followed by the template arguments and any typedefs or 2348 typenames in the signature (e.g. `void f(T) [with T = int]' rather 2349 than `void f(int)') so that it's clear which template is involved. 2350 When an error message refers to a specialization of a class 2351 template, the compiler omits any template arguments that match the 2352 default template arguments for that template. If either of these 2353 behaviors make it harder to understand the error message rather 2354 than easier, you can use `-fno-pretty-templates' to disable them. 2355 2356`-frepo' 2357 Enable automatic template instantiation at link time. This option 2358 also implies `-fno-implicit-templates'. *Note Template 2359 Instantiation::, for more information. 2360 2361`-fno-rtti' 2362 Disable generation of information about every class with virtual 2363 functions for use by the C++ run-time type identification features 2364 (`dynamic_cast' and `typeid'). If you don't use those parts of 2365 the language, you can save some space by using this flag. Note 2366 that exception handling uses the same information, but G++ 2367 generates it as needed. The `dynamic_cast' operator can still be 2368 used for casts that do not require run-time type information, i.e. 2369 casts to `void *' or to unambiguous base classes. 2370 2371`-fstats' 2372 Emit statistics about front-end processing at the end of the 2373 compilation. This information is generally only useful to the G++ 2374 development team. 2375 2376`-fstrict-enums' 2377 Allow the compiler to optimize using the assumption that a value of 2378 enumerated type can only be one of the values of the enumeration 2379 (as defined in the C++ standard; basically, a value that can be 2380 represented in the minimum number of bits needed to represent all 2381 the enumerators). This assumption may not be valid if the program 2382 uses a cast to convert an arbitrary integer value to the 2383 enumerated type. 2384 2385`-ftemplate-backtrace-limit=N' 2386 Set the maximum number of template instantiation notes for a single 2387 warning or error to N. The default value is 10. 2388 2389`-ftemplate-depth=N' 2390 Set the maximum instantiation depth for template classes to N. A 2391 limit on the template instantiation depth is needed to detect 2392 endless recursions during template class instantiation. ANSI/ISO 2393 C++ conforming programs must not rely on a maximum depth greater 2394 than 17 (changed to 1024 in C++11). The default value is 900, as 2395 the compiler can run out of stack space before hitting 1024 in 2396 some situations. 2397 2398`-fno-threadsafe-statics' 2399 Do not emit the extra code to use the routines specified in the C++ 2400 ABI for thread-safe initialization of local statics. You can use 2401 this option to reduce code size slightly in code that doesn't need 2402 to be thread-safe. 2403 2404`-fuse-cxa-atexit' 2405 Register destructors for objects with static storage duration with 2406 the `__cxa_atexit' function rather than the `atexit' function. 2407 This option is required for fully standards-compliant handling of 2408 static destructors, but only works if your C library supports 2409 `__cxa_atexit'. 2410 2411`-fno-use-cxa-get-exception-ptr' 2412 Don't use the `__cxa_get_exception_ptr' runtime routine. This 2413 causes `std::uncaught_exception' to be incorrect, but is necessary 2414 if the runtime routine is not available. 2415 2416`-fvisibility-inlines-hidden' 2417 This switch declares that the user does not attempt to compare 2418 pointers to inline functions or methods where the addresses of the 2419 two functions are taken in different shared objects. 2420 2421 The effect of this is that GCC may, effectively, mark inline 2422 methods with `__attribute__ ((visibility ("hidden")))' so that 2423 they do not appear in the export table of a DSO and do not require 2424 a PLT indirection when used within the DSO. Enabling this option 2425 can have a dramatic effect on load and link times of a DSO as it 2426 massively reduces the size of the dynamic export table when the 2427 library makes heavy use of templates. 2428 2429 The behavior of this switch is not quite the same as marking the 2430 methods as hidden directly, because it does not affect static 2431 variables local to the function or cause the compiler to deduce 2432 that the function is defined in only one shared object. 2433 2434 You may mark a method as having a visibility explicitly to negate 2435 the effect of the switch for that method. For example, if you do 2436 want to compare pointers to a particular inline method, you might 2437 mark it as having default visibility. Marking the enclosing class 2438 with explicit visibility has no effect. 2439 2440 Explicitly instantiated inline methods are unaffected by this 2441 option as their linkage might otherwise cross a shared library 2442 boundary. *Note Template Instantiation::. 2443 2444`-fvisibility-ms-compat' 2445 This flag attempts to use visibility settings to make GCC's C++ 2446 linkage model compatible with that of Microsoft Visual Studio. 2447 2448 The flag makes these changes to GCC's linkage model: 2449 2450 1. It sets the default visibility to `hidden', like 2451 `-fvisibility=hidden'. 2452 2453 2. Types, but not their members, are not hidden by default. 2454 2455 3. The One Definition Rule is relaxed for types without explicit 2456 visibility specifications that are defined in more than one 2457 shared object: those declarations are permitted if they are 2458 permitted when this option is not used. 2459 2460 In new code it is better to use `-fvisibility=hidden' and export 2461 those classes that are intended to be externally visible. 2462 Unfortunately it is possible for code to rely, perhaps 2463 accidentally, on the Visual Studio behavior. 2464 2465 Among the consequences of these changes are that static data 2466 members of the same type with the same name but defined in 2467 different shared objects are different, so changing one does not 2468 change the other; and that pointers to function members defined in 2469 different shared objects may not compare equal. When this flag is 2470 given, it is a violation of the ODR to define types with the same 2471 name differently. 2472 2473`-fno-weak' 2474 Do not use weak symbol support, even if it is provided by the 2475 linker. By default, G++ uses weak symbols if they are available. 2476 This option exists only for testing, and should not be used by 2477 end-users; it results in inferior code and has no benefits. This 2478 option may be removed in a future release of G++. 2479 2480`-nostdinc++' 2481 Do not search for header files in the standard directories 2482 specific to C++, but do still search the other standard 2483 directories. (This option is used when building the C++ library.) 2484 2485 In addition, these optimization, warning, and code generation options 2486have meanings only for C++ programs: 2487 2488`-fno-default-inline' 2489 Do not assume `inline' for functions defined inside a class scope. 2490 *Note Options That Control Optimization: Optimize Options. Note 2491 that these functions have linkage like inline functions; they just 2492 aren't inlined by default. 2493 2494`-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2495 Warn when G++ generates code that is probably not compatible with 2496 the vendor-neutral C++ ABI. Although an effort has been made to 2497 warn about all such cases, there are probably some cases that are 2498 not warned about, even though G++ is generating incompatible code. 2499 There may also be cases where warnings are emitted even though the 2500 code that is generated is compatible. 2501 2502 You should rewrite your code to avoid these warnings if you are 2503 concerned about the fact that code generated by G++ may not be 2504 binary compatible with code generated by other compilers. 2505 2506 The known incompatibilities in `-fabi-version=2' (the default) 2507 include: 2508 2509 * A template with a non-type template parameter of reference 2510 type is mangled incorrectly: 2511 extern int N; 2512 template <int &> struct S {}; 2513 void n (S<N>) {2} 2514 2515 This is fixed in `-fabi-version=3'. 2516 2517 * SIMD vector types declared using `__attribute 2518 ((vector_size))' are mangled in a non-standard way that does 2519 not allow for overloading of functions taking vectors of 2520 different sizes. 2521 2522 The mangling is changed in `-fabi-version=4'. 2523 2524 The known incompatibilities in `-fabi-version=1' include: 2525 2526 * Incorrect handling of tail-padding for bit-fields. G++ may 2527 attempt to pack data into the same byte as a base class. For 2528 example: 2529 2530 struct A { virtual void f(); int f1 : 1; }; 2531 struct B : public A { int f2 : 1; }; 2532 2533 In this case, G++ places `B::f2' into the same byte as 2534 `A::f1'; other compilers do not. You can avoid this problem 2535 by explicitly padding `A' so that its size is a multiple of 2536 the byte size on your platform; that causes G++ and other 2537 compilers to lay out `B' identically. 2538 2539 * Incorrect handling of tail-padding for virtual bases. G++ 2540 does not use tail padding when laying out virtual bases. For 2541 example: 2542 2543 struct A { virtual void f(); char c1; }; 2544 struct B { B(); char c2; }; 2545 struct C : public A, public virtual B {}; 2546 2547 In this case, G++ does not place `B' into the tail-padding for 2548 `A'; other compilers do. You can avoid this problem by 2549 explicitly padding `A' so that its size is a multiple of its 2550 alignment (ignoring virtual base classes); that causes G++ 2551 and other compilers to lay out `C' identically. 2552 2553 * Incorrect handling of bit-fields with declared widths greater 2554 than that of their underlying types, when the bit-fields 2555 appear in a union. For example: 2556 2557 union U { int i : 4096; }; 2558 2559 Assuming that an `int' does not have 4096 bits, G++ makes the 2560 union too small by the number of bits in an `int'. 2561 2562 * Empty classes can be placed at incorrect offsets. For 2563 example: 2564 2565 struct A {}; 2566 2567 struct B { 2568 A a; 2569 virtual void f (); 2570 }; 2571 2572 struct C : public B, public A {}; 2573 2574 G++ places the `A' base class of `C' at a nonzero offset; it 2575 should be placed at offset zero. G++ mistakenly believes 2576 that the `A' data member of `B' is already at offset zero. 2577 2578 * Names of template functions whose types involve `typename' or 2579 template template parameters can be mangled incorrectly. 2580 2581 template <typename Q> 2582 void f(typename Q::X) {} 2583 2584 template <template <typename> class Q> 2585 void f(typename Q<int>::X) {} 2586 2587 Instantiations of these templates may be mangled incorrectly. 2588 2589 2590 It also warns about psABI-related changes. The known psABI 2591 changes at this point include: 2592 2593 * For SysV/x86-64, unions with `long double' members are passed 2594 in memory as specified in psABI. For example: 2595 2596 union U { 2597 long double ld; 2598 int i; 2599 }; 2600 2601 `union U' is always passed in memory. 2602 2603 2604`-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2605 Warn when a class seems unusable because all the constructors or 2606 destructors in that class are private, and it has neither friends 2607 nor public static member functions. Also warn if there are no 2608 non-private methods, and there's at least one private member 2609 function that isn't a constructor or destructor. 2610 2611`-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)' 2612 Warn when `delete' is used to destroy an instance of a class that 2613 has virtual functions and non-virtual destructor. It is unsafe to 2614 delete an instance of a derived class through a pointer to a base 2615 class if the base class does not have a virtual destructor. This 2616 warning is enabled by `-Wall'. 2617 2618`-Wliteral-suffix (C++ and Objective-C++ only)' 2619 Warn when a string or character literal is followed by a ud-suffix 2620 which does not begin with an underscore. As a conforming 2621 extension, GCC treats such suffixes as separate preprocessing 2622 tokens in order to maintain backwards compatibility with code that 2623 uses formatting macros from `<inttypes.h>'. For example: 2624 2625 #define __STDC_FORMAT_MACROS 2626 #include <inttypes.h> 2627 #include <stdio.h> 2628 2629 int main() { 2630 int64_t i64 = 123; 2631 printf("My int64: %"PRId64"\n", i64); 2632 } 2633 2634 In this case, `PRId64' is treated as a separate preprocessing 2635 token. 2636 2637 This warning is enabled by default. 2638 2639`-Wnarrowing (C++ and Objective-C++ only)' 2640 Warn when a narrowing conversion prohibited by C++11 occurs within 2641 `{ }', e.g. 2642 2643 int i = { 2.2 }; // error: narrowing from double to int 2644 2645 This flag is included in `-Wall' and `-Wc++11-compat'. 2646 2647 With `-std=c++11', `-Wno-narrowing' suppresses the diagnostic 2648 required by the standard. Note that this does not affect the 2649 meaning of well-formed code; narrowing conversions are still 2650 considered ill-formed in SFINAE context. 2651 2652`-Wnoexcept (C++ and Objective-C++ only)' 2653 Warn when a noexcept-expression evaluates to false because of a 2654 call to a function that does not have a non-throwing exception 2655 specification (i.e. `throw()' or `noexcept') but is known by the 2656 compiler to never throw an exception. 2657 2658`-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2659 Warn when a class has virtual functions and an accessible 2660 non-virtual destructor, in which case it is possible but unsafe to 2661 delete an instance of a derived class through a pointer to the 2662 base class. This warning is also enabled if `-Weffc++' is 2663 specified. 2664 2665`-Wreorder (C++ and Objective-C++ only)' 2666 Warn when the order of member initializers given in the code does 2667 not match the order in which they must be executed. For instance: 2668 2669 struct A { 2670 int i; 2671 int j; 2672 A(): j (0), i (1) { } 2673 }; 2674 2675 The compiler rearranges the member initializers for `i' and `j' to 2676 match the declaration order of the members, emitting a warning to 2677 that effect. This warning is enabled by `-Wall'. 2678 2679`-fext-numeric-literals (C++ and Objective-C++ only)' 2680 Accept imaginary, fixed-point, or machine-defined literal number 2681 suffixes as GNU extensions. When this option is turned off these 2682 suffixes are treated as C++11 user-defined literal numeric 2683 suffixes. This is on by default for all pre-C++11 dialects and 2684 all GNU dialects: `-std=c++98', `-std=gnu++98', `-std=gnu++11', 2685 `-std=gnu++1y'. This option is off by default for ISO C++11 2686 onwards (`-std=c++11', ...). 2687 2688 The following `-W...' options are not affected by `-Wall'. 2689 2690`-Weffc++ (C++ and Objective-C++ only)' 2691 Warn about violations of the following style guidelines from Scott 2692 Meyers' `Effective C++, Second Edition' book: 2693 2694 * Item 11: Define a copy constructor and an assignment 2695 operator for classes with dynamically-allocated memory. 2696 2697 * Item 12: Prefer initialization to assignment in constructors. 2698 2699 * Item 14: Make destructors virtual in base classes. 2700 2701 * Item 15: Have `operator=' return a reference to `*this'. 2702 2703 * Item 23: Don't try to return a reference when you must 2704 return an object. 2705 2706 2707 Also warn about violations of the following style guidelines from 2708 Scott Meyers' `More Effective C++' book: 2709 2710 * Item 6: Distinguish between prefix and postfix forms of 2711 increment and decrement operators. 2712 2713 * Item 7: Never overload `&&', `||', or `,'. 2714 2715 2716 When selecting this option, be aware that the standard library 2717 headers do not obey all of these guidelines; use `grep -v' to 2718 filter out those warnings. 2719 2720`-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2721 Warn about the use of an uncasted `NULL' as sentinel. When 2722 compiling only with GCC this is a valid sentinel, as `NULL' is 2723 defined to `__null'. Although it is a null pointer constant 2724 rather than a null pointer, it is guaranteed to be of the same 2725 size as a pointer. But this use is not portable across different 2726 compilers. 2727 2728`-Wno-non-template-friend (C++ and Objective-C++ only)' 2729 Disable warnings when non-templatized friend functions are declared 2730 within a template. Since the advent of explicit template 2731 specification support in G++, if the name of the friend is an 2732 unqualified-id (i.e., `friend foo(int)'), the C++ language 2733 specification demands that the friend declare or define an 2734 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2735 implemented explicit specification, unqualified-ids could be 2736 interpreted as a particular specialization of a templatized 2737 function. Because this non-conforming behavior is no longer the 2738 default behavior for G++, `-Wnon-template-friend' allows the 2739 compiler to check existing code for potential trouble spots and is 2740 on by default. This new compiler behavior can be turned off with 2741 `-Wno-non-template-friend', which keeps the conformant compiler 2742 code but disables the helpful warning. 2743 2744`-Wold-style-cast (C++ and Objective-C++ only)' 2745 Warn if an old-style (C-style) cast to a non-void type is used 2746 within a C++ program. The new-style casts (`dynamic_cast', 2747 `static_cast', `reinterpret_cast', and `const_cast') are less 2748 vulnerable to unintended effects and much easier to search for. 2749 2750`-Woverloaded-virtual (C++ and Objective-C++ only)' 2751 Warn when a function declaration hides virtual functions from a 2752 base class. For example, in: 2753 2754 struct A { 2755 virtual void f(); 2756 }; 2757 2758 struct B: public A { 2759 void f(int); 2760 }; 2761 2762 the `A' class version of `f' is hidden in `B', and code like: 2763 2764 B* b; 2765 b->f(); 2766 2767 fails to compile. 2768 2769`-Wno-pmf-conversions (C++ and Objective-C++ only)' 2770 Disable the diagnostic for converting a bound pointer to member 2771 function to a plain pointer. 2772 2773`-Wsign-promo (C++ and Objective-C++ only)' 2774 Warn when overload resolution chooses a promotion from unsigned or 2775 enumerated type to a signed type, over a conversion to an unsigned 2776 type of the same size. Previous versions of G++ tried to preserve 2777 unsignedness, but the standard mandates the current behavior. 2778 2779 2780File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2781 27823.6 Options Controlling Objective-C and Objective-C++ Dialects 2783============================================================== 2784 2785(NOTE: This manual does not describe the Objective-C and Objective-C++ 2786languages themselves. *Note Language Standards Supported by GCC: 2787Standards, for references.) 2788 2789 This section describes the command-line options that are only 2790meaningful for Objective-C and Objective-C++ programs. You can also 2791use most of the language-independent GNU compiler options. For 2792example, you might compile a file `some_class.m' like this: 2793 2794 gcc -g -fgnu-runtime -O -c some_class.m 2795 2796In this example, `-fgnu-runtime' is an option meant only for 2797Objective-C and Objective-C++ programs; you can use the other options 2798with any language supported by GCC. 2799 2800 Note that since Objective-C is an extension of the C language, 2801Objective-C compilations may also use options specific to the C 2802front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2803compilations may use C++-specific options (e.g., `-Wabi'). 2804 2805 Here is a list of options that are _only_ for compiling Objective-C 2806and Objective-C++ programs: 2807 2808`-fconstant-string-class=CLASS-NAME' 2809 Use CLASS-NAME as the name of the class to instantiate for each 2810 literal string specified with the syntax `@"..."'. The default 2811 class name is `NXConstantString' if the GNU runtime is being used, 2812 and `NSConstantString' if the NeXT runtime is being used (see 2813 below). The `-fconstant-cfstrings' option, if also present, 2814 overrides the `-fconstant-string-class' setting and cause `@"..."' 2815 literals to be laid out as constant CoreFoundation strings. 2816 2817`-fgnu-runtime' 2818 Generate object code compatible with the standard GNU Objective-C 2819 runtime. This is the default for most types of systems. 2820 2821`-fnext-runtime' 2822 Generate output compatible with the NeXT runtime. This is the 2823 default for NeXT-based systems, including Darwin and Mac OS X. 2824 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 2825 option is used. 2826 2827`-fno-nil-receivers' 2828 Assume that all Objective-C message dispatches (`[receiver 2829 message:arg]') in this translation unit ensure that the receiver is 2830 not `nil'. This allows for more efficient entry points in the 2831 runtime to be used. This option is only available in conjunction 2832 with the NeXT runtime and ABI version 0 or 1. 2833 2834`-fobjc-abi-version=N' 2835 Use version N of the Objective-C ABI for the selected runtime. 2836 This option is currently supported only for the NeXT runtime. In 2837 that case, Version 0 is the traditional (32-bit) ABI without 2838 support for properties and other Objective-C 2.0 additions. 2839 Version 1 is the traditional (32-bit) ABI with support for 2840 properties and other Objective-C 2.0 additions. Version 2 is the 2841 modern (64-bit) ABI. If nothing is specified, the default is 2842 Version 0 on 32-bit target machines, and Version 2 on 64-bit 2843 target machines. 2844 2845`-fobjc-call-cxx-cdtors' 2846 For each Objective-C class, check if any of its instance variables 2847 is a C++ object with a non-trivial default constructor. If so, 2848 synthesize a special `- (id) .cxx_construct' instance method which 2849 runs non-trivial default constructors on any such instance 2850 variables, in order, and then return `self'. Similarly, check if 2851 any instance variable is a C++ object with a non-trivial 2852 destructor, and if so, synthesize a special `- (void) 2853 .cxx_destruct' method which runs all such default destructors, in 2854 reverse order. 2855 2856 The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods 2857 thusly generated only operate on instance variables declared in 2858 the current Objective-C class, and not those inherited from 2859 superclasses. It is the responsibility of the Objective-C runtime 2860 to invoke all such methods in an object's inheritance hierarchy. 2861 The `- (id) .cxx_construct' methods are invoked by the runtime 2862 immediately after a new object instance is allocated; the `- 2863 (void) .cxx_destruct' methods are invoked immediately before the 2864 runtime deallocates an object instance. 2865 2866 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2867 later has support for invoking the `- (id) .cxx_construct' and `- 2868 (void) .cxx_destruct' methods. 2869 2870`-fobjc-direct-dispatch' 2871 Allow fast jumps to the message dispatcher. On Darwin this is 2872 accomplished via the comm page. 2873 2874`-fobjc-exceptions' 2875 Enable syntactic support for structured exception handling in 2876 Objective-C, similar to what is offered by C++ and Java. This 2877 option is required to use the Objective-C keywords `@try', 2878 `@throw', `@catch', `@finally' and `@synchronized'. This option 2879 is available with both the GNU runtime and the NeXT runtime (but 2880 not available in conjunction with the NeXT runtime on Mac OS X 2881 10.2 and earlier). 2882 2883`-fobjc-gc' 2884 Enable garbage collection (GC) in Objective-C and Objective-C++ 2885 programs. This option is only available with the NeXT runtime; the 2886 GNU runtime has a different garbage collection implementation that 2887 does not require special compiler flags. 2888 2889`-fobjc-nilcheck' 2890 For the NeXT runtime with version 2 of the ABI, check for a nil 2891 receiver in method invocations before doing the actual method call. 2892 This is the default and can be disabled using 2893 `-fno-objc-nilcheck'. Class methods and super calls are never 2894 checked for nil in this way no matter what this flag is set to. 2895 Currently this flag does nothing when the GNU runtime, or an older 2896 version of the NeXT runtime ABI, is used. 2897 2898`-fobjc-std=objc1' 2899 Conform to the language syntax of Objective-C 1.0, the language 2900 recognized by GCC 4.0. This only affects the Objective-C 2901 additions to the C/C++ language; it does not affect conformance to 2902 C/C++ standards, which is controlled by the separate C/C++ dialect 2903 option flags. When this option is used with the Objective-C or 2904 Objective-C++ compiler, any Objective-C syntax that is not 2905 recognized by GCC 4.0 is rejected. This is useful if you need to 2906 make sure that your Objective-C code can be compiled with older 2907 versions of GCC. 2908 2909`-freplace-objc-classes' 2910 Emit a special marker instructing `ld(1)' not to statically link in 2911 the resulting object file, and allow `dyld(1)' to load it in at 2912 run time instead. This is used in conjunction with the 2913 Fix-and-Continue debugging mode, where the object file in question 2914 may be recompiled and dynamically reloaded in the course of 2915 program execution, without the need to restart the program itself. 2916 Currently, Fix-and-Continue functionality is only available in 2917 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2918 2919`-fzero-link' 2920 When compiling for the NeXT runtime, the compiler ordinarily 2921 replaces calls to `objc_getClass("...")' (when the name of the 2922 class is known at compile time) with static class references that 2923 get initialized at load time, which improves run-time performance. 2924 Specifying the `-fzero-link' flag suppresses this behavior and 2925 causes calls to `objc_getClass("...")' to be retained. This is 2926 useful in Zero-Link debugging mode, since it allows for individual 2927 class implementations to be modified during program execution. 2928 The GNU runtime currently always retains calls to 2929 `objc_get_class("...")' regardless of command-line options. 2930 2931`-gen-decls' 2932 Dump interface declarations for all classes seen in the source 2933 file to a file named `SOURCENAME.decl'. 2934 2935`-Wassign-intercept (Objective-C and Objective-C++ only)' 2936 Warn whenever an Objective-C assignment is being intercepted by the 2937 garbage collector. 2938 2939`-Wno-protocol (Objective-C and Objective-C++ only)' 2940 If a class is declared to implement a protocol, a warning is 2941 issued for every method in the protocol that is not implemented by 2942 the class. The default behavior is to issue a warning for every 2943 method not explicitly implemented in the class, even if a method 2944 implementation is inherited from the superclass. If you use the 2945 `-Wno-protocol' option, then methods inherited from the superclass 2946 are considered to be implemented, and no warning is issued for 2947 them. 2948 2949`-Wselector (Objective-C and Objective-C++ only)' 2950 Warn if multiple methods of different types for the same selector 2951 are found during compilation. The check is performed on the list 2952 of methods in the final stage of compilation. Additionally, a 2953 check is performed for each selector appearing in a 2954 `@selector(...)' expression, and a corresponding method for that 2955 selector has been found during compilation. Because these checks 2956 scan the method table only at the end of compilation, these 2957 warnings are not produced if the final stage of compilation is not 2958 reached, for example because an error is found during compilation, 2959 or because the `-fsyntax-only' option is being used. 2960 2961`-Wstrict-selector-match (Objective-C and Objective-C++ only)' 2962 Warn if multiple methods with differing argument and/or return 2963 types are found for a given selector when attempting to send a 2964 message using this selector to a receiver of type `id' or `Class'. 2965 When this flag is off (which is the default behavior), the 2966 compiler omits such warnings if any differences found are confined 2967 to types that share the same size and alignment. 2968 2969`-Wundeclared-selector (Objective-C and Objective-C++ only)' 2970 Warn if a `@selector(...)' expression referring to an undeclared 2971 selector is found. A selector is considered undeclared if no 2972 method with that name has been declared before the 2973 `@selector(...)' expression, either explicitly in an `@interface' 2974 or `@protocol' declaration, or implicitly in an `@implementation' 2975 section. This option always performs its checks as soon as a 2976 `@selector(...)' expression is found, while `-Wselector' only 2977 performs its checks in the final stage of compilation. This also 2978 enforces the coding style convention that methods and selectors 2979 must be declared before being used. 2980 2981`-print-objc-runtime-info' 2982 Generate C header describing the largest structure that is passed 2983 by value, if any. 2984 2985 2986 2987File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2988 29893.7 Options to Control Diagnostic Messages Formatting 2990===================================================== 2991 2992Traditionally, diagnostic messages have been formatted irrespective of 2993the output device's aspect (e.g. its width, ...). You can use the 2994options described below to control the formatting algorithm for 2995diagnostic messages, e.g. how many characters per line, how often 2996source location information should be reported. Note that some 2997language front ends may not honor these options. 2998 2999`-fmessage-length=N' 3000 Try to format error messages so that they fit on lines of about N 3001 characters. The default is 72 characters for `g++' and 0 for the 3002 rest of the front ends supported by GCC. If N is zero, then no 3003 line-wrapping is done; each error message appears on a single line. 3004 3005`-fdiagnostics-show-location=once' 3006 Only meaningful in line-wrapping mode. Instructs the diagnostic 3007 messages reporter to emit source location information _once_; that 3008 is, in case the message is too long to fit on a single physical 3009 line and has to be wrapped, the source location won't be emitted 3010 (as prefix) again, over and over, in subsequent continuation 3011 lines. This is the default behavior. 3012 3013`-fdiagnostics-show-location=every-line' 3014 Only meaningful in line-wrapping mode. Instructs the diagnostic 3015 messages reporter to emit the same source location information (as 3016 prefix) for physical lines that result from the process of breaking 3017 a message which is too long to fit on a single line. 3018 3019`-fno-diagnostics-show-option' 3020 By default, each diagnostic emitted includes text indicating the 3021 command-line option that directly controls the diagnostic (if such 3022 an option is known to the diagnostic machinery). Specifying the 3023 `-fno-diagnostics-show-option' flag suppresses that behavior. 3024 3025`-fno-diagnostics-show-caret' 3026 By default, each diagnostic emitted includes the original source 3027 line and a caret '^' indicating the column. This option 3028 suppresses this information. 3029 3030 3031 3032File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 3033 30343.8 Options to Request or Suppress Warnings 3035=========================================== 3036 3037Warnings are diagnostic messages that report constructions that are not 3038inherently erroneous but that are risky or suggest there may have been 3039an error. 3040 3041 The following language-independent options do not enable specific 3042warnings but control the kinds of diagnostics produced by GCC. 3043 3044`-fsyntax-only' 3045 Check the code for syntax errors, but don't do anything beyond 3046 that. 3047 3048`-fmax-errors=N' 3049 Limits the maximum number of error messages to N, at which point 3050 GCC bails out rather than attempting to continue processing the 3051 source code. If N is 0 (the default), there is no limit on the 3052 number of error messages produced. If `-Wfatal-errors' is also 3053 specified, then `-Wfatal-errors' takes precedence over this option. 3054 3055`-w' 3056 Inhibit all warning messages. 3057 3058`-Werror' 3059 Make all warnings into errors. 3060 3061`-Werror=' 3062 Make the specified warning into an error. The specifier for a 3063 warning is appended; for example `-Werror=switch' turns the 3064 warnings controlled by `-Wswitch' into errors. This switch takes a 3065 negative form, to be used to negate `-Werror' for specific 3066 warnings; for example `-Wno-error=switch' makes `-Wswitch' 3067 warnings not be errors, even when `-Werror' is in effect. 3068 3069 The warning message for each controllable warning includes the 3070 option that controls the warning. That option can then be used 3071 with `-Werror=' and `-Wno-error=' as described above. (Printing 3072 of the option in the warning message can be disabled using the 3073 `-fno-diagnostics-show-option' flag.) 3074 3075 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 3076 However, `-Wno-error='FOO does not imply anything. 3077 3078`-Wfatal-errors' 3079 This option causes the compiler to abort compilation on the first 3080 error occurred rather than trying to keep going and printing 3081 further error messages. 3082 3083 3084 You can request many specific warnings with options beginning with 3085`-W', for example `-Wimplicit' to request warnings on implicit 3086declarations. Each of these specific warning options also has a 3087negative form beginning `-Wno-' to turn off warnings; for example, 3088`-Wno-implicit'. This manual lists only one of the two forms, 3089whichever is not the default. For further language-specific options 3090also refer to *note C++ Dialect Options:: and *note Objective-C and 3091Objective-C++ Dialect Options::. 3092 3093 When an unrecognized warning option is requested (e.g., 3094`-Wunknown-warning'), GCC emits a diagnostic stating that the option is 3095not recognized. However, if the `-Wno-' form is used, the behavior is 3096slightly different: no diagnostic is produced for 3097`-Wno-unknown-warning' unless other diagnostics are being produced. 3098This allows the use of new `-Wno-' options with old compilers, but if 3099something goes wrong, the compiler warns that an unrecognized option is 3100present. 3101 3102`-Wpedantic' 3103`-pedantic' 3104 Issue all the warnings demanded by strict ISO C and ISO C++; 3105 reject all programs that use forbidden extensions, and some other 3106 programs that do not follow ISO C and ISO C++. For ISO C, follows 3107 the version of the ISO C standard specified by any `-std' option 3108 used. 3109 3110 Valid ISO C and ISO C++ programs should compile properly with or 3111 without this option (though a rare few require `-ansi' or a `-std' 3112 option specifying the required version of ISO C). However, 3113 without this option, certain GNU extensions and traditional C and 3114 C++ features are supported as well. With this option, they are 3115 rejected. 3116 3117 `-Wpedantic' does not cause warning messages for use of the 3118 alternate keywords whose names begin and end with `__'. Pedantic 3119 warnings are also disabled in the expression that follows 3120 `__extension__'. However, only system header files should use 3121 these escape routes; application programs should avoid them. 3122 *Note Alternate Keywords::. 3123 3124 Some users try to use `-Wpedantic' to check programs for strict ISO 3125 C conformance. They soon find that it does not do quite what they 3126 want: it finds some non-ISO practices, but not all--only those for 3127 which ISO C _requires_ a diagnostic, and some others for which 3128 diagnostics have been added. 3129 3130 A feature to report any failure to conform to ISO C might be 3131 useful in some instances, but would require considerable 3132 additional work and would be quite different from `-Wpedantic'. 3133 We don't have plans to support such a feature in the near future. 3134 3135 Where the standard specified with `-std' represents a GNU extended 3136 dialect of C, such as `gnu90' or `gnu99', there is a corresponding 3137 "base standard", the version of ISO C on which the GNU extended 3138 dialect is based. Warnings from `-Wpedantic' are given where they 3139 are required by the base standard. (It does not make sense for 3140 such warnings to be given only for features not in the specified 3141 GNU C dialect, since by definition the GNU dialects of C include 3142 all features the compiler supports with the given option, and 3143 there would be nothing to warn about.) 3144 3145`-pedantic-errors' 3146 Like `-Wpedantic', except that errors are produced rather than 3147 warnings. 3148 3149`-Wall' 3150 This enables all the warnings about constructions that some users 3151 consider questionable, and that are easy to avoid (or modify to 3152 prevent the warning), even in conjunction with macros. This also 3153 enables some language-specific warnings described in *note C++ 3154 Dialect Options:: and *note Objective-C and Objective-C++ Dialect 3155 Options::. 3156 3157 `-Wall' turns on the following warning flags: 3158 3159 -Waddress 3160 -Warray-bounds (only with `-O2') 3161 -Wc++11-compat 3162 -Wchar-subscripts 3163 -Wenum-compare (in C/ObjC; this is on by default in C++) 3164 -Wimplicit-int (C and Objective-C only) 3165 -Wimplicit-function-declaration (C and Objective-C only) 3166 -Wcomment 3167 -Wformat 3168 -Wmain (only for C/ObjC and unless `-ffreestanding') 3169 -Wmaybe-uninitialized 3170 -Wmissing-braces (only for C/ObjC) 3171 -Wnonnull 3172 -Wparentheses 3173 -Wpointer-sign 3174 -Wreorder 3175 -Wreturn-type 3176 -Wsequence-point 3177 -Wsign-compare (only in C++) 3178 -Wstrict-aliasing 3179 -Wstrict-overflow=1 3180 -Wswitch 3181 -Wtrigraphs 3182 -Wuninitialized 3183 -Wunknown-pragmas 3184 -Wunused-function 3185 -Wunused-label 3186 -Wunused-value 3187 -Wunused-variable 3188 -Wvolatile-register-var 3189 3190 Note that some warning flags are not implied by `-Wall'. Some of 3191 them warn about constructions that users generally do not consider 3192 questionable, but which occasionally you might wish to check for; 3193 others warn about constructions that are necessary or hard to 3194 avoid in some cases, and there is no simple way to modify the code 3195 to suppress the warning. Some of them are enabled by `-Wextra' but 3196 many of them must be enabled individually. 3197 3198`-Wextra' 3199 This enables some extra warning flags that are not enabled by 3200 `-Wall'. (This option used to be called `-W'. The older name is 3201 still supported, but the newer name is more descriptive.) 3202 3203 -Wclobbered 3204 -Wempty-body 3205 -Wignored-qualifiers 3206 -Wmissing-field-initializers 3207 -Wmissing-parameter-type (C only) 3208 -Wold-style-declaration (C only) 3209 -Woverride-init 3210 -Wsign-compare 3211 -Wtype-limits 3212 -Wuninitialized 3213 -Wunused-parameter (only with `-Wunused' or `-Wall') 3214 -Wunused-but-set-parameter (only with `-Wunused' or `-Wall') 3215 3216 The option `-Wextra' also prints warning messages for the 3217 following cases: 3218 3219 * A pointer is compared against integer zero with `<', `<=', 3220 `>', or `>='. 3221 3222 * (C++ only) An enumerator and a non-enumerator both appear in a 3223 conditional expression. 3224 3225 * (C++ only) Ambiguous virtual bases. 3226 3227 * (C++ only) Subscripting an array that has been declared 3228 `register'. 3229 3230 * (C++ only) Taking the address of a variable that has been 3231 declared `register'. 3232 3233 * (C++ only) A base class is not initialized in a derived 3234 class's copy constructor. 3235 3236 3237`-Wchar-subscripts' 3238 Warn if an array subscript has type `char'. This is a common cause 3239 of error, as programmers often forget that this type is signed on 3240 some machines. This warning is enabled by `-Wall'. 3241 3242`-Wcomment' 3243 Warn whenever a comment-start sequence `/*' appears in a `/*' 3244 comment, or whenever a Backslash-Newline appears in a `//' comment. 3245 This warning is enabled by `-Wall'. 3246 3247`-Wno-coverage-mismatch' 3248 Warn if feedback profiles do not match when using the 3249 `-fprofile-use' option. If a source file is changed between 3250 compiling with `-fprofile-gen' and with `-fprofile-use', the files 3251 with the profile feedback can fail to match the source file and 3252 GCC cannot use the profile feedback information. By default, this 3253 warning is enabled and is treated as an error. 3254 `-Wno-coverage-mismatch' can be used to disable the warning or 3255 `-Wno-error=coverage-mismatch' can be used to disable the error. 3256 Disabling the error for this warning can result in poorly 3257 optimized code and is useful only in the case of very minor 3258 changes such as bug fixes to an existing code-base. Completely 3259 disabling the warning is not recommended. 3260 3261`-Wno-cpp' 3262 (C, Objective-C, C++, Objective-C++ and Fortran only) 3263 3264 Suppress warning messages emitted by `#warning' directives. 3265 3266`-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)' 3267 Give a warning when a value of type `float' is implicitly promoted 3268 to `double'. CPUs with a 32-bit "single-precision" floating-point 3269 unit implement `float' in hardware, but emulate `double' in 3270 software. On such a machine, doing computations using `double' 3271 values is much more expensive because of the overhead required for 3272 software emulation. 3273 3274 It is easy to accidentally do computations with `double' because 3275 floating-point literals are implicitly of type `double'. For 3276 example, in: 3277 float area(float radius) 3278 { 3279 return 3.14159 * radius * radius; 3280 } 3281 the compiler performs the entire computation with `double' because 3282 the floating-point literal is a `double'. 3283 3284`-Wformat' 3285`-Wformat=N' 3286 Check calls to `printf' and `scanf', etc., to make sure that the 3287 arguments supplied have types appropriate to the format string 3288 specified, and that the conversions specified in the format string 3289 make sense. This includes standard functions, and others 3290 specified by format attributes (*note Function Attributes::), in 3291 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 3292 extension, not in the C standard) families (or other 3293 target-specific families). Which functions are checked without 3294 format attributes having been specified depends on the standard 3295 version selected, and such checks of functions without the 3296 attribute specified are disabled by `-ffreestanding' or 3297 `-fno-builtin'. 3298 3299 The formats are checked against the format features supported by 3300 GNU libc version 2.2. These include all ISO C90 and C99 features, 3301 as well as features from the Single Unix Specification and some 3302 BSD and GNU extensions. Other library implementations may not 3303 support all these features; GCC does not support warning about 3304 features that go beyond a particular library's limitations. 3305 However, if `-Wpedantic' is used with `-Wformat', warnings are 3306 given about format features not in the selected standard version 3307 (but not for `strfmon' formats, since those are not in any version 3308 of the C standard). *Note Options Controlling C Dialect: C 3309 Dialect Options. 3310 3311 `-Wformat=1' 3312 `-Wformat' 3313 Option `-Wformat' is equivalent to `-Wformat=1', and 3314 `-Wno-format' is equivalent to `-Wformat=0'. Since 3315 `-Wformat' also checks for null format arguments for several 3316 functions, `-Wformat' also implies `-Wnonnull'. Some aspects 3317 of this level of format checking can be disabled by the 3318 options: `-Wno-format-contains-nul', 3319 `-Wno-format-extra-args', and `-Wno-format-zero-length'. 3320 `-Wformat' is enabled by `-Wall'. 3321 3322 `-Wno-format-contains-nul' 3323 If `-Wformat' is specified, do not warn about format strings 3324 that contain NUL bytes. 3325 3326 `-Wno-format-extra-args' 3327 If `-Wformat' is specified, do not warn about excess 3328 arguments to a `printf' or `scanf' format function. The C 3329 standard specifies that such arguments are ignored. 3330 3331 Where the unused arguments lie between used arguments that are 3332 specified with `$' operand number specifications, normally 3333 warnings are still given, since the implementation could not 3334 know what type to pass to `va_arg' to skip the unused 3335 arguments. However, in the case of `scanf' formats, this 3336 option suppresses the warning if the unused arguments are all 3337 pointers, since the Single Unix Specification says that such 3338 unused arguments are allowed. 3339 3340 `-Wno-format-zero-length' 3341 If `-Wformat' is specified, do not warn about zero-length 3342 formats. The C standard specifies that zero-length formats 3343 are allowed. 3344 3345 `-Wformat=2' 3346 Enable `-Wformat' plus additional format checks. Currently 3347 equivalent to `-Wformat -Wformat-nonliteral -Wformat-security 3348 -Wformat-y2k'. 3349 3350 `-Wformat-nonliteral' 3351 If `-Wformat' is specified, also warn if the format string is 3352 not a string literal and so cannot be checked, unless the 3353 format function takes its format arguments as a `va_list'. 3354 3355 `-Wformat-security' 3356 If `-Wformat' is specified, also warn about uses of format 3357 functions that represent possible security problems. At 3358 present, this warns about calls to `printf' and `scanf' 3359 functions where the format string is not a string literal and 3360 there are no format arguments, as in `printf (foo);'. This 3361 may be a security hole if the format string came from 3362 untrusted input and contains `%n'. (This is currently a 3363 subset of what `-Wformat-nonliteral' warns about, but in 3364 future warnings may be added to `-Wformat-security' that are 3365 not included in `-Wformat-nonliteral'.) 3366 3367 `-Wformat-y2k' 3368 If `-Wformat' is specified, also warn about `strftime' 3369 formats that may yield only a two-digit year. 3370 3371`-Wnonnull' 3372 Warn about passing a null pointer for arguments marked as 3373 requiring a non-null value by the `nonnull' function attribute. 3374 3375 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 3376 disabled with the `-Wno-nonnull' option. 3377 3378`-Winit-self (C, C++, Objective-C and Objective-C++ only)' 3379 Warn about uninitialized variables that are initialized with 3380 themselves. Note this option can only be used with the 3381 `-Wuninitialized' option. 3382 3383 For example, GCC warns about `i' being uninitialized in the 3384 following snippet only when `-Winit-self' has been specified: 3385 int f() 3386 { 3387 int i = i; 3388 return i; 3389 } 3390 3391 This warning is enabled by `-Wall' in C++. 3392 3393`-Wimplicit-int (C and Objective-C only)' 3394 Warn when a declaration does not specify a type. This warning is 3395 enabled by `-Wall'. 3396 3397`-Wimplicit-function-declaration (C and Objective-C only)' 3398 Give a warning whenever a function is used before being declared. 3399 In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled 3400 by default and it is made into an error by `-pedantic-errors'. 3401 This warning is also enabled by `-Wall'. 3402 3403`-Wimplicit (C and Objective-C only)' 3404 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 3405 This warning is enabled by `-Wall'. 3406 3407`-Wignored-qualifiers (C and C++ only)' 3408 Warn if the return type of a function has a type qualifier such as 3409 `const'. For ISO C such a type qualifier has no effect, since the 3410 value returned by a function is not an lvalue. For C++, the 3411 warning is only emitted for scalar types or `void'. ISO C 3412 prohibits qualified `void' return types on function definitions, 3413 so such return types always receive a warning even without this 3414 option. 3415 3416 This warning is also enabled by `-Wextra'. 3417 3418`-Wmain' 3419 Warn if the type of `main' is suspicious. `main' should be a 3420 function with external linkage, returning int, taking either zero 3421 arguments, two, or three arguments of appropriate types. This 3422 warning is enabled by default in C++ and is enabled by either 3423 `-Wall' or `-Wpedantic'. 3424 3425`-Wmissing-braces' 3426 Warn if an aggregate or union initializer is not fully bracketed. 3427 In the following example, the initializer for `a' is not fully 3428 bracketed, but that for `b' is fully bracketed. This warning is 3429 enabled by `-Wall' in C. 3430 3431 int a[2][2] = { 0, 1, 2, 3 }; 3432 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 3433 3434 This warning is enabled by `-Wall'. 3435 3436`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 3437 Warn if a user-supplied include directory does not exist. 3438 3439`-Wparentheses' 3440 Warn if parentheses are omitted in certain contexts, such as when 3441 there is an assignment in a context where a truth value is 3442 expected, or when operators are nested whose precedence people 3443 often get confused about. 3444 3445 Also warn if a comparison like `x<=y<=z' appears; this is 3446 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 3447 interpretation from that of ordinary mathematical notation. 3448 3449 Also warn about constructions where there may be confusion to which 3450 `if' statement an `else' branch belongs. Here is an example of 3451 such a case: 3452 3453 { 3454 if (a) 3455 if (b) 3456 foo (); 3457 else 3458 bar (); 3459 } 3460 3461 In C/C++, every `else' branch belongs to the innermost possible 3462 `if' statement, which in this example is `if (b)'. This is often 3463 not what the programmer expected, as illustrated in the above 3464 example by indentation the programmer chose. When there is the 3465 potential for this confusion, GCC issues a warning when this flag 3466 is specified. To eliminate the warning, add explicit braces around 3467 the innermost `if' statement so there is no way the `else' can 3468 belong to the enclosing `if'. The resulting code looks like this: 3469 3470 { 3471 if (a) 3472 { 3473 if (b) 3474 foo (); 3475 else 3476 bar (); 3477 } 3478 } 3479 3480 Also warn for dangerous uses of the GNU extension to `?:' with 3481 omitted middle operand. When the condition in the `?': operator is 3482 a boolean expression, the omitted value is always 1. Often 3483 programmers expect it to be a value computed inside the 3484 conditional expression instead. 3485 3486 This warning is enabled by `-Wall'. 3487 3488`-Wsequence-point' 3489 Warn about code that may have undefined semantics because of 3490 violations of sequence point rules in the C and C++ standards. 3491 3492 The C and C++ standards define the order in which expressions in a 3493 C/C++ program are evaluated in terms of "sequence points", which 3494 represent a partial ordering between the execution of parts of the 3495 program: those executed before the sequence point, and those 3496 executed after it. These occur after the evaluation of a full 3497 expression (one which is not part of a larger expression), after 3498 the evaluation of the first operand of a `&&', `||', `? :' or `,' 3499 (comma) operator, before a function is called (but after the 3500 evaluation of its arguments and the expression denoting the called 3501 function), and in certain other places. Other than as expressed 3502 by the sequence point rules, the order of evaluation of 3503 subexpressions of an expression is not specified. All these rules 3504 describe only a partial order rather than a total order, since, 3505 for example, if two functions are called within one expression 3506 with no sequence point between them, the order in which the 3507 functions are called is not specified. However, the standards 3508 committee have ruled that function calls do not overlap. 3509 3510 It is not specified when between sequence points modifications to 3511 the values of objects take effect. Programs whose behavior 3512 depends on this have undefined behavior; the C and C++ standards 3513 specify that "Between the previous and next sequence point an 3514 object shall have its stored value modified at most once by the 3515 evaluation of an expression. Furthermore, the prior value shall 3516 be read only to determine the value to be stored.". If a program 3517 breaks these rules, the results on any particular implementation 3518 are entirely unpredictable. 3519 3520 Examples of code with undefined behavior are `a = a++;', `a[n] = 3521 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 3522 diagnosed by this option, and it may give an occasional false 3523 positive result, but in general it has been found fairly effective 3524 at detecting this sort of problem in programs. 3525 3526 The standard is worded confusingly, therefore there is some debate 3527 over the precise meaning of the sequence point rules in subtle 3528 cases. Links to discussions of the problem, including proposed 3529 formal definitions, may be found on the GCC readings page, at 3530 `http://gcc.gnu.org/readings.html'. 3531 3532 This warning is enabled by `-Wall' for C and C++. 3533 3534`-Wno-return-local-addr' 3535 Do not warn about returning a pointer (or in C++, a reference) to a 3536 variable that goes out of scope after the function returns. 3537 3538`-Wreturn-type' 3539 Warn whenever a function is defined with a return type that 3540 defaults to `int'. Also warn about any `return' statement with no 3541 return value in a function whose return type is not `void' 3542 (falling off the end of the function body is considered returning 3543 without a value), and about a `return' statement with an 3544 expression in a function whose return type is `void'. 3545 3546 For C++, a function without return type always produces a 3547 diagnostic message, even when `-Wno-return-type' is specified. 3548 The only exceptions are `main' and functions defined in system 3549 headers. 3550 3551 This warning is enabled by `-Wall'. 3552 3553`-Wswitch' 3554 Warn whenever a `switch' statement has an index of enumerated type 3555 and lacks a `case' for one or more of the named codes of that 3556 enumeration. (The presence of a `default' label prevents this 3557 warning.) `case' labels outside the enumeration range also 3558 provoke warnings when this option is used (even if there is a 3559 `default' label). This warning is enabled by `-Wall'. 3560 3561`-Wswitch-default' 3562 Warn whenever a `switch' statement does not have a `default' case. 3563 3564`-Wswitch-enum' 3565 Warn whenever a `switch' statement has an index of enumerated type 3566 and lacks a `case' for one or more of the named codes of that 3567 enumeration. `case' labels outside the enumeration range also 3568 provoke warnings when this option is used. The only difference 3569 between `-Wswitch' and this option is that this option gives a 3570 warning about an omitted enumeration code even if there is a 3571 `default' label. 3572 3573`-Wsync-nand (C and C++ only)' 3574 Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch' 3575 built-in functions are used. These functions changed semantics in 3576 GCC 4.4. 3577 3578`-Wtrigraphs' 3579 Warn if any trigraphs are encountered that might change the 3580 meaning of the program (trigraphs within comments are not warned 3581 about). This warning is enabled by `-Wall'. 3582 3583`-Wunused-but-set-parameter' 3584 Warn whenever a function parameter is assigned to, but otherwise 3585 unused (aside from its declaration). 3586 3587 To suppress this warning use the `unused' attribute (*note 3588 Variable Attributes::). 3589 3590 This warning is also enabled by `-Wunused' together with `-Wextra'. 3591 3592`-Wunused-but-set-variable' 3593 Warn whenever a local variable is assigned to, but otherwise unused 3594 (aside from its declaration). This warning is enabled by `-Wall'. 3595 3596 To suppress this warning use the `unused' attribute (*note 3597 Variable Attributes::). 3598 3599 This warning is also enabled by `-Wunused', which is enabled by 3600 `-Wall'. 3601 3602`-Wunused-function' 3603 Warn whenever a static function is declared but not defined or a 3604 non-inline static function is unused. This warning is enabled by 3605 `-Wall'. 3606 3607`-Wunused-label' 3608 Warn whenever a label is declared but not used. This warning is 3609 enabled by `-Wall'. 3610 3611 To suppress this warning use the `unused' attribute (*note 3612 Variable Attributes::). 3613 3614`-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)' 3615 Warn when a typedef locally defined in a function is not used. 3616 This warning is enabled by `-Wall'. 3617 3618`-Wunused-parameter' 3619 Warn whenever a function parameter is unused aside from its 3620 declaration. 3621 3622 To suppress this warning use the `unused' attribute (*note 3623 Variable Attributes::). 3624 3625`-Wno-unused-result' 3626 Do not warn if a caller of a function marked with attribute 3627 `warn_unused_result' (*note Function Attributes::) does not use 3628 its return value. The default is `-Wunused-result'. 3629 3630`-Wunused-variable' 3631 Warn whenever a local variable or non-constant static variable is 3632 unused aside from its declaration. This warning is enabled by 3633 `-Wall'. 3634 3635 To suppress this warning use the `unused' attribute (*note 3636 Variable Attributes::). 3637 3638`-Wunused-value' 3639 Warn whenever a statement computes a result that is explicitly not 3640 used. To suppress this warning cast the unused expression to 3641 `void'. This includes an expression-statement or the left-hand 3642 side of a comma expression that contains no side effects. For 3643 example, an expression such as `x[i,j]' causes a warning, while 3644 `x[(void)i,j]' does not. 3645 3646 This warning is enabled by `-Wall'. 3647 3648`-Wunused' 3649 All the above `-Wunused' options combined. 3650 3651 In order to get a warning about an unused function parameter, you 3652 must either specify `-Wextra -Wunused' (note that `-Wall' implies 3653 `-Wunused'), or separately specify `-Wunused-parameter'. 3654 3655`-Wuninitialized' 3656 Warn if an automatic variable is used without first being 3657 initialized or if a variable may be clobbered by a `setjmp' call. 3658 In C++, warn if a non-static reference or non-static `const' member 3659 appears in a class without constructors. 3660 3661 If you want to warn about code that uses the uninitialized value 3662 of the variable in its own initializer, use the `-Winit-self' 3663 option. 3664 3665 These warnings occur for individual uninitialized or clobbered 3666 elements of structure, union or array variables as well as for 3667 variables that are uninitialized or clobbered as a whole. They do 3668 not occur for variables or elements declared `volatile'. Because 3669 these warnings depend on optimization, the exact variables or 3670 elements for which there are warnings depends on the precise 3671 optimization options and version of GCC used. 3672 3673 Note that there may be no warning about a variable that is used 3674 only to compute a value that itself is never used, because such 3675 computations may be deleted by data flow analysis before the 3676 warnings are printed. 3677 3678`-Wmaybe-uninitialized' 3679 For an automatic variable, if there exists a path from the function 3680 entry to a use of the variable that is initialized, but there exist 3681 some other paths for which the variable is not initialized, the 3682 compiler emits a warning if it cannot prove the uninitialized 3683 paths are not executed at run time. These warnings are made 3684 optional because GCC is not smart enough to see all the reasons 3685 why the code might be correct in spite of appearing to have an 3686 error. Here is one example of how this can happen: 3687 3688 { 3689 int x; 3690 switch (y) 3691 { 3692 case 1: x = 1; 3693 break; 3694 case 2: x = 4; 3695 break; 3696 case 3: x = 5; 3697 } 3698 foo (x); 3699 } 3700 3701 If the value of `y' is always 1, 2 or 3, then `x' is always 3702 initialized, but GCC doesn't know this. To suppress the warning, 3703 you need to provide a default case with assert(0) or similar code. 3704 3705 This option also warns when a non-volatile automatic variable 3706 might be changed by a call to `longjmp'. These warnings as well 3707 are possible only in optimizing compilation. 3708 3709 The compiler sees only the calls to `setjmp'. It cannot know 3710 where `longjmp' will be called; in fact, a signal handler could 3711 call it at any point in the code. As a result, you may get a 3712 warning even when there is in fact no problem because `longjmp' 3713 cannot in fact be called at the place that would cause a problem. 3714 3715 Some spurious warnings can be avoided if you declare all the 3716 functions you use that never return as `noreturn'. *Note Function 3717 Attributes::. 3718 3719 This warning is enabled by `-Wall' or `-Wextra'. 3720 3721`-Wunknown-pragmas' 3722 Warn when a `#pragma' directive is encountered that is not 3723 understood by GCC. If this command-line option is used, warnings 3724 are even issued for unknown pragmas in system header files. This 3725 is not the case if the warnings are only enabled by the `-Wall' 3726 command-line option. 3727 3728`-Wno-pragmas' 3729 Do not warn about misuses of pragmas, such as incorrect parameters, 3730 invalid syntax, or conflicts between pragmas. See also 3731 `-Wunknown-pragmas'. 3732 3733`-Wstrict-aliasing' 3734 This option is only active when `-fstrict-aliasing' is active. It 3735 warns about code that might break the strict aliasing rules that 3736 the compiler is using for optimization. The warning does not 3737 catch all cases, but does attempt to catch the more common 3738 pitfalls. It is included in `-Wall'. It is equivalent to 3739 `-Wstrict-aliasing=3' 3740 3741`-Wstrict-aliasing=n' 3742 This option is only active when `-fstrict-aliasing' is active. It 3743 warns about code that might break the strict aliasing rules that 3744 the compiler is using for optimization. Higher levels correspond 3745 to higher accuracy (fewer false positives). Higher levels also 3746 correspond to more effort, similar to the way `-O' works. 3747 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=3'. 3748 3749 Level 1: Most aggressive, quick, least accurate. Possibly useful 3750 when higher levels do not warn but `-fstrict-aliasing' still 3751 breaks the code, as it has very few false negatives. However, it 3752 has many false positives. Warns for all pointer conversions 3753 between possibly incompatible types, even if never dereferenced. 3754 Runs in the front end only. 3755 3756 Level 2: Aggressive, quick, not too precise. May still have many 3757 false positives (not as many as level 1 though), and few false 3758 negatives (but possibly more than level 1). Unlike level 1, it 3759 only warns when an address is taken. Warns about incomplete 3760 types. Runs in the front end only. 3761 3762 Level 3 (default for `-Wstrict-aliasing'): Should have very few 3763 false positives and few false negatives. Slightly slower than 3764 levels 1 or 2 when optimization is enabled. Takes care of the 3765 common pun+dereference pattern in the front end: 3766 `*(int*)&some_float'. If optimization is enabled, it also runs in 3767 the back end, where it deals with multiple statement cases using 3768 flow-sensitive points-to information. Only warns when the 3769 converted pointer is dereferenced. Does not warn about incomplete 3770 types. 3771 3772`-Wstrict-overflow' 3773`-Wstrict-overflow=N' 3774 This option is only active when `-fstrict-overflow' is active. It 3775 warns about cases where the compiler optimizes based on the 3776 assumption that signed overflow does not occur. Note that it does 3777 not warn about all cases where the code might overflow: it only 3778 warns about cases where the compiler implements some optimization. 3779 Thus this warning depends on the optimization level. 3780 3781 An optimization that assumes that signed overflow does not occur is 3782 perfectly safe if the values of the variables involved are such 3783 that overflow never does, in fact, occur. Therefore this warning 3784 can easily give a false positive: a warning about code that is not 3785 actually a problem. To help focus on important issues, several 3786 warning levels are defined. No warnings are issued for the use of 3787 undefined signed overflow when estimating how many iterations a 3788 loop requires, in particular when determining whether a loop will 3789 be executed at all. 3790 3791 `-Wstrict-overflow=1' 3792 Warn about cases that are both questionable and easy to 3793 avoid. For example, with `-fstrict-overflow', the compiler 3794 simplifies `x + 1 > x' to `1'. This level of 3795 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 3796 not, and must be explicitly requested. 3797 3798 `-Wstrict-overflow=2' 3799 Also warn about other cases where a comparison is simplified 3800 to a constant. For example: `abs (x) >= 0'. This can only be 3801 simplified when `-fstrict-overflow' is in effect, because 3802 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 3803 zero. `-Wstrict-overflow' (with no level) is the same as 3804 `-Wstrict-overflow=2'. 3805 3806 `-Wstrict-overflow=3' 3807 Also warn about other cases where a comparison is simplified. 3808 For example: `x + 1 > 1' is simplified to `x > 0'. 3809 3810 `-Wstrict-overflow=4' 3811 Also warn about other simplifications not covered by the 3812 above cases. For example: `(x * 10) / 5' is simplified to `x 3813 * 2'. 3814 3815 `-Wstrict-overflow=5' 3816 Also warn about cases where the compiler reduces the 3817 magnitude of a constant involved in a comparison. For 3818 example: `x + 2 > y' is simplified to `x + 1 >= y'. This is 3819 reported only at the highest warning level because this 3820 simplification applies to many comparisons, so this warning 3821 level gives a very large number of false positives. 3822 3823`-Wsuggest-attribute=[pure|const|noreturn|format]' 3824 Warn for cases where adding an attribute may be beneficial. The 3825 attributes currently supported are listed below. 3826 3827 `-Wsuggest-attribute=pure' 3828 `-Wsuggest-attribute=const' 3829 `-Wsuggest-attribute=noreturn' 3830 Warn about functions that might be candidates for attributes 3831 `pure', `const' or `noreturn'. The compiler only warns for 3832 functions visible in other compilation units or (in the case 3833 of `pure' and `const') if it cannot prove that the function 3834 returns normally. A function returns normally if it doesn't 3835 contain an infinite loop or return abnormally by throwing, 3836 calling `abort()' or trapping. This analysis requires option 3837 `-fipa-pure-const', which is enabled by default at `-O' and 3838 higher. Higher optimization levels improve the accuracy of 3839 the analysis. 3840 3841 `-Wsuggest-attribute=format' 3842 `-Wmissing-format-attribute' 3843 Warn about function pointers that might be candidates for 3844 `format' attributes. Note these are only possible 3845 candidates, not absolute ones. GCC guesses that function 3846 pointers with `format' attributes that are used in 3847 assignment, initialization, parameter passing or return 3848 statements should have a corresponding `format' attribute in 3849 the resulting type. I.e. the left-hand side of the 3850 assignment or initialization, the type of the parameter 3851 variable, or the return type of the containing function 3852 respectively should also have a `format' attribute to avoid 3853 the warning. 3854 3855 GCC also warns about function definitions that might be 3856 candidates for `format' attributes. Again, these are only 3857 possible candidates. GCC guesses that `format' attributes 3858 might be appropriate for any function that calls a function 3859 like `vprintf' or `vscanf', but this might not always be the 3860 case, and some functions for which `format' attributes are 3861 appropriate may not be detected. 3862 3863`-Warray-bounds' 3864 This option is only active when `-ftree-vrp' is active (default 3865 for `-O2' and above). It warns about subscripts to arrays that are 3866 always out of bounds. This warning is enabled by `-Wall'. 3867 3868`-Wno-div-by-zero' 3869 Do not warn about compile-time integer division by zero. 3870 Floating-point division by zero is not warned about, as it can be 3871 a legitimate way of obtaining infinities and NaNs. 3872 3873`-Wsystem-headers' 3874 Print warning messages for constructs found in system header files. 3875 Warnings from system headers are normally suppressed, on the 3876 assumption that they usually do not indicate real problems and 3877 would only make the compiler output harder to read. Using this 3878 command-line option tells GCC to emit warnings from system headers 3879 as if they occurred in user code. However, note that using 3880 `-Wall' in conjunction with this option does _not_ warn about 3881 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 3882 must also be used. 3883 3884`-Wtrampolines' 3885 Warn about trampolines generated for pointers to nested functions. 3886 3887 A trampoline is a small piece of data or code that is created at 3888 run time on the stack when the address of a nested function is 3889 taken, and is used to call the nested function indirectly. For 3890 some targets, it is made up of data only and thus requires no 3891 special treatment. But, for most targets, it is made up of code 3892 and thus requires the stack to be made executable in order for 3893 the program to work properly. 3894 3895`-Wfloat-equal' 3896 Warn if floating-point values are used in equality comparisons. 3897 3898 The idea behind this is that sometimes it is convenient (for the 3899 programmer) to consider floating-point values as approximations to 3900 infinitely precise real numbers. If you are doing this, then you 3901 need to compute (by analyzing the code, or in some other way) the 3902 maximum or likely maximum error that the computation introduces, 3903 and allow for it when performing comparisons (and when producing 3904 output, but that's a different problem). In particular, instead 3905 of testing for equality, you should check to see whether the two 3906 values have ranges that overlap; and this is done with the 3907 relational operators, so equality comparisons are probably 3908 mistaken. 3909 3910`-Wtraditional (C and Objective-C only)' 3911 Warn about certain constructs that behave differently in 3912 traditional and ISO C. Also warn about ISO C constructs that have 3913 no traditional C equivalent, and/or problematic constructs that 3914 should be avoided. 3915 3916 * Macro parameters that appear within string literals in the 3917 macro body. In traditional C macro replacement takes place 3918 within string literals, but in ISO C it does not. 3919 3920 * In traditional C, some preprocessor directives did not exist. 3921 Traditional preprocessors only considered a line to be a 3922 directive if the `#' appeared in column 1 on the line. 3923 Therefore `-Wtraditional' warns about directives that 3924 traditional C understands but ignores because the `#' does 3925 not appear as the first character on the line. It also 3926 suggests you hide directives like `#pragma' not understood by 3927 traditional C by indenting them. Some traditional 3928 implementations do not recognize `#elif', so this option 3929 suggests avoiding it altogether. 3930 3931 * A function-like macro that appears without arguments. 3932 3933 * The unary plus operator. 3934 3935 * The `U' integer constant suffix, or the `F' or `L' 3936 floating-point constant suffixes. (Traditional C does 3937 support the `L' suffix on integer constants.) Note, these 3938 suffixes appear in macros defined in the system headers of 3939 most modern systems, e.g. the `_MIN'/`_MAX' macros in 3940 `<limits.h>'. Use of these macros in user code might 3941 normally lead to spurious warnings, however GCC's integrated 3942 preprocessor has enough context to avoid warning in these 3943 cases. 3944 3945 * A function declared external in one block and then used after 3946 the end of the block. 3947 3948 * A `switch' statement has an operand of type `long'. 3949 3950 * A non-`static' function declaration follows a `static' one. 3951 This construct is not accepted by some traditional C 3952 compilers. 3953 3954 * The ISO type of an integer constant has a different width or 3955 signedness from its traditional type. This warning is only 3956 issued if the base of the constant is ten. I.e. hexadecimal 3957 or octal values, which typically represent bit patterns, are 3958 not warned about. 3959 3960 * Usage of ISO string concatenation is detected. 3961 3962 * Initialization of automatic aggregates. 3963 3964 * Identifier conflicts with labels. Traditional C lacks a 3965 separate namespace for labels. 3966 3967 * Initialization of unions. If the initializer is zero, the 3968 warning is omitted. This is done under the assumption that 3969 the zero initializer in user code appears conditioned on e.g. 3970 `__STDC__' to avoid missing initializer warnings and relies 3971 on default initialization to zero in the traditional C case. 3972 3973 * Conversions by prototypes between fixed/floating-point values 3974 and vice versa. The absence of these prototypes when 3975 compiling with traditional C causes serious problems. This 3976 is a subset of the possible conversion warnings; for the full 3977 set use `-Wtraditional-conversion'. 3978 3979 * Use of ISO C style function definitions. This warning 3980 intentionally is _not_ issued for prototype declarations or 3981 variadic functions because these ISO C features appear in 3982 your code when using libiberty's traditional C compatibility 3983 macros, `PARAMS' and `VPARAMS'. This warning is also 3984 bypassed for nested functions because that feature is already 3985 a GCC extension and thus not relevant to traditional C 3986 compatibility. 3987 3988`-Wtraditional-conversion (C and Objective-C only)' 3989 Warn if a prototype causes a type conversion that is different 3990 from what would happen to the same argument in the absence of a 3991 prototype. This includes conversions of fixed point to floating 3992 and vice versa, and conversions changing the width or signedness 3993 of a fixed-point argument except when the same as the default 3994 promotion. 3995 3996`-Wdeclaration-after-statement (C and Objective-C only)' 3997 Warn when a declaration is found after a statement in a block. 3998 This construct, known from C++, was introduced with ISO C99 and is 3999 by default allowed in GCC. It is not supported by ISO C90 and was 4000 not supported by GCC versions before GCC 3.0. *Note Mixed 4001 Declarations::. 4002 4003`-Wundef' 4004 Warn if an undefined identifier is evaluated in an `#if' directive. 4005 4006`-Wno-endif-labels' 4007 Do not warn whenever an `#else' or an `#endif' are followed by 4008 text. 4009 4010`-Wshadow' 4011 Warn whenever a local variable or type declaration shadows another 4012 variable, parameter, type, or class member (in C++), or whenever a 4013 built-in function is shadowed. Note that in C++, the compiler 4014 warns if a local variable shadows an explicit typedef, but not if 4015 it shadows a struct/class/enum. 4016 4017`-Wlarger-than=LEN' 4018 Warn whenever an object of larger than LEN bytes is defined. 4019 4020`-Wframe-larger-than=LEN' 4021 Warn if the size of a function frame is larger than LEN bytes. 4022 The computation done to determine the stack frame size is 4023 approximate and not conservative. The actual requirements may be 4024 somewhat greater than LEN even if you do not get a warning. In 4025 addition, any space allocated via `alloca', variable-length 4026 arrays, or related constructs is not included by the compiler when 4027 determining whether or not to issue a warning. 4028 4029`-Wno-free-nonheap-object' 4030 Do not warn when attempting to free an object that was not 4031 allocated on the heap. 4032 4033`-Wstack-usage=LEN' 4034 Warn if the stack usage of a function might be larger than LEN 4035 bytes. The computation done to determine the stack usage is 4036 conservative. Any space allocated via `alloca', variable-length 4037 arrays, or related constructs is included by the compiler when 4038 determining whether or not to issue a warning. 4039 4040 The message is in keeping with the output of `-fstack-usage'. 4041 4042 * If the stack usage is fully static but exceeds the specified 4043 amount, it's: 4044 4045 warning: stack usage is 1120 bytes 4046 4047 * If the stack usage is (partly) dynamic but bounded, it's: 4048 4049 warning: stack usage might be 1648 bytes 4050 4051 * If the stack usage is (partly) dynamic and not bounded, it's: 4052 4053 warning: stack usage might be unbounded 4054 4055`-Wunsafe-loop-optimizations' 4056 Warn if the loop cannot be optimized because the compiler cannot 4057 assume anything on the bounds of the loop indices. With 4058 `-funsafe-loop-optimizations' warn if the compiler makes such 4059 assumptions. 4060 4061`-Wno-pedantic-ms-format (MinGW targets only)' 4062 When used in combination with `-Wformat' and `-pedantic' without 4063 GNU extensions, this option disables the warnings about non-ISO 4064 `printf' / `scanf' format width specifiers `I32', `I64', and `I' 4065 used on Windows targets, which depend on the MS runtime. 4066 4067`-Wpointer-arith' 4068 Warn about anything that depends on the "size of" a function type 4069 or of `void'. GNU C assigns these types a size of 1, for 4070 convenience in calculations with `void *' pointers and pointers to 4071 functions. In C++, warn also when an arithmetic operation involves 4072 `NULL'. This warning is also enabled by `-Wpedantic'. 4073 4074`-Wtype-limits' 4075 Warn if a comparison is always true or always false due to the 4076 limited range of the data type, but do not warn for constant 4077 expressions. For example, warn if an unsigned variable is 4078 compared against zero with `<' or `>='. This warning is also 4079 enabled by `-Wextra'. 4080 4081`-Wbad-function-cast (C and Objective-C only)' 4082 Warn whenever a function call is cast to a non-matching type. For 4083 example, warn if `int malloc()' is cast to `anything *'. 4084 4085`-Wc++-compat (C and Objective-C only)' 4086 Warn about ISO C constructs that are outside of the common subset 4087 of ISO C and ISO C++, e.g. request for implicit conversion from 4088 `void *' to a pointer to non-`void' type. 4089 4090`-Wc++11-compat (C++ and Objective-C++ only)' 4091 Warn about C++ constructs whose meaning differs between ISO C++ 4092 1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are 4093 keywords in ISO C++ 2011. This warning turns on `-Wnarrowing' and 4094 is enabled by `-Wall'. 4095 4096`-Wcast-qual' 4097 Warn whenever a pointer is cast so as to remove a type qualifier 4098 from the target type. For example, warn if a `const char *' is 4099 cast to an ordinary `char *'. 4100 4101 Also warn when making a cast that introduces a type qualifier in an 4102 unsafe way. For example, casting `char **' to `const char **' is 4103 unsafe, as in this example: 4104 4105 /* p is char ** value. */ 4106 const char **q = (const char **) p; 4107 /* Assignment of readonly string to const char * is OK. */ 4108 *q = "string"; 4109 /* Now char** pointer points to read-only memory. */ 4110 **p = 'b'; 4111 4112`-Wcast-align' 4113 Warn whenever a pointer is cast such that the required alignment 4114 of the target is increased. For example, warn if a `char *' is 4115 cast to an `int *' on machines where integers can only be accessed 4116 at two- or four-byte boundaries. 4117 4118`-Wwrite-strings' 4119 When compiling C, give string constants the type `const 4120 char[LENGTH]' so that copying the address of one into a 4121 non-`const' `char *' pointer produces a warning. These warnings 4122 help you find at compile time code that can try to write into a 4123 string constant, but only if you have been very careful about 4124 using `const' in declarations and prototypes. Otherwise, it is 4125 just a nuisance. This is why we did not make `-Wall' request these 4126 warnings. 4127 4128 When compiling C++, warn about the deprecated conversion from 4129 string literals to `char *'. This warning is enabled by default 4130 for C++ programs. 4131 4132`-Wclobbered' 4133 Warn for variables that might be changed by `longjmp' or `vfork'. 4134 This warning is also enabled by `-Wextra'. 4135 4136`-Wconversion' 4137 Warn for implicit conversions that may alter a value. This includes 4138 conversions between real and integer, like `abs (x)' when `x' is 4139 `double'; conversions between signed and unsigned, like `unsigned 4140 ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'. 4141 Do not warn for explicit casts like `abs ((int) x)' and `ui = 4142 (unsigned) -1', or if the value is not changed by the conversion 4143 like in `abs (2.0)'. Warnings about conversions between signed 4144 and unsigned integers can be disabled by using 4145 `-Wno-sign-conversion'. 4146 4147 For C++, also warn for confusing overload resolution for 4148 user-defined conversions; and conversions that never use a type 4149 conversion operator: conversions to `void', the same type, a base 4150 class or a reference to them. Warnings about conversions between 4151 signed and unsigned integers are disabled by default in C++ unless 4152 `-Wsign-conversion' is explicitly enabled. 4153 4154`-Wno-conversion-null (C++ and Objective-C++ only)' 4155 Do not warn for conversions between `NULL' and non-pointer types. 4156 `-Wconversion-null' is enabled by default. 4157 4158`-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)' 4159 Warn when a literal '0' is used as null pointer constant. This can 4160 be useful to facilitate the conversion to `nullptr' in C++11. 4161 4162`-Wuseless-cast (C++ and Objective-C++ only)' 4163 Warn when an expression is casted to its own type. 4164 4165`-Wempty-body' 4166 Warn if an empty body occurs in an `if', `else' or `do while' 4167 statement. This warning is also enabled by `-Wextra'. 4168 4169`-Wenum-compare' 4170 Warn about a comparison between values of different enumerated 4171 types. In C++ enumeral mismatches in conditional expressions are 4172 also diagnosed and the warning is enabled by default. In C this 4173 warning is enabled by `-Wall'. 4174 4175`-Wjump-misses-init (C, Objective-C only)' 4176 Warn if a `goto' statement or a `switch' statement jumps forward 4177 across the initialization of a variable, or jumps backward to a 4178 label after the variable has been initialized. This only warns 4179 about variables that are initialized when they are declared. This 4180 warning is only supported for C and Objective-C; in C++ this sort 4181 of branch is an error in any case. 4182 4183 `-Wjump-misses-init' is included in `-Wc++-compat'. It can be 4184 disabled with the `-Wno-jump-misses-init' option. 4185 4186`-Wsign-compare' 4187 Warn when a comparison between signed and unsigned values could 4188 produce an incorrect result when the signed value is converted to 4189 unsigned. This warning is also enabled by `-Wextra'; to get the 4190 other warnings of `-Wextra' without this warning, use `-Wextra 4191 -Wno-sign-compare'. 4192 4193`-Wsign-conversion' 4194 Warn for implicit conversions that may change the sign of an 4195 integer value, like assigning a signed integer expression to an 4196 unsigned integer variable. An explicit cast silences the warning. 4197 In C, this option is enabled also by `-Wconversion'. 4198 4199`-Wsizeof-pointer-memaccess' 4200 Warn for suspicious length parameters to certain string and memory 4201 built-in functions if the argument uses `sizeof'. This warning 4202 warns e.g. about `memset (ptr, 0, sizeof (ptr));' if `ptr' is not 4203 an array, but a pointer, and suggests a possible fix, or about 4204 `memcpy (&foo, ptr, sizeof (&foo));'. This warning is enabled by 4205 `-Wall'. 4206 4207`-Waddress' 4208 Warn about suspicious uses of memory addresses. These include using 4209 the address of a function in a conditional expression, such as 4210 `void func(void); if (func)', and comparisons against the memory 4211 address of a string literal, such as `if (x == "abc")'. Such uses 4212 typically indicate a programmer error: the address of a function 4213 always evaluates to true, so their use in a conditional usually 4214 indicate that the programmer forgot the parentheses in a function 4215 call; and comparisons against string literals result in unspecified 4216 behavior and are not portable in C, so they usually indicate that 4217 the programmer intended to use `strcmp'. This warning is enabled 4218 by `-Wall'. 4219 4220`-Wlogical-op' 4221 Warn about suspicious uses of logical operators in expressions. 4222 This includes using logical operators in contexts where a bit-wise 4223 operator is likely to be expected. 4224 4225`-Waggregate-return' 4226 Warn if any functions that return structures or unions are defined 4227 or called. (In languages where you can return an array, this also 4228 elicits a warning.) 4229 4230`-Wno-aggressive-loop-optimizations' 4231 Warn if in a loop with constant number of iterations the compiler 4232 detects undefined behavior in some statement during one or more of 4233 the iterations. 4234 4235`-Wno-attributes' 4236 Do not warn if an unexpected `__attribute__' is used, such as 4237 unrecognized attributes, function attributes applied to variables, 4238 etc. This does not stop errors for incorrect use of supported 4239 attributes. 4240 4241`-Wno-builtin-macro-redefined' 4242 Do not warn if certain built-in macros are redefined. This 4243 suppresses warnings for redefinition of `__TIMESTAMP__', 4244 `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'. 4245 4246`-Wstrict-prototypes (C and Objective-C only)' 4247 Warn if a function is declared or defined without specifying the 4248 argument types. (An old-style function definition is permitted 4249 without a warning if preceded by a declaration that specifies the 4250 argument types.) 4251 4252`-Wold-style-declaration (C and Objective-C only)' 4253 Warn for obsolescent usages, according to the C Standard, in a 4254 declaration. For example, warn if storage-class specifiers like 4255 `static' are not the first things in a declaration. This warning 4256 is also enabled by `-Wextra'. 4257 4258`-Wold-style-definition (C and Objective-C only)' 4259 Warn if an old-style function definition is used. A warning is 4260 given even if there is a previous prototype. 4261 4262`-Wmissing-parameter-type (C and Objective-C only)' 4263 A function parameter is declared without a type specifier in 4264 K&R-style functions: 4265 4266 void foo(bar) { } 4267 4268 This warning is also enabled by `-Wextra'. 4269 4270`-Wmissing-prototypes (C and Objective-C only)' 4271 Warn if a global function is defined without a previous prototype 4272 declaration. This warning is issued even if the definition itself 4273 provides a prototype. Use this option to detect global functions 4274 that do not have a matching prototype declaration in a header file. 4275 This option is not valid for C++ because all function declarations 4276 provide prototypes and a non-matching declaration will declare an 4277 overload rather than conflict with an earlier declaration. Use 4278 `-Wmissing-declarations' to detect missing declarations in C++. 4279 4280`-Wmissing-declarations' 4281 Warn if a global function is defined without a previous 4282 declaration. Do so even if the definition itself provides a 4283 prototype. Use this option to detect global functions that are 4284 not declared in header files. In C, no warnings are issued for 4285 functions with previous non-prototype declarations; use 4286 `-Wmissing-prototype' to detect missing prototypes. In C++, no 4287 warnings are issued for function templates, or for inline 4288 functions, or for functions in anonymous namespaces. 4289 4290`-Wmissing-field-initializers' 4291 Warn if a structure's initializer has some fields missing. For 4292 example, the following code causes such a warning, because `x.h' 4293 is implicitly zero: 4294 4295 struct s { int f, g, h; }; 4296 struct s x = { 3, 4 }; 4297 4298 This option does not warn about designated initializers, so the 4299 following modification does not trigger a warning: 4300 4301 struct s { int f, g, h; }; 4302 struct s x = { .f = 3, .g = 4 }; 4303 4304 This warning is included in `-Wextra'. To get other `-Wextra' 4305 warnings without this one, use `-Wextra 4306 -Wno-missing-field-initializers'. 4307 4308`-Wno-multichar' 4309 Do not warn if a multicharacter constant (`'FOOF'') is used. 4310 Usually they indicate a typo in the user's code, as they have 4311 implementation-defined values, and should not be used in portable 4312 code. 4313 4314`-Wnormalized=<none|id|nfc|nfkc>' 4315 In ISO C and ISO C++, two identifiers are different if they are 4316 different sequences of characters. However, sometimes when 4317 characters outside the basic ASCII character set are used, you can 4318 have two different character sequences that look the same. To 4319 avoid confusion, the ISO 10646 standard sets out some 4320 "normalization rules" which when applied ensure that two sequences 4321 that look the same are turned into the same sequence. GCC can 4322 warn you if you are using identifiers that have not been 4323 normalized; this option controls that warning. 4324 4325 There are four levels of warning supported by GCC. The default is 4326 `-Wnormalized=nfc', which warns about any identifier that is not 4327 in the ISO 10646 "C" normalized form, "NFC". NFC is the 4328 recommended form for most uses. 4329 4330 Unfortunately, there are some characters allowed in identifiers by 4331 ISO C and ISO C++ that, when turned into NFC, are not allowed in 4332 identifiers. That is, there's no way to use these symbols in 4333 portable ISO C or C++ and have all your identifiers in NFC. 4334 `-Wnormalized=id' suppresses the warning for these characters. It 4335 is hoped that future versions of the standards involved will 4336 correct this, which is why this option is not the default. 4337 4338 You can switch the warning off for all characters by writing 4339 `-Wnormalized=none'. You should only do this if you are using 4340 some other normalization scheme (like "D"), because otherwise you 4341 can easily create bugs that are literally impossible to see. 4342 4343 Some characters in ISO 10646 have distinct meanings but look 4344 identical in some fonts or display methodologies, especially once 4345 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 4346 LATIN SMALL LETTER N", displays just like a regular `n' that has 4347 been placed in a superscript. ISO 10646 defines the "NFKC" 4348 normalization scheme to convert all these into a standard form as 4349 well, and GCC warns if your code is not in NFKC if you use 4350 `-Wnormalized=nfkc'. This warning is comparable to warning about 4351 every identifier that contains the letter O because it might be 4352 confused with the digit 0, and so is not the default, but may be 4353 useful as a local coding convention if the programming environment 4354 cannot be fixed to display these characters distinctly. 4355 4356`-Wno-deprecated' 4357 Do not warn about usage of deprecated features. *Note Deprecated 4358 Features::. 4359 4360`-Wno-deprecated-declarations' 4361 Do not warn about uses of functions (*note Function Attributes::), 4362 variables (*note Variable Attributes::), and types (*note Type 4363 Attributes::) marked as deprecated by using the `deprecated' 4364 attribute. 4365 4366`-Wno-overflow' 4367 Do not warn about compile-time overflow in constant expressions. 4368 4369`-Woverride-init (C and Objective-C only)' 4370 Warn if an initialized field without side effects is overridden 4371 when using designated initializers (*note Designated Initializers: 4372 Designated Inits.). 4373 4374 This warning is included in `-Wextra'. To get other `-Wextra' 4375 warnings without this one, use `-Wextra -Wno-override-init'. 4376 4377`-Wpacked' 4378 Warn if a structure is given the packed attribute, but the packed 4379 attribute has no effect on the layout or size of the structure. 4380 Such structures may be mis-aligned for little benefit. For 4381 instance, in this code, the variable `f.x' in `struct bar' is 4382 misaligned even though `struct bar' does not itself have the 4383 packed attribute: 4384 4385 struct foo { 4386 int x; 4387 char a, b, c, d; 4388 } __attribute__((packed)); 4389 struct bar { 4390 char z; 4391 struct foo f; 4392 }; 4393 4394`-Wpacked-bitfield-compat' 4395 The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute 4396 on bit-fields of type `char'. This has been fixed in GCC 4.4 but 4397 the change can lead to differences in the structure layout. GCC 4398 informs you when the offset of such a field has changed in GCC 4.4. 4399 For example there is no longer a 4-bit padding between field `a' 4400 and `b' in this structure: 4401 4402 struct foo 4403 { 4404 char a:4; 4405 char b:8; 4406 } __attribute__ ((packed)); 4407 4408 This warning is enabled by default. Use 4409 `-Wno-packed-bitfield-compat' to disable this warning. 4410 4411`-Wpadded' 4412 Warn if padding is included in a structure, either to align an 4413 element of the structure or to align the whole structure. 4414 Sometimes when this happens it is possible to rearrange the fields 4415 of the structure to reduce the padding and so make the structure 4416 smaller. 4417 4418`-Wredundant-decls' 4419 Warn if anything is declared more than once in the same scope, 4420 even in cases where multiple declaration is valid and changes 4421 nothing. 4422 4423`-Wnested-externs (C and Objective-C only)' 4424 Warn if an `extern' declaration is encountered within a function. 4425 4426`-Wno-inherited-variadic-ctor' 4427 Suppress warnings about use of C++11 inheriting constructors when 4428 the base class inherited from has a C variadic constructor; the 4429 warning is on by default because the ellipsis is not inherited. 4430 4431`-Winline' 4432 Warn if a function that is declared as inline cannot be inlined. 4433 Even with this option, the compiler does not warn about failures to 4434 inline functions declared in system headers. 4435 4436 The compiler uses a variety of heuristics to determine whether or 4437 not to inline a function. For example, the compiler takes into 4438 account the size of the function being inlined and the amount of 4439 inlining that has already been done in the current function. 4440 Therefore, seemingly insignificant changes in the source program 4441 can cause the warnings produced by `-Winline' to appear or 4442 disappear. 4443 4444`-Wno-invalid-offsetof (C++ and Objective-C++ only)' 4445 Suppress warnings from applying the `offsetof' macro to a non-POD 4446 type. According to the 1998 ISO C++ standard, applying `offsetof' 4447 to a non-POD type is undefined. In existing C++ implementations, 4448 however, `offsetof' typically gives meaningful results even when 4449 applied to certain kinds of non-POD types (such as a simple 4450 `struct' that fails to be a POD type only by virtue of having a 4451 constructor). This flag is for users who are aware that they are 4452 writing nonportable code and who have deliberately chosen to 4453 ignore the warning about it. 4454 4455 The restrictions on `offsetof' may be relaxed in a future version 4456 of the C++ standard. 4457 4458`-Wno-int-to-pointer-cast' 4459 Suppress warnings from casts to pointer type of an integer of a 4460 different size. In C++, casting to a pointer type of smaller size 4461 is an error. `Wint-to-pointer-cast' is enabled by default. 4462 4463`-Wno-pointer-to-int-cast (C and Objective-C only)' 4464 Suppress warnings from casts from a pointer to an integer type of a 4465 different size. 4466 4467`-Winvalid-pch' 4468 Warn if a precompiled header (*note Precompiled Headers::) is 4469 found in the search path but can't be used. 4470 4471`-Wlong-long' 4472 Warn if `long long' type is used. This is enabled by either 4473 `-Wpedantic' or `-Wtraditional' in ISO C90 and C++98 modes. To 4474 inhibit the warning messages, use `-Wno-long-long'. 4475 4476`-Wvariadic-macros' 4477 Warn if variadic macros are used in pedantic ISO C90 mode, or the 4478 GNU alternate syntax when in pedantic ISO C99 mode. This is 4479 default. To inhibit the warning messages, use 4480 `-Wno-variadic-macros'. 4481 4482`-Wvarargs' 4483 Warn upon questionable usage of the macros used to handle variable 4484 arguments like `va_start'. This is default. To inhibit the 4485 warning messages, use `-Wno-varargs'. 4486 4487`-Wvector-operation-performance' 4488 Warn if vector operation is not implemented via SIMD capabilities 4489 of the architecture. Mainly useful for the performance tuning. 4490 Vector operation can be implemented `piecewise', which means that 4491 the scalar operation is performed on every vector element; `in 4492 parallel', which means that the vector operation is implemented 4493 using scalars of wider type, which normally is more performance 4494 efficient; and `as a single scalar', which means that vector fits 4495 into a scalar type. 4496 4497`-Wno-virtual-move-assign' 4498 Suppress warnings about inheriting from a virtual base with a 4499 non-trivial C++11 move assignment operator. This is dangerous 4500 because if the virtual base is reachable along more than one path, 4501 it will be moved multiple times, which can mean both objects end 4502 up in the moved-from state. If the move assignment operator is 4503 written to avoid moving from a moved-from object, this warning can 4504 be disabled. 4505 4506`-Wvla' 4507 Warn if variable length array is used in the code. `-Wno-vla' 4508 prevents the `-Wpedantic' warning of the variable length array. 4509 4510`-Wvolatile-register-var' 4511 Warn if a register variable is declared volatile. The volatile 4512 modifier does not inhibit all optimizations that may eliminate 4513 reads and/or writes to register variables. This warning is 4514 enabled by `-Wall'. 4515 4516`-Wdisabled-optimization' 4517 Warn if a requested optimization pass is disabled. This warning 4518 does not generally indicate that there is anything wrong with your 4519 code; it merely indicates that GCC's optimizers are unable to 4520 handle the code effectively. Often, the problem is that your code 4521 is too big or too complex; GCC refuses to optimize programs when 4522 the optimization itself is likely to take inordinate amounts of 4523 time. 4524 4525`-Wpointer-sign (C and Objective-C only)' 4526 Warn for pointer argument passing or assignment with different 4527 signedness. This option is only supported for C and Objective-C. 4528 It is implied by `-Wall' and by `-Wpedantic', which can be 4529 disabled with `-Wno-pointer-sign'. 4530 4531`-Wstack-protector' 4532 This option is only active when `-fstack-protector' is active. It 4533 warns about functions that are not protected against stack 4534 smashing. 4535 4536`-Wno-mudflap' 4537 Suppress warnings about constructs that cannot be instrumented by 4538 `-fmudflap'. 4539 4540`-Woverlength-strings' 4541 Warn about string constants that are longer than the "minimum 4542 maximum" length specified in the C standard. Modern compilers 4543 generally allow string constants that are much longer than the 4544 standard's minimum limit, but very portable programs should avoid 4545 using longer strings. 4546 4547 The limit applies _after_ string constant concatenation, and does 4548 not count the trailing NUL. In C90, the limit was 509 characters; 4549 in C99, it was raised to 4095. C++98 does not specify a normative 4550 minimum maximum, so we do not diagnose overlength strings in C++. 4551 4552 This option is implied by `-Wpedantic', and can be disabled with 4553 `-Wno-overlength-strings'. 4554 4555`-Wunsuffixed-float-constants (C and Objective-C only)' 4556 Issue a warning for any floating constant that does not have a 4557 suffix. When used together with `-Wsystem-headers' it warns about 4558 such constants in system header files. This can be useful when 4559 preparing code to use with the `FLOAT_CONST_DECIMAL64' pragma from 4560 the decimal floating-point extension to C99. 4561 4562 4563File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 4564 45653.9 Options for Debugging Your Program or GCC 4566============================================= 4567 4568GCC has various special options that are used for debugging either your 4569program or GCC: 4570 4571`-g' 4572 Produce debugging information in the operating system's native 4573 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 4574 debugging information. 4575 4576 On most systems that use stabs format, `-g' enables use of extra 4577 debugging information that only GDB can use; this extra information 4578 makes debugging work better in GDB but probably makes other 4579 debuggers crash or refuse to read the program. If you want to 4580 control for certain whether to generate the extra information, use 4581 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 4582 below). 4583 4584 GCC allows you to use `-g' with `-O'. The shortcuts taken by 4585 optimized code may occasionally produce surprising results: some 4586 variables you declared may not exist at all; flow of control may 4587 briefly move where you did not expect it; some statements may not 4588 be executed because they compute constant results or their values 4589 are already at hand; some statements may execute in different 4590 places because they have been moved out of loops. 4591 4592 Nevertheless it proves possible to debug optimized output. This 4593 makes it reasonable to use the optimizer for programs that might 4594 have bugs. 4595 4596 The following options are useful when GCC is generated with the 4597 capability for more than one debugging format. 4598 4599`-gsplit-dwarf' 4600 Separate as much dwarf debugging information as possible into a 4601 separate output file with the extension .dwo. This option allows 4602 the build system to avoid linking files with debug information. To 4603 be useful, this option requires a debugger capable of reading .dwo 4604 files. 4605 4606`-ggdb' 4607 Produce debugging information for use by GDB. This means to use 4608 the most expressive format available (DWARF 2, stabs, or the 4609 native format if neither of those are supported), including GDB 4610 extensions if at all possible. 4611 4612`-gpubnames' 4613 Generate dwarf .debug_pubnames and .debug_pubtypes sections. 4614 4615`-gstabs' 4616 Produce debugging information in stabs format (if that is 4617 supported), without GDB extensions. This is the format used by 4618 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 4619 systems this option produces stabs debugging output that is not 4620 understood by DBX or SDB. On System V Release 4 systems this 4621 option requires the GNU assembler. 4622 4623`-feliminate-unused-debug-symbols' 4624 Produce debugging information in stabs format (if that is 4625 supported), for only symbols that are actually used. 4626 4627`-femit-class-debug-always' 4628 Instead of emitting debugging information for a C++ class in only 4629 one object file, emit it in all object files using the class. 4630 This option should be used only with debuggers that are unable to 4631 handle the way GCC normally emits debugging information for 4632 classes because using this option increases the size of debugging 4633 information by as much as a factor of two. 4634 4635`-fdebug-types-section' 4636 When using DWARF Version 4 or higher, type DIEs can be put into 4637 their own `.debug_types' section instead of making them part of the 4638 `.debug_info' section. It is more efficient to put them in a 4639 separate comdat sections since the linker can then remove 4640 duplicates. But not all DWARF consumers support `.debug_types' 4641 sections yet and on some objects `.debug_types' produces larger 4642 instead of smaller debugging information. 4643 4644`-gstabs+' 4645 Produce debugging information in stabs format (if that is 4646 supported), using GNU extensions understood only by the GNU 4647 debugger (GDB). The use of these extensions is likely to make 4648 other debuggers crash or refuse to read the program. 4649 4650`-gcoff' 4651 Produce debugging information in COFF format (if that is 4652 supported). This is the format used by SDB on most System V 4653 systems prior to System V Release 4. 4654 4655`-gxcoff' 4656 Produce debugging information in XCOFF format (if that is 4657 supported). This is the format used by the DBX debugger on IBM 4658 RS/6000 systems. 4659 4660`-gxcoff+' 4661 Produce debugging information in XCOFF format (if that is 4662 supported), using GNU extensions understood only by the GNU 4663 debugger (GDB). The use of these extensions is likely to make 4664 other debuggers crash or refuse to read the program, and may cause 4665 assemblers other than the GNU assembler (GAS) to fail with an 4666 error. 4667 4668`-gdwarf-VERSION' 4669 Produce debugging information in DWARF format (if that is 4670 supported). The value of VERSION may be either 2, 3 or 4; the 4671 default version for most targets is 4. 4672 4673 Note that with DWARF Version 2, some ports require and always use 4674 some non-conflicting DWARF 3 extensions in the unwind tables. 4675 4676 Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for 4677 maximum benefit. 4678 4679`-grecord-gcc-switches' 4680 This switch causes the command-line options used to invoke the 4681 compiler that may affect code generation to be appended to the 4682 DW_AT_producer attribute in DWARF debugging information. The 4683 options are concatenated with spaces separating them from each 4684 other and from the compiler version. See also 4685 `-frecord-gcc-switches' for another way of storing compiler 4686 options into the object file. This is the default. 4687 4688`-gno-record-gcc-switches' 4689 Disallow appending command-line options to the DW_AT_producer 4690 attribute in DWARF debugging information. 4691 4692`-gstrict-dwarf' 4693 Disallow using extensions of later DWARF standard version than 4694 selected with `-gdwarf-VERSION'. On most targets using 4695 non-conflicting DWARF extensions from later standard versions is 4696 allowed. 4697 4698`-gno-strict-dwarf' 4699 Allow using extensions of later DWARF standard version than 4700 selected with `-gdwarf-VERSION'. 4701 4702`-gvms' 4703 Produce debugging information in Alpha/VMS debug format (if that is 4704 supported). This is the format used by DEBUG on Alpha/VMS systems. 4705 4706`-gLEVEL' 4707`-ggdbLEVEL' 4708`-gstabsLEVEL' 4709`-gcoffLEVEL' 4710`-gxcoffLEVEL' 4711`-gvmsLEVEL' 4712 Request debugging information and also use LEVEL to specify how 4713 much information. The default level is 2. 4714 4715 Level 0 produces no debug information at all. Thus, `-g0' negates 4716 `-g'. 4717 4718 Level 1 produces minimal information, enough for making backtraces 4719 in parts of the program that you don't plan to debug. This 4720 includes descriptions of functions and external variables, but no 4721 information about local variables and no line numbers. 4722 4723 Level 3 includes extra information, such as all the macro 4724 definitions present in the program. Some debuggers support macro 4725 expansion when you use `-g3'. 4726 4727 `-gdwarf-2' does not accept a concatenated debug level, because 4728 GCC used to support an option `-gdwarf' that meant to generate 4729 debug information in version 1 of the DWARF format (which is very 4730 different from version 2), and it would have been too confusing. 4731 That debug format is long obsolete, but the option cannot be 4732 changed now. Instead use an additional `-gLEVEL' option to change 4733 the debug level for DWARF. 4734 4735`-gtoggle' 4736 Turn off generation of debug info, if leaving out this option 4737 generates it, or turn it on at level 2 otherwise. The position of 4738 this argument in the command line does not matter; it takes effect 4739 after all other options are processed, and it does so only once, 4740 no matter how many times it is given. This is mainly intended to 4741 be used with `-fcompare-debug'. 4742 4743`-fsanitize=address' 4744 Enable AddressSanitizer, a fast memory error detector. Memory 4745 access instructions will be instrumented to detect out-of-bounds 4746 and use-after-free bugs. See 4747 `http://code.google.com/p/address-sanitizer/' for more details. 4748 4749`-fsanitize=thread' 4750 Enable ThreadSanitizer, a fast data race detector. Memory access 4751 instructions will be instrumented to detect data race bugs. See 4752 `http://code.google.com/p/data-race-test/wiki/ThreadSanitizer' for 4753 more details. 4754 4755`-fdump-final-insns[=FILE]' 4756 Dump the final internal representation (RTL) to FILE. If the 4757 optional argument is omitted (or if FILE is `.'), the name of the 4758 dump file is determined by appending `.gkd' to the compilation 4759 output file name. 4760 4761`-fcompare-debug[=OPTS]' 4762 If no error occurs during compilation, run the compiler a second 4763 time, adding OPTS and `-fcompare-debug-second' to the arguments 4764 passed to the second compilation. Dump the final internal 4765 representation in both compilations, and print an error if they 4766 differ. 4767 4768 If the equal sign is omitted, the default `-gtoggle' is used. 4769 4770 The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty 4771 and nonzero, implicitly enables `-fcompare-debug'. If 4772 `GCC_COMPARE_DEBUG' is defined to a string starting with a dash, 4773 then it is used for OPTS, otherwise the default `-gtoggle' is used. 4774 4775 `-fcompare-debug=', with the equal sign but without OPTS, is 4776 equivalent to `-fno-compare-debug', which disables the dumping of 4777 the final representation and the second compilation, preventing 4778 even `GCC_COMPARE_DEBUG' from taking effect. 4779 4780 To verify full coverage during `-fcompare-debug' testing, set 4781 `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which 4782 GCC rejects as an invalid option in any actual compilation (rather 4783 than preprocessing, assembly or linking). To get just a warning, 4784 setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not 4785 overridden' will do. 4786 4787`-fcompare-debug-second' 4788 This option is implicitly passed to the compiler for the second 4789 compilation requested by `-fcompare-debug', along with options to 4790 silence warnings, and omitting other options that would cause 4791 side-effect compiler outputs to files or to the standard output. 4792 Dump files and preserved temporary files are renamed so as to 4793 contain the `.gk' additional extension during the second 4794 compilation, to avoid overwriting those generated by the first. 4795 4796 When this option is passed to the compiler driver, it causes the 4797 _first_ compilation to be skipped, which makes it useful for little 4798 other than debugging the compiler proper. 4799 4800`-feliminate-dwarf2-dups' 4801 Compress DWARF 2 debugging information by eliminating duplicated 4802 information about each symbol. This option only makes sense when 4803 generating DWARF 2 debugging information with `-gdwarf-2'. 4804 4805`-femit-struct-debug-baseonly' 4806 Emit debug information for struct-like types only when the base 4807 name of the compilation source file matches the base name of file 4808 in which the struct is defined. 4809 4810 This option substantially reduces the size of debugging 4811 information, but at significant potential loss in type information 4812 to the debugger. See `-femit-struct-debug-reduced' for a less 4813 aggressive option. See `-femit-struct-debug-detailed' for more 4814 detailed control. 4815 4816 This option works only with DWARF 2. 4817 4818`-femit-struct-debug-reduced' 4819 Emit debug information for struct-like types only when the base 4820 name of the compilation source file matches the base name of file 4821 in which the type is defined, unless the struct is a template or 4822 defined in a system header. 4823 4824 This option significantly reduces the size of debugging 4825 information, with some potential loss in type information to the 4826 debugger. See `-femit-struct-debug-baseonly' for a more 4827 aggressive option. See `-femit-struct-debug-detailed' for more 4828 detailed control. 4829 4830 This option works only with DWARF 2. 4831 4832`-femit-struct-debug-detailed[=SPEC-LIST]' 4833 Specify the struct-like types for which the compiler generates 4834 debug information. The intent is to reduce duplicate struct debug 4835 information between different object files within the same program. 4836 4837 This option is a detailed version of `-femit-struct-debug-reduced' 4838 and `-femit-struct-debug-baseonly', which serves for most needs. 4839 4840 A specification has the syntax 4841 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 4842 4843 The optional first word limits the specification to structs that 4844 are used directly (`dir:') or used indirectly (`ind:'). A struct 4845 type is used directly when it is the type of a variable, member. 4846 Indirect uses arise through pointers to structs. That is, when 4847 use of an incomplete struct is valid, the use is indirect. An 4848 example is `struct one direct; struct two * indirect;'. 4849 4850 The optional second word limits the specification to ordinary 4851 structs (`ord:') or generic structs (`gen:'). Generic structs are 4852 a bit complicated to explain. For C++, these are non-explicit 4853 specializations of template classes, or non-template classes 4854 within the above. Other programming languages have generics, but 4855 `-femit-struct-debug-detailed' does not yet implement them. 4856 4857 The third word specifies the source files for those structs for 4858 which the compiler should emit debug information. The values 4859 `none' and `any' have the normal meaning. The value `base' means 4860 that the base of name of the file in which the type declaration 4861 appears must match the base of the name of the main compilation 4862 file. In practice, this means that when compiling `foo.c', debug 4863 information is generated for types declared in that file and 4864 `foo.h', but not other header files. The value `sys' means those 4865 types satisfying `base' or declared in system or compiler headers. 4866 4867 You may need to experiment to determine the best settings for your 4868 application. 4869 4870 The default is `-femit-struct-debug-detailed=all'. 4871 4872 This option works only with DWARF 2. 4873 4874`-fno-merge-debug-strings' 4875 Direct the linker to not merge together strings in the debugging 4876 information that are identical in different object files. Merging 4877 is not supported by all assemblers or linkers. Merging decreases 4878 the size of the debug information in the output file at the cost 4879 of increasing link processing time. Merging is enabled by default. 4880 4881`-fdebug-prefix-map=OLD=NEW' 4882 When compiling files in directory `OLD', record debugging 4883 information describing them as in `NEW' instead. 4884 4885`-fno-dwarf2-cfi-asm' 4886 Emit DWARF 2 unwind info as compiler generated `.eh_frame' section 4887 instead of using GAS `.cfi_*' directives. 4888 4889`-p' 4890 Generate extra code to write profile information suitable for the 4891 analysis program `prof'. You must use this option when compiling 4892 the source files you want data about, and you must also use it when 4893 linking. 4894 4895`-pg' 4896 Generate extra code to write profile information suitable for the 4897 analysis program `gprof'. You must use this option when compiling 4898 the source files you want data about, and you must also use it when 4899 linking. 4900 4901`-Q' 4902 Makes the compiler print out each function name as it is compiled, 4903 and print some statistics about each pass when it finishes. 4904 4905`-ftime-report' 4906 Makes the compiler print some statistics about the time consumed 4907 by each pass when it finishes. 4908 4909`-fmem-report' 4910 Makes the compiler print some statistics about permanent memory 4911 allocation when it finishes. 4912 4913`-fmem-report-wpa' 4914 Makes the compiler print some statistics about permanent memory 4915 allocation for the WPA phase only. 4916 4917`-fpre-ipa-mem-report' 4918 4919`-fpost-ipa-mem-report' 4920 Makes the compiler print some statistics about permanent memory 4921 allocation before or after interprocedural optimization. 4922 4923`-fprofile-report' 4924 Makes the compiler print some statistics about consistency of the 4925 (estimated) profile and effect of individual passes. 4926 4927`-fstack-usage' 4928 Makes the compiler output stack usage information for the program, 4929 on a per-function basis. The filename for the dump is made by 4930 appending `.su' to the AUXNAME. AUXNAME is generated from the 4931 name of the output file, if explicitly specified and it is not an 4932 executable, otherwise it is the basename of the source file. An 4933 entry is made up of three fields: 4934 4935 * The name of the function. 4936 4937 * A number of bytes. 4938 4939 * One or more qualifiers: `static', `dynamic', `bounded'. 4940 4941 The qualifier `static' means that the function manipulates the 4942 stack statically: a fixed number of bytes are allocated for the 4943 frame on function entry and released on function exit; no stack 4944 adjustments are otherwise made in the function. The second field 4945 is this fixed number of bytes. 4946 4947 The qualifier `dynamic' means that the function manipulates the 4948 stack dynamically: in addition to the static allocation described 4949 above, stack adjustments are made in the body of the function, for 4950 example to push/pop arguments around function calls. If the 4951 qualifier `bounded' is also present, the amount of these 4952 adjustments is bounded at compile time and the second field is an 4953 upper bound of the total amount of stack used by the function. If 4954 it is not present, the amount of these adjustments is not bounded 4955 at compile time and the second field only represents the bounded 4956 part. 4957 4958`-fprofile-arcs' 4959 Add code so that program flow "arcs" are instrumented. During 4960 execution the program records how many times each branch and call 4961 is executed and how many times it is taken or returns. When the 4962 compiled program exits it saves this data to a file called 4963 `AUXNAME.gcda' for each source file. The data may be used for 4964 profile-directed optimizations (`-fbranch-probabilities'), or for 4965 test coverage analysis (`-ftest-coverage'). Each object file's 4966 AUXNAME is generated from the name of the output file, if 4967 explicitly specified and it is not the final executable, otherwise 4968 it is the basename of the source file. In both cases any suffix 4969 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 4970 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 4971 *Note Cross-profiling::. 4972 4973`--coverage' 4974 This option is used to compile and link code instrumented for 4975 coverage analysis. The option is a synonym for `-fprofile-arcs' 4976 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 4977 See the documentation for those options for more details. 4978 4979 * Compile the source files with `-fprofile-arcs' plus 4980 optimization and code generation options. For test coverage 4981 analysis, use the additional `-ftest-coverage' option. You 4982 do not need to profile every source file in a program. 4983 4984 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 4985 latter implies the former). 4986 4987 * Run the program on a representative workload to generate the 4988 arc profile information. This may be repeated any number of 4989 times. You can run concurrent instances of your program, and 4990 provided that the file system supports locking, the data 4991 files will be correctly updated. Also `fork' calls are 4992 detected and correctly handled (double counting will not 4993 happen). 4994 4995 * For profile-directed optimizations, compile the source files 4996 again with the same optimization and code generation options 4997 plus `-fbranch-probabilities' (*note Options that Control 4998 Optimization: Optimize Options.). 4999 5000 * For test coverage analysis, use `gcov' to produce human 5001 readable information from the `.gcno' and `.gcda' files. 5002 Refer to the `gcov' documentation for further information. 5003 5004 5005 With `-fprofile-arcs', for each function of your program GCC 5006 creates a program flow graph, then finds a spanning tree for the 5007 graph. Only arcs that are not on the spanning tree have to be 5008 instrumented: the compiler adds code to count the number of times 5009 that these arcs are executed. When an arc is the only exit or 5010 only entrance to a block, the instrumentation code can be added to 5011 the block; otherwise, a new basic block must be created to hold 5012 the instrumentation code. 5013 5014`-ftest-coverage' 5015 Produce a notes file that the `gcov' code-coverage utility (*note 5016 `gcov'--a Test Coverage Program: Gcov.) can use to show program 5017 coverage. Each source file's note file is called `AUXNAME.gcno'. 5018 Refer to the `-fprofile-arcs' option above for a description of 5019 AUXNAME and instructions on how to generate test coverage data. 5020 Coverage data matches the source files more closely if you do not 5021 optimize. 5022 5023`-fdbg-cnt-list' 5024 Print the name and the counter upper bound for all debug counters. 5025 5026`-fdbg-cnt=COUNTER-VALUE-LIST' 5027 Set the internal debug counter upper bound. COUNTER-VALUE-LIST is 5028 a comma-separated list of NAME:VALUE pairs which sets the upper 5029 bound of each debug counter NAME to VALUE. All debug counters 5030 have the initial upper bound of `UINT_MAX'; thus `dbg_cnt()' 5031 returns true always unless the upper bound is set by this option. 5032 For example, with `-fdbg-cnt=dce:10,tail_call:0', `dbg_cnt(dce)' 5033 returns true only for first 10 invocations. 5034 5035`-fenable-KIND-PASS' 5036`-fdisable-KIND-PASS=RANGE-LIST' 5037 This is a set of options that are used to explicitly disable/enable 5038 optimization passes. These options are intended for use for 5039 debugging GCC. Compiler users should use regular options for 5040 enabling/disabling passes instead. 5041 5042 `-fdisable-ipa-PASS' 5043 Disable IPA pass PASS. PASS is the pass name. If the same 5044 pass is statically invoked in the compiler multiple times, 5045 the pass name should be appended with a sequential number 5046 starting from 1. 5047 5048 `-fdisable-rtl-PASS' 5049 `-fdisable-rtl-PASS=RANGE-LIST' 5050 Disable RTL pass PASS. PASS is the pass name. If the same 5051 pass is statically invoked in the compiler multiple times, 5052 the pass name should be appended with a sequential number 5053 starting from 1. RANGE-LIST is a comma-separated list of 5054 function ranges or assembler names. Each range is a number 5055 pair separated by a colon. The range is inclusive in both 5056 ends. If the range is trivial, the number pair can be 5057 simplified as a single number. If the function's call graph 5058 node's UID falls within one of the specified ranges, the PASS 5059 is disabled for that function. The UID is shown in the 5060 function header of a dump file, and the pass names can be 5061 dumped by using option `-fdump-passes'. 5062 5063 `-fdisable-tree-PASS' 5064 `-fdisable-tree-PASS=RANGE-LIST' 5065 Disable tree pass PASS. See `-fdisable-rtl' for the 5066 description of option arguments. 5067 5068 `-fenable-ipa-PASS' 5069 Enable IPA pass PASS. PASS is the pass name. If the same 5070 pass is statically invoked in the compiler multiple times, 5071 the pass name should be appended with a sequential number 5072 starting from 1. 5073 5074 `-fenable-rtl-PASS' 5075 `-fenable-rtl-PASS=RANGE-LIST' 5076 Enable RTL pass PASS. See `-fdisable-rtl' for option argument 5077 description and examples. 5078 5079 `-fenable-tree-PASS' 5080 `-fenable-tree-PASS=RANGE-LIST' 5081 Enable tree pass PASS. See `-fdisable-rtl' for the 5082 description of option arguments. 5083 5084 5085 Here are some examples showing uses of these options. 5086 5087 5088 # disable ccp1 for all functions 5089 -fdisable-tree-ccp1 5090 # disable complete unroll for function whose cgraph node uid is 1 5091 -fenable-tree-cunroll=1 5092 # disable gcse2 for functions at the following ranges [1,1], 5093 # [300,400], and [400,1000] 5094 # disable gcse2 for functions foo and foo2 5095 -fdisable-rtl-gcse2=foo,foo2 5096 # disable early inlining 5097 -fdisable-tree-einline 5098 # disable ipa inlining 5099 -fdisable-ipa-inline 5100 # enable tree full unroll 5101 -fenable-tree-unroll 5102 5103`-dLETTERS' 5104`-fdump-rtl-PASS' 5105`-fdump-rtl-PASS=FILENAME' 5106 Says to make debugging dumps during compilation at times specified 5107 by LETTERS. This is used for debugging the RTL-based passes of the 5108 compiler. The file names for most of the dumps are made by 5109 appending a pass number and a word to the DUMPNAME, and the files 5110 are created in the directory of the output file. In case of 5111 `=FILENAME' option, the dump is output on the given file instead 5112 of the pass numbered dump files. Note that the pass number is 5113 computed statically as passes get registered into the pass manager. 5114 Thus the numbering is not related to the dynamic order of 5115 execution of passes. In particular, a pass installed by a plugin 5116 could have a number over 200 even if it executed quite early. 5117 DUMPNAME is generated from the name of the output file, if 5118 explicitly specified and it is not an executable, otherwise it is 5119 the basename of the source file. These switches may have different 5120 effects when `-E' is used for preprocessing. 5121 5122 Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d' 5123 option LETTERS. Here are the possible letters for use in PASS and 5124 LETTERS, and their meanings: 5125 5126 `-fdump-rtl-alignments' 5127 Dump after branch alignments have been computed. 5128 5129 `-fdump-rtl-asmcons' 5130 Dump after fixing rtl statements that have unsatisfied in/out 5131 constraints. 5132 5133 `-fdump-rtl-auto_inc_dec' 5134 Dump after auto-inc-dec discovery. This pass is only run on 5135 architectures that have auto inc or auto dec instructions. 5136 5137 `-fdump-rtl-barriers' 5138 Dump after cleaning up the barrier instructions. 5139 5140 `-fdump-rtl-bbpart' 5141 Dump after partitioning hot and cold basic blocks. 5142 5143 `-fdump-rtl-bbro' 5144 Dump after block reordering. 5145 5146 `-fdump-rtl-btl1' 5147 `-fdump-rtl-btl2' 5148 `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after 5149 the two branch target load optimization passes. 5150 5151 `-fdump-rtl-bypass' 5152 Dump after jump bypassing and control flow optimizations. 5153 5154 `-fdump-rtl-combine' 5155 Dump after the RTL instruction combination pass. 5156 5157 `-fdump-rtl-compgotos' 5158 Dump after duplicating the computed gotos. 5159 5160 `-fdump-rtl-ce1' 5161 `-fdump-rtl-ce2' 5162 `-fdump-rtl-ce3' 5163 `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3' 5164 enable dumping after the three if conversion passes. 5165 5166 `-fdump-rtl-cprop_hardreg' 5167 Dump after hard register copy propagation. 5168 5169 `-fdump-rtl-csa' 5170 Dump after combining stack adjustments. 5171 5172 `-fdump-rtl-cse1' 5173 `-fdump-rtl-cse2' 5174 `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after 5175 the two common subexpression elimination passes. 5176 5177 `-fdump-rtl-dce' 5178 Dump after the standalone dead code elimination passes. 5179 5180 `-fdump-rtl-dbr' 5181 Dump after delayed branch scheduling. 5182 5183 `-fdump-rtl-dce1' 5184 `-fdump-rtl-dce2' 5185 `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after 5186 the two dead store elimination passes. 5187 5188 `-fdump-rtl-eh' 5189 Dump after finalization of EH handling code. 5190 5191 `-fdump-rtl-eh_ranges' 5192 Dump after conversion of EH handling range regions. 5193 5194 `-fdump-rtl-expand' 5195 Dump after RTL generation. 5196 5197 `-fdump-rtl-fwprop1' 5198 `-fdump-rtl-fwprop2' 5199 `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping 5200 after the two forward propagation passes. 5201 5202 `-fdump-rtl-gcse1' 5203 `-fdump-rtl-gcse2' 5204 `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping 5205 after global common subexpression elimination. 5206 5207 `-fdump-rtl-init-regs' 5208 Dump after the initialization of the registers. 5209 5210 `-fdump-rtl-initvals' 5211 Dump after the computation of the initial value sets. 5212 5213 `-fdump-rtl-into_cfglayout' 5214 Dump after converting to cfglayout mode. 5215 5216 `-fdump-rtl-ira' 5217 Dump after iterated register allocation. 5218 5219 `-fdump-rtl-jump' 5220 Dump after the second jump optimization. 5221 5222 `-fdump-rtl-loop2' 5223 `-fdump-rtl-loop2' enables dumping after the rtl loop 5224 optimization passes. 5225 5226 `-fdump-rtl-mach' 5227 Dump after performing the machine dependent reorganization 5228 pass, if that pass exists. 5229 5230 `-fdump-rtl-mode_sw' 5231 Dump after removing redundant mode switches. 5232 5233 `-fdump-rtl-rnreg' 5234 Dump after register renumbering. 5235 5236 `-fdump-rtl-outof_cfglayout' 5237 Dump after converting from cfglayout mode. 5238 5239 `-fdump-rtl-peephole2' 5240 Dump after the peephole pass. 5241 5242 `-fdump-rtl-postreload' 5243 Dump after post-reload optimizations. 5244 5245 `-fdump-rtl-pro_and_epilogue' 5246 Dump after generating the function prologues and epilogues. 5247 5248 `-fdump-rtl-regmove' 5249 Dump after the register move pass. 5250 5251 `-fdump-rtl-sched1' 5252 `-fdump-rtl-sched2' 5253 `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping 5254 after the basic block scheduling passes. 5255 5256 `-fdump-rtl-see' 5257 Dump after sign extension elimination. 5258 5259 `-fdump-rtl-seqabstr' 5260 Dump after common sequence discovery. 5261 5262 `-fdump-rtl-shorten' 5263 Dump after shortening branches. 5264 5265 `-fdump-rtl-sibling' 5266 Dump after sibling call optimizations. 5267 5268 `-fdump-rtl-split1' 5269 `-fdump-rtl-split2' 5270 `-fdump-rtl-split3' 5271 `-fdump-rtl-split4' 5272 `-fdump-rtl-split5' 5273 `-fdump-rtl-split1', `-fdump-rtl-split2', 5274 `-fdump-rtl-split3', `-fdump-rtl-split4' and 5275 `-fdump-rtl-split5' enable dumping after five rounds of 5276 instruction splitting. 5277 5278 `-fdump-rtl-sms' 5279 Dump after modulo scheduling. This pass is only run on some 5280 architectures. 5281 5282 `-fdump-rtl-stack' 5283 Dump after conversion from GCC's "flat register file" 5284 registers to the x87's stack-like registers. This pass is 5285 only run on x86 variants. 5286 5287 `-fdump-rtl-subreg1' 5288 `-fdump-rtl-subreg2' 5289 `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping 5290 after the two subreg expansion passes. 5291 5292 `-fdump-rtl-unshare' 5293 Dump after all rtl has been unshared. 5294 5295 `-fdump-rtl-vartrack' 5296 Dump after variable tracking. 5297 5298 `-fdump-rtl-vregs' 5299 Dump after converting virtual registers to hard registers. 5300 5301 `-fdump-rtl-web' 5302 Dump after live range splitting. 5303 5304 `-fdump-rtl-regclass' 5305 `-fdump-rtl-subregs_of_mode_init' 5306 `-fdump-rtl-subregs_of_mode_finish' 5307 `-fdump-rtl-dfinit' 5308 `-fdump-rtl-dfinish' 5309 These dumps are defined but always produce empty files. 5310 5311 `-da' 5312 `-fdump-rtl-all' 5313 Produce all the dumps listed above. 5314 5315 `-dA' 5316 Annotate the assembler output with miscellaneous debugging 5317 information. 5318 5319 `-dD' 5320 Dump all macro definitions, at the end of preprocessing, in 5321 addition to normal output. 5322 5323 `-dH' 5324 Produce a core dump whenever an error occurs. 5325 5326 `-dp' 5327 Annotate the assembler output with a comment indicating which 5328 pattern and alternative is used. The length of each 5329 instruction is also printed. 5330 5331 `-dP' 5332 Dump the RTL in the assembler output as a comment before each 5333 instruction. Also turns on `-dp' annotation. 5334 5335 `-dx' 5336 Just generate RTL for a function instead of compiling it. 5337 Usually used with `-fdump-rtl-expand'. 5338 5339`-fdump-noaddr' 5340 When doing debugging dumps, suppress address output. This makes 5341 it more feasible to use diff on debugging dumps for compiler 5342 invocations with different compiler binaries and/or different text 5343 / bss / data / heap / stack / dso start locations. 5344 5345`-fdump-unnumbered' 5346 When doing debugging dumps, suppress instruction numbers and 5347 address output. This makes it more feasible to use diff on 5348 debugging dumps for compiler invocations with different options, 5349 in particular with and without `-g'. 5350 5351`-fdump-unnumbered-links' 5352 When doing debugging dumps (see `-d' option above), suppress 5353 instruction numbers for the links to the previous and next 5354 instructions in a sequence. 5355 5356`-fdump-translation-unit (C++ only)' 5357`-fdump-translation-unit-OPTIONS (C++ only)' 5358 Dump a representation of the tree structure for the entire 5359 translation unit to a file. The file name is made by appending 5360 `.tu' to the source file name, and the file is created in the same 5361 directory as the output file. If the `-OPTIONS' form is used, 5362 OPTIONS controls the details of the dump as described for the 5363 `-fdump-tree' options. 5364 5365`-fdump-class-hierarchy (C++ only)' 5366`-fdump-class-hierarchy-OPTIONS (C++ only)' 5367 Dump a representation of each class's hierarchy and virtual 5368 function table layout to a file. The file name is made by 5369 appending `.class' to the source file name, and the file is 5370 created in the same directory as the output file. If the 5371 `-OPTIONS' form is used, OPTIONS controls the details of the dump 5372 as described for the `-fdump-tree' options. 5373 5374`-fdump-ipa-SWITCH' 5375 Control the dumping at various stages of inter-procedural analysis 5376 language tree to a file. The file name is generated by appending a 5377 switch specific suffix to the source file name, and the file is 5378 created in the same directory as the output file. The following 5379 dumps are possible: 5380 5381 `all' 5382 Enables all inter-procedural analysis dumps. 5383 5384 `cgraph' 5385 Dumps information about call-graph optimization, unused 5386 function removal, and inlining decisions. 5387 5388 `inline' 5389 Dump after function inlining. 5390 5391 5392`-fdump-passes' 5393 Dump the list of optimization passes that are turned on and off by 5394 the current command-line options. 5395 5396`-fdump-statistics-OPTION' 5397 Enable and control dumping of pass statistics in a separate file. 5398 The file name is generated by appending a suffix ending in 5399 `.statistics' to the source file name, and the file is created in 5400 the same directory as the output file. If the `-OPTION' form is 5401 used, `-stats' causes counters to be summed over the whole 5402 compilation unit while `-details' dumps every event as the passes 5403 generate them. The default with no option is to sum counters for 5404 each function compiled. 5405 5406`-fdump-tree-SWITCH' 5407`-fdump-tree-SWITCH-OPTIONS' 5408`-fdump-tree-SWITCH-OPTIONS=FILENAME' 5409 Control the dumping at various stages of processing the 5410 intermediate language tree to a file. The file name is generated 5411 by appending a switch-specific suffix to the source file name, and 5412 the file is created in the same directory as the output file. In 5413 case of `=FILENAME' option, the dump is output on the given file 5414 instead of the auto named dump files. If the `-OPTIONS' form is 5415 used, OPTIONS is a list of `-' separated options which control the 5416 details of the dump. Not all options are applicable to all dumps; 5417 those that are not meaningful are ignored. The following options 5418 are available 5419 5420 `address' 5421 Print the address of each node. Usually this is not 5422 meaningful as it changes according to the environment and 5423 source file. Its primary use is for tying up a dump file 5424 with a debug environment. 5425 5426 `asmname' 5427 If `DECL_ASSEMBLER_NAME' has been set for a given decl, use 5428 that in the dump instead of `DECL_NAME'. Its primary use is 5429 ease of use working backward from mangled names in the 5430 assembly file. 5431 5432 `slim' 5433 When dumping front-end intermediate representations, inhibit 5434 dumping of members of a scope or body of a function merely 5435 because that scope has been reached. Only dump such items 5436 when they are directly reachable by some other path. 5437 5438 When dumping pretty-printed trees, this option inhibits 5439 dumping the bodies of control structures. 5440 5441 When dumping RTL, print the RTL in slim (condensed) form 5442 instead of the default LISP-like representation. 5443 5444 `raw' 5445 Print a raw representation of the tree. By default, trees are 5446 pretty-printed into a C-like representation. 5447 5448 `details' 5449 Enable more detailed dumps (not honored by every dump 5450 option). Also include information from the optimization 5451 passes. 5452 5453 `stats' 5454 Enable dumping various statistics about the pass (not honored 5455 by every dump option). 5456 5457 `blocks' 5458 Enable showing basic block boundaries (disabled in raw dumps). 5459 5460 `graph' 5461 For each of the other indicated dump files 5462 (`-fdump-rtl-PASS'), dump a representation of the control 5463 flow graph suitable for viewing with GraphViz to 5464 `FILE.PASSID.PASS.dot'. Each function in the file is 5465 pretty-printed as a subgraph, so that GraphViz can render them 5466 all in a single plot. 5467 5468 This option currently only works for RTL dumps, and the RTL 5469 is always dumped in slim form. 5470 5471 `vops' 5472 Enable showing virtual operands for every statement. 5473 5474 `lineno' 5475 Enable showing line numbers for statements. 5476 5477 `uid' 5478 Enable showing the unique ID (`DECL_UID') for each variable. 5479 5480 `verbose' 5481 Enable showing the tree dump for each statement. 5482 5483 `eh' 5484 Enable showing the EH region number holding each statement. 5485 5486 `scev' 5487 Enable showing scalar evolution analysis details. 5488 5489 `optimized' 5490 Enable showing optimization information (only available in 5491 certain passes). 5492 5493 `missed' 5494 Enable showing missed optimization information (only 5495 available in certain passes). 5496 5497 `notes' 5498 Enable other detailed optimization information (only 5499 available in certain passes). 5500 5501 `=FILENAME' 5502 Instead of an auto named dump file, output into the given file 5503 name. The file names `stdout' and `stderr' are treated 5504 specially and are considered already open standard streams. 5505 For example, 5506 5507 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump 5508 -fdump-tree-pre=stderr file.c 5509 5510 outputs vectorizer dump into `foo.dump', while the PRE dump is 5511 output on to `stderr'. If two conflicting dump filenames are 5512 given for the same pass, then the latter option overrides the 5513 earlier one. 5514 5515 `all' 5516 Turn on all options, except `raw', `slim', `verbose' and 5517 `lineno'. 5518 5519 `optall' 5520 Turn on all optimization options, i.e., `optimized', 5521 `missed', and `note'. 5522 5523 The following tree dumps are possible: 5524 `original' 5525 Dump before any tree based optimization, to `FILE.original'. 5526 5527 `optimized' 5528 Dump after all tree based optimization, to `FILE.optimized'. 5529 5530 `gimple' 5531 Dump each function before and after the gimplification pass 5532 to a file. The file name is made by appending `.gimple' to 5533 the source file name. 5534 5535 `cfg' 5536 Dump the control flow graph of each function to a file. The 5537 file name is made by appending `.cfg' to the source file name. 5538 5539 `ch' 5540 Dump each function after copying loop headers. The file name 5541 is made by appending `.ch' to the source file name. 5542 5543 `ssa' 5544 Dump SSA related information to a file. The file name is 5545 made by appending `.ssa' to the source file name. 5546 5547 `alias' 5548 Dump aliasing information for each function. The file name 5549 is made by appending `.alias' to the source file name. 5550 5551 `ccp' 5552 Dump each function after CCP. The file name is made by 5553 appending `.ccp' to the source file name. 5554 5555 `storeccp' 5556 Dump each function after STORE-CCP. The file name is made by 5557 appending `.storeccp' to the source file name. 5558 5559 `pre' 5560 Dump trees after partial redundancy elimination. The file 5561 name is made by appending `.pre' to the source file name. 5562 5563 `fre' 5564 Dump trees after full redundancy elimination. The file name 5565 is made by appending `.fre' to the source file name. 5566 5567 `copyprop' 5568 Dump trees after copy propagation. The file name is made by 5569 appending `.copyprop' to the source file name. 5570 5571 `store_copyprop' 5572 Dump trees after store copy-propagation. The file name is 5573 made by appending `.store_copyprop' to the source file name. 5574 5575 `dce' 5576 Dump each function after dead code elimination. The file 5577 name is made by appending `.dce' to the source file name. 5578 5579 `mudflap' 5580 Dump each function after adding mudflap instrumentation. The 5581 file name is made by appending `.mudflap' to the source file 5582 name. 5583 5584 `sra' 5585 Dump each function after performing scalar replacement of 5586 aggregates. The file name is made by appending `.sra' to the 5587 source file name. 5588 5589 `sink' 5590 Dump each function after performing code sinking. The file 5591 name is made by appending `.sink' to the source file name. 5592 5593 `dom' 5594 Dump each function after applying dominator tree 5595 optimizations. The file name is made by appending `.dom' to 5596 the source file name. 5597 5598 `dse' 5599 Dump each function after applying dead store elimination. 5600 The file name is made by appending `.dse' to the source file 5601 name. 5602 5603 `phiopt' 5604 Dump each function after optimizing PHI nodes into 5605 straightline code. The file name is made by appending 5606 `.phiopt' to the source file name. 5607 5608 `forwprop' 5609 Dump each function after forward propagating single use 5610 variables. The file name is made by appending `.forwprop' to 5611 the source file name. 5612 5613 `copyrename' 5614 Dump each function after applying the copy rename 5615 optimization. The file name is made by appending 5616 `.copyrename' to the source file name. 5617 5618 `nrv' 5619 Dump each function after applying the named return value 5620 optimization on generic trees. The file name is made by 5621 appending `.nrv' to the source file name. 5622 5623 `vect' 5624 Dump each function after applying vectorization of loops. 5625 The file name is made by appending `.vect' to the source file 5626 name. 5627 5628 `slp' 5629 Dump each function after applying vectorization of basic 5630 blocks. The file name is made by appending `.slp' to the 5631 source file name. 5632 5633 `vrp' 5634 Dump each function after Value Range Propagation (VRP). The 5635 file name is made by appending `.vrp' to the source file name. 5636 5637 `all' 5638 Enable all the available tree dumps with the flags provided 5639 in this option. 5640 5641`-fopt-info' 5642`-fopt-info-OPTIONS' 5643`-fopt-info-OPTIONS=FILENAME' 5644 Controls optimization dumps from various optimization passes. If 5645 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 5646 options to select the dump details and optimizations. If OPTIONS 5647 is not specified, it defaults to `all' for details and `optall' 5648 for optimization groups. If the FILENAME is not specified, it 5649 defaults to `stderr'. Note that the output FILENAME will be 5650 overwritten in case of multiple translation units. If a combined 5651 output from multiple translation units is desired, `stderr' should 5652 be used instead. 5653 5654 The options can be divided into two groups, 1) options describing 5655 the verbosity of the dump, and 2) options describing which 5656 optimizations should be included. The options from both the groups 5657 can be freely mixed as they are non-overlapping. However, in case 5658 of any conflicts, the latter options override the earlier options 5659 on the command line. Though multiple -fopt-info options are 5660 accepted, only one of them can have `=filename'. If other 5661 filenames are provided then all but the first one are ignored. 5662 5663 The dump verbosity has the following options 5664 5665 `optimized' 5666 Print information when an optimization is successfully 5667 applied. It is up to a pass to decide which information is 5668 relevant. For example, the vectorizer passes print the source 5669 location of loops which got successfully vectorized. 5670 5671 `missed' 5672 Print information about missed optimizations. Individual 5673 passes control which information to include in the output. 5674 For example, 5675 5676 gcc -O2 -ftree-vectorize -fopt-info-vec-missed 5677 5678 will print information about missed optimization 5679 opportunities from vectorization passes on stderr. 5680 5681 `note' 5682 Print verbose information about optimizations, such as certain 5683 transformations, more detailed messages about decisions etc. 5684 5685 `all' 5686 Print detailed optimization information. This includes 5687 OPTIMIZED, MISSED, and NOTE. 5688 5689 The second set of options describes a group of optimizations and 5690 may include one or more of the following. 5691 5692 `ipa' 5693 Enable dumps from all interprocedural optimizations. 5694 5695 `loop' 5696 Enable dumps from all loop optimizations. 5697 5698 `inline' 5699 Enable dumps from all inlining optimizations. 5700 5701 `vec' 5702 Enable dumps from all vectorization optimizations. 5703 5704 For example, 5705 gcc -O3 -fopt-info-missed=missed.all 5706 5707 outputs missed optimization report from all the passes into 5708 `missed.all'. 5709 5710 As another example, 5711 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt 5712 5713 will output information about missed optimizations as well as 5714 optimized locations from all the inlining passes into `inline.txt'. 5715 5716 If the FILENAME is provided, then the dumps from all the 5717 applicable optimizations are concatenated into the `filename'. 5718 Otherwise the dump is output onto `stderr'. If OPTIONS is omitted, 5719 it defaults to `all-optall', which means dump all available 5720 optimization info from all the passes. In the following example, 5721 all optimization info is output on to `stderr'. 5722 5723 gcc -O3 -fopt-info 5724 5725 Note that `-fopt-info-vec-missed' behaves the same as 5726 `-fopt-info-missed-vec'. 5727 5728 As another example, consider 5729 5730 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt 5731 5732 Here the two output filenames `vec.miss' and `loop.opt' are in 5733 conflict since only one output file is allowed. In this case, only 5734 the first option takes effect and the subsequent options are 5735 ignored. Thus only the `vec.miss' is produced which cotaints dumps 5736 from the vectorizer about missed opportunities. 5737 5738`-ftree-vectorizer-verbose=N' 5739 This option is deprecated and is implemented in terms of 5740 `-fopt-info'. Please use `-fopt-info-KIND' form instead, where 5741 KIND is one of the valid opt-info options. It prints additional 5742 optimization information. For N=0 no diagnostic information is 5743 reported. If N=1 the vectorizer reports each loop that got 5744 vectorized, and the total number of loops that got vectorized. If 5745 N=2 the vectorizer reports locations which could not be vectorized 5746 and the reasons for those. For any higher verbosity levels all the 5747 analysis and transformation information from the vectorizer is 5748 reported. 5749 5750 Note that the information output by `-ftree-vectorizer-verbose' 5751 option is sent to `stderr'. If the equivalent form 5752 `-fopt-info-OPTIONS=FILENAME' is used then the output is sent into 5753 FILENAME instead. 5754 5755`-frandom-seed=STRING' 5756 This option provides a seed that GCC uses in place of random 5757 numbers in generating certain symbol names that have to be 5758 different in every compiled file. It is also used to place unique 5759 stamps in coverage data files and the object files that produce 5760 them. You can use the `-frandom-seed' option to produce 5761 reproducibly identical object files. 5762 5763 The STRING should be different for every file you compile. 5764 5765`-fsched-verbose=N' 5766 On targets that use instruction scheduling, this option controls 5767 the amount of debugging output the scheduler prints. This 5768 information is written to standard error, unless 5769 `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which 5770 case it is output to the usual dump listing file, `.sched1' or 5771 `.sched2' respectively. However for N greater than nine, the 5772 output is always printed to standard error. 5773 5774 For N greater than zero, `-fsched-verbose' outputs the same 5775 information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'. For N 5776 greater than one, it also output basic block probabilities, 5777 detailed ready list information and unit/insn info. For N greater 5778 than two, it includes RTL at abort point, control-flow and regions 5779 info. And for N over four, `-fsched-verbose' also includes 5780 dependence info. 5781 5782`-save-temps' 5783`-save-temps=cwd' 5784 Store the usual "temporary" intermediate files permanently; place 5785 them in the current directory and name them based on the source 5786 file. Thus, compiling `foo.c' with `-c -save-temps' produces files 5787 `foo.i' and `foo.s', as well as `foo.o'. This creates a 5788 preprocessed `foo.i' output file even though the compiler now 5789 normally uses an integrated preprocessor. 5790 5791 When used in combination with the `-x' command-line option, 5792 `-save-temps' is sensible enough to avoid over writing an input 5793 source file with the same extension as an intermediate file. The 5794 corresponding intermediate file may be obtained by renaming the 5795 source file before using `-save-temps'. 5796 5797 If you invoke GCC in parallel, compiling several different source 5798 files that share a common base name in different subdirectories or 5799 the same source file compiled for multiple output destinations, it 5800 is likely that the different parallel compilers will interfere 5801 with each other, and overwrite the temporary files. For instance: 5802 5803 gcc -save-temps -o outdir1/foo.o indir1/foo.c& 5804 gcc -save-temps -o outdir2/foo.o indir2/foo.c& 5805 5806 may result in `foo.i' and `foo.o' being written to simultaneously 5807 by both compilers. 5808 5809`-save-temps=obj' 5810 Store the usual "temporary" intermediate files permanently. If the 5811 `-o' option is used, the temporary files are based on the object 5812 file. If the `-o' option is not used, the `-save-temps=obj' 5813 switch behaves like `-save-temps'. 5814 5815 For example: 5816 5817 gcc -save-temps=obj -c foo.c 5818 gcc -save-temps=obj -c bar.c -o dir/xbar.o 5819 gcc -save-temps=obj foobar.c -o dir2/yfoobar 5820 5821 creates `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s', 5822 `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'. 5823 5824`-time[=FILE]' 5825 Report the CPU time taken by each subprocess in the compilation 5826 sequence. For C source files, this is the compiler proper and 5827 assembler (plus the linker if linking is done). 5828 5829 Without the specification of an output file, the output looks like 5830 this: 5831 5832 # cc1 0.12 0.01 5833 # as 0.00 0.01 5834 5835 The first number on each line is the "user time", that is time 5836 spent executing the program itself. The second number is "system 5837 time", time spent executing operating system routines on behalf of 5838 the program. Both numbers are in seconds. 5839 5840 With the specification of an output file, the output is appended 5841 to the named file, and it looks like this: 5842 5843 0.12 0.01 cc1 OPTIONS 5844 0.00 0.01 as OPTIONS 5845 5846 The "user time" and the "system time" are moved before the program 5847 name, and the options passed to the program are displayed, so that 5848 one can later tell what file was being compiled, and with which 5849 options. 5850 5851`-fvar-tracking' 5852 Run variable tracking pass. It computes where variables are 5853 stored at each position in code. Better debugging information is 5854 then generated (if the debugging information format supports this 5855 information). 5856 5857 It is enabled by default when compiling with optimization (`-Os', 5858 `-O', `-O2', ...), debugging information (`-g') and the debug info 5859 format supports it. 5860 5861`-fvar-tracking-assignments' 5862 Annotate assignments to user variables early in the compilation and 5863 attempt to carry the annotations over throughout the compilation 5864 all the way to the end, in an attempt to improve debug information 5865 while optimizing. Use of `-gdwarf-4' is recommended along with it. 5866 5867 It can be enabled even if var-tracking is disabled, in which case 5868 annotations are created and maintained, but discarded at the end. 5869 5870`-fvar-tracking-assignments-toggle' 5871 Toggle `-fvar-tracking-assignments', in the same way that 5872 `-gtoggle' toggles `-g'. 5873 5874`-print-file-name=LIBRARY' 5875 Print the full absolute name of the library file LIBRARY that 5876 would be used when linking--and don't do anything else. With this 5877 option, GCC does not compile or link anything; it just prints the 5878 file name. 5879 5880`-print-multi-directory' 5881 Print the directory name corresponding to the multilib selected by 5882 any other switches present in the command line. This directory is 5883 supposed to exist in `GCC_EXEC_PREFIX'. 5884 5885`-print-multi-lib' 5886 Print the mapping from multilib directory names to compiler 5887 switches that enable them. The directory name is separated from 5888 the switches by `;', and each switch starts with an `@' instead of 5889 the `-', without spaces between multiple switches. This is 5890 supposed to ease shell processing. 5891 5892`-print-multi-os-directory' 5893 Print the path to OS libraries for the selected multilib, relative 5894 to some `lib' subdirectory. If OS libraries are present in the 5895 `lib' subdirectory and no multilibs are used, this is usually just 5896 `.', if OS libraries are present in `libSUFFIX' sibling 5897 directories this prints e.g. `../lib64', `../lib' or `../lib32', 5898 or if OS libraries are present in `lib/SUBDIR' subdirectories it 5899 prints e.g. `amd64', `sparcv9' or `ev6'. 5900 5901`-print-multiarch' 5902 Print the path to OS libraries for the selected multiarch, 5903 relative to some `lib' subdirectory. 5904 5905`-print-prog-name=PROGRAM' 5906 Like `-print-file-name', but searches for a program such as `cpp'. 5907 5908`-print-libgcc-file-name' 5909 Same as `-print-file-name=libgcc.a'. 5910 5911 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 5912 you do want to link with `libgcc.a'. You can do: 5913 5914 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 5915 5916`-print-search-dirs' 5917 Print the name of the configured installation directory and a list 5918 of program and library directories `gcc' searches--and don't do 5919 anything else. 5920 5921 This is useful when `gcc' prints the error message `installation 5922 problem, cannot exec cpp0: No such file or directory'. To resolve 5923 this you either need to put `cpp0' and the other compiler 5924 components where `gcc' expects to find them, or you can set the 5925 environment variable `GCC_EXEC_PREFIX' to the directory where you 5926 installed them. Don't forget the trailing `/'. *Note Environment 5927 Variables::. 5928 5929`-print-sysroot' 5930 Print the target sysroot directory that is used during 5931 compilation. This is the target sysroot specified either at 5932 configure time or using the `--sysroot' option, possibly with an 5933 extra suffix that depends on compilation options. If no target 5934 sysroot is specified, the option prints nothing. 5935 5936`-print-sysroot-headers-suffix' 5937 Print the suffix added to the target sysroot when searching for 5938 headers, or give an error if the compiler is not configured with 5939 such a suffix--and don't do anything else. 5940 5941`-dumpmachine' 5942 Print the compiler's target machine (for example, 5943 `i686-pc-linux-gnu')--and don't do anything else. 5944 5945`-dumpversion' 5946 Print the compiler version (for example, `3.0')--and don't do 5947 anything else. 5948 5949`-dumpspecs' 5950 Print the compiler's built-in specs--and don't do anything else. 5951 (This is used when GCC itself is being built.) *Note Spec Files::. 5952 5953`-fno-eliminate-unused-debug-types' 5954 Normally, when producing DWARF 2 output, GCC avoids producing 5955 debug symbol output for types that are nowhere used in the source 5956 file being compiled. Sometimes it is useful to have GCC emit 5957 debugging information for all types declared in a compilation 5958 unit, regardless of whether or not they are actually used in that 5959 compilation unit, for example if, in the debugger, you want to 5960 cast a value to a type that is not actually used in your program 5961 (but is declared). More often, however, this results in a 5962 significant amount of wasted space. 5963 5964 5965File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 5966 59673.10 Options That Control Optimization 5968====================================== 5969 5970These options control various sorts of optimizations. 5971 5972 Without any optimization option, the compiler's goal is to reduce the 5973cost of compilation and to make debugging produce the expected results. 5974Statements are independent: if you stop the program with a breakpoint 5975between statements, you can then assign a new value to any variable or 5976change the program counter to any other statement in the function and 5977get exactly the results you expect from the source code. 5978 5979 Turning on optimization flags makes the compiler attempt to improve 5980the performance and/or code size at the expense of compilation time and 5981possibly the ability to debug the program. 5982 5983 The compiler performs optimization based on the knowledge it has of the 5984program. Compiling multiple files at once to a single output file mode 5985allows the compiler to use information gained from all of the files 5986when compiling each of them. 5987 5988 Not all optimizations are controlled directly by a flag. Only 5989optimizations that have a flag are listed in this section. 5990 5991 Most optimizations are only enabled if an `-O' level is set on the 5992command line. Otherwise they are disabled, even if individual 5993optimization flags are specified. 5994 5995 Depending on the target and how GCC was configured, a slightly 5996different set of optimizations may be enabled at each `-O' level than 5997those listed here. You can invoke GCC with `-Q --help=optimizers' to 5998find out the exact set of optimizations that are enabled at each level. 5999*Note Overall Options::, for examples. 6000 6001`-O' 6002`-O1' 6003 Optimize. Optimizing compilation takes somewhat more time, and a 6004 lot more memory for a large function. 6005 6006 With `-O', the compiler tries to reduce code size and execution 6007 time, without performing any optimizations that take a great deal 6008 of compilation time. 6009 6010 `-O' turns on the following optimization flags: 6011 -fauto-inc-dec 6012 -fcompare-elim 6013 -fcprop-registers 6014 -fdce 6015 -fdefer-pop 6016 -fdelayed-branch 6017 -fdse 6018 -fguess-branch-probability 6019 -fif-conversion2 6020 -fif-conversion 6021 -fipa-pure-const 6022 -fipa-profile 6023 -fipa-reference 6024 -fmerge-constants 6025 -fsplit-wide-types 6026 -ftree-bit-ccp 6027 -ftree-builtin-call-dce 6028 -ftree-ccp 6029 -ftree-ch 6030 -ftree-copyrename 6031 -ftree-dce 6032 -ftree-dominator-opts 6033 -ftree-dse 6034 -ftree-forwprop 6035 -ftree-fre 6036 -ftree-phiprop 6037 -ftree-slsr 6038 -ftree-sra 6039 -ftree-pta 6040 -ftree-ter 6041 -funit-at-a-time 6042 6043 `-O' also turns on `-fomit-frame-pointer' on machines where doing 6044 so does not interfere with debugging. 6045 6046`-O2' 6047 Optimize even more. GCC performs nearly all supported 6048 optimizations that do not involve a space-speed tradeoff. As 6049 compared to `-O', this option increases both compilation time and 6050 the performance of the generated code. 6051 6052 `-O2' turns on all optimization flags specified by `-O'. It also 6053 turns on the following optimization flags: 6054 -fthread-jumps 6055 -falign-functions -falign-jumps 6056 -falign-loops -falign-labels 6057 -fcaller-saves 6058 -fcrossjumping 6059 -fcse-follow-jumps -fcse-skip-blocks 6060 -fdelete-null-pointer-checks 6061 -fdevirtualize 6062 -fexpensive-optimizations 6063 -fgcse -fgcse-lm 6064 -fhoist-adjacent-loads 6065 -finline-small-functions 6066 -findirect-inlining 6067 -fipa-sra 6068 -foptimize-sibling-calls 6069 -fpartial-inlining 6070 -fpeephole2 6071 -fregmove 6072 -freorder-blocks -freorder-functions 6073 -frerun-cse-after-loop 6074 -fsched-interblock -fsched-spec 6075 -fschedule-insns -fschedule-insns2 6076 -fstrict-aliasing -fstrict-overflow 6077 -ftree-switch-conversion -ftree-tail-merge 6078 -ftree-pre 6079 -ftree-vrp 6080 6081 Please note the warning under `-fgcse' about invoking `-O2' on 6082 programs that use computed gotos. 6083 6084`-O3' 6085 Optimize yet more. `-O3' turns on all optimizations specified by 6086 `-O2' and also turns on the `-finline-functions', 6087 `-funswitch-loops', `-fpredictive-commoning', 6088 `-fgcse-after-reload', `-ftree-vectorize', `-fvect-cost-model', 6089 `-ftree-partial-pre' and `-fipa-cp-clone' options. 6090 6091`-O0' 6092 Reduce compilation time and make debugging produce the expected 6093 results. This is the default. 6094 6095`-Os' 6096 Optimize for size. `-Os' enables all `-O2' optimizations that do 6097 not typically increase code size. It also performs further 6098 optimizations designed to reduce code size. 6099 6100 `-Os' disables the following optimization flags: 6101 -falign-functions -falign-jumps -falign-loops 6102 -falign-labels -freorder-blocks -freorder-blocks-and-partition 6103 -fprefetch-loop-arrays -ftree-vect-loop-version 6104 6105`-Ofast' 6106 Disregard strict standards compliance. `-Ofast' enables all `-O3' 6107 optimizations. It also enables optimizations that are not valid 6108 for all standard-compliant programs. It turns on `-ffast-math' 6109 and the Fortran-specific `-fno-protect-parens' and 6110 `-fstack-arrays'. 6111 6112`-Og' 6113 Optimize debugging experience. `-Og' enables optimizations that 6114 do not interfere with debugging. It should be the optimization 6115 level of choice for the standard edit-compile-debug cycle, offering 6116 a reasonable level of optimization while maintaining fast 6117 compilation and a good debugging experience. 6118 6119 If you use multiple `-O' options, with or without level numbers, 6120 the last such option is the one that is effective. 6121 6122 Options of the form `-fFLAG' specify machine-independent flags. Most 6123flags have both positive and negative forms; the negative form of 6124`-ffoo' is `-fno-foo'. In the table below, only one of the forms is 6125listed--the one you typically use. You can figure out the other form 6126by either removing `no-' or adding it. 6127 6128 The following options control specific optimizations. They are either 6129activated by `-O' options or are related to ones that are. You can use 6130the following flags in the rare cases when "fine-tuning" of 6131optimizations to be performed is desired. 6132 6133`-fno-default-inline' 6134 Do not make member functions inline by default merely because they 6135 are defined inside the class scope (C++ only). Otherwise, when 6136 you specify `-O', member functions defined inside class scope are 6137 compiled inline by default; i.e., you don't need to add `inline' 6138 in front of the member function name. 6139 6140`-fno-defer-pop' 6141 Always pop the arguments to each function call as soon as that 6142 function returns. For machines that must pop arguments after a 6143 function call, the compiler normally lets arguments accumulate on 6144 the stack for several function calls and pops them all at once. 6145 6146 Disabled at levels `-O', `-O2', `-O3', `-Os'. 6147 6148`-fforward-propagate' 6149 Perform a forward propagation pass on RTL. The pass tries to 6150 combine two instructions and checks if the result can be 6151 simplified. If loop unrolling is active, two passes are performed 6152 and the second is scheduled after loop unrolling. 6153 6154 This option is enabled by default at optimization levels `-O', 6155 `-O2', `-O3', `-Os'. 6156 6157`-ffp-contract=STYLE' 6158 `-ffp-contract=off' disables floating-point expression contraction. 6159 `-ffp-contract=fast' enables floating-point expression contraction 6160 such as forming of fused multiply-add operations if the target has 6161 native support for them. `-ffp-contract=on' enables 6162 floating-point expression contraction if allowed by the language 6163 standard. This is currently not implemented and treated equal to 6164 `-ffp-contract=off'. 6165 6166 The default is `-ffp-contract=fast'. 6167 6168`-fomit-frame-pointer' 6169 Don't keep the frame pointer in a register for functions that 6170 don't need one. This avoids the instructions to save, set up and 6171 restore frame pointers; it also makes an extra register available 6172 in many functions. *It also makes debugging impossible on some 6173 machines.* 6174 6175 On some machines, such as the VAX, this flag has no effect, because 6176 the standard calling sequence automatically handles the frame 6177 pointer and nothing is saved by pretending it doesn't exist. The 6178 machine-description macro `FRAME_POINTER_REQUIRED' controls 6179 whether a target machine supports this flag. *Note Register 6180 Usage: (gccint)Registers. 6181 6182 Starting with GCC version 4.6, the default setting (when not 6183 optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin 6184 x86 targets has been changed to `-fomit-frame-pointer'. The 6185 default can be reverted to `-fno-omit-frame-pointer' by 6186 configuring GCC with the `--enable-frame-pointer' configure option. 6187 6188 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6189 6190`-foptimize-sibling-calls' 6191 Optimize sibling and tail recursive calls. 6192 6193 Enabled at levels `-O2', `-O3', `-Os'. 6194 6195`-fno-inline' 6196 Do not expand any functions inline apart from those marked with 6197 the `always_inline' attribute. This is the default when not 6198 optimizing. 6199 6200 Single functions can be exempted from inlining by marking them 6201 with the `noinline' attribute. 6202 6203`-finline-small-functions' 6204 Integrate functions into their callers when their body is smaller 6205 than expected function call code (so overall size of program gets 6206 smaller). The compiler heuristically decides which functions are 6207 simple enough to be worth integrating in this way. This inlining 6208 applies to all functions, even those not declared inline. 6209 6210 Enabled at level `-O2'. 6211 6212`-findirect-inlining' 6213 Inline also indirect calls that are discovered to be known at 6214 compile time thanks to previous inlining. This option has any 6215 effect only when inlining itself is turned on by the 6216 `-finline-functions' or `-finline-small-functions' options. 6217 6218 Enabled at level `-O2'. 6219 6220`-finline-functions' 6221 Consider all functions for inlining, even if they are not declared 6222 inline. The compiler heuristically decides which functions are 6223 worth integrating in this way. 6224 6225 If all calls to a given function are integrated, and the function 6226 is declared `static', then the function is normally not output as 6227 assembler code in its own right. 6228 6229 Enabled at level `-O3'. 6230 6231`-finline-functions-called-once' 6232 Consider all `static' functions called once for inlining into their 6233 caller even if they are not marked `inline'. If a call to a given 6234 function is integrated, then the function is not output as 6235 assembler code in its own right. 6236 6237 Enabled at levels `-O1', `-O2', `-O3' and `-Os'. 6238 6239`-fearly-inlining' 6240 Inline functions marked by `always_inline' and functions whose 6241 body seems smaller than the function call overhead early before 6242 doing `-fprofile-generate' instrumentation and real inlining pass. 6243 Doing so makes profiling significantly cheaper and usually 6244 inlining faster on programs having large chains of nested wrapper 6245 functions. 6246 6247 Enabled by default. 6248 6249`-fipa-sra' 6250 Perform interprocedural scalar replacement of aggregates, removal 6251 of unused parameters and replacement of parameters passed by 6252 reference by parameters passed by value. 6253 6254 Enabled at levels `-O2', `-O3' and `-Os'. 6255 6256`-finline-limit=N' 6257 By default, GCC limits the size of functions that can be inlined. 6258 This flag allows coarse control of this limit. N is the size of 6259 functions that can be inlined in number of pseudo instructions. 6260 6261 Inlining is actually controlled by a number of parameters, which 6262 may be specified individually by using `--param NAME=VALUE'. The 6263 `-finline-limit=N' option sets some of these parameters as follows: 6264 6265 `max-inline-insns-single' 6266 is set to N/2. 6267 6268 `max-inline-insns-auto' 6269 is set to N/2. 6270 6271 See below for a documentation of the individual parameters 6272 controlling inlining and for the defaults of these parameters. 6273 6274 _Note:_ there may be no value to `-finline-limit' that results in 6275 default behavior. 6276 6277 _Note:_ pseudo instruction represents, in this particular context, 6278 an abstract measurement of function's size. In no way does it 6279 represent a count of assembly instructions and as such its exact 6280 meaning might change from one release to an another. 6281 6282`-fno-keep-inline-dllexport' 6283 This is a more fine-grained version of `-fkeep-inline-functions', 6284 which applies only to functions that are declared using the 6285 `dllexport' attribute or declspec (*Note Declaring Attributes of 6286 Functions: Function Attributes.) 6287 6288`-fkeep-inline-functions' 6289 In C, emit `static' functions that are declared `inline' into the 6290 object file, even if the function has been inlined into all of its 6291 callers. This switch does not affect functions using the `extern 6292 inline' extension in GNU C90. In C++, emit any and all inline 6293 functions into the object file. 6294 6295`-fkeep-static-consts' 6296 Emit variables declared `static const' when optimization isn't 6297 turned on, even if the variables aren't referenced. 6298 6299 GCC enables this option by default. If you want to force the 6300 compiler to check if a variable is referenced, regardless of 6301 whether or not optimization is turned on, use the 6302 `-fno-keep-static-consts' option. 6303 6304`-fmerge-constants' 6305 Attempt to merge identical constants (string constants and 6306 floating-point constants) across compilation units. 6307 6308 This option is the default for optimized compilation if the 6309 assembler and linker support it. Use `-fno-merge-constants' to 6310 inhibit this behavior. 6311 6312 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6313 6314`-fmerge-all-constants' 6315 Attempt to merge identical constants and identical variables. 6316 6317 This option implies `-fmerge-constants'. In addition to 6318 `-fmerge-constants' this considers e.g. even constant initialized 6319 arrays or initialized constant variables with integral or 6320 floating-point types. Languages like C or C++ require each 6321 variable, including multiple instances of the same variable in 6322 recursive calls, to have distinct locations, so using this option 6323 results in non-conforming behavior. 6324 6325`-fmodulo-sched' 6326 Perform swing modulo scheduling immediately before the first 6327 scheduling pass. This pass looks at innermost loops and reorders 6328 their instructions by overlapping different iterations. 6329 6330`-fmodulo-sched-allow-regmoves' 6331 Perform more aggressive SMS-based modulo scheduling with register 6332 moves allowed. By setting this flag certain anti-dependences 6333 edges are deleted, which triggers the generation of reg-moves 6334 based on the life-range analysis. This option is effective only 6335 with `-fmodulo-sched' enabled. 6336 6337`-fno-branch-count-reg' 6338 Do not use "decrement and branch" instructions on a count register, 6339 but instead generate a sequence of instructions that decrement a 6340 register, compare it against zero, then branch based upon the 6341 result. This option is only meaningful on architectures that 6342 support such instructions, which include x86, PowerPC, IA-64 and 6343 S/390. 6344 6345 The default is `-fbranch-count-reg'. 6346 6347`-fno-function-cse' 6348 Do not put function addresses in registers; make each instruction 6349 that calls a constant function contain the function's address 6350 explicitly. 6351 6352 This option results in less efficient code, but some strange hacks 6353 that alter the assembler output may be confused by the 6354 optimizations performed when this option is not used. 6355 6356 The default is `-ffunction-cse' 6357 6358`-fno-zero-initialized-in-bss' 6359 If the target supports a BSS section, GCC by default puts 6360 variables that are initialized to zero into BSS. This can save 6361 space in the resulting code. 6362 6363 This option turns off this behavior because some programs 6364 explicitly rely on variables going to the data section--e.g., so 6365 that the resulting executable can find the beginning of that 6366 section and/or make assumptions based on that. 6367 6368 The default is `-fzero-initialized-in-bss'. 6369 6370`-fmudflap -fmudflapth -fmudflapir' 6371 For front-ends that support it (C and C++), instrument all risky 6372 pointer/array dereferencing operations, some standard library 6373 string/heap functions, and some other associated constructs with 6374 range/validity tests. Modules so instrumented should be immune to 6375 buffer overflows, invalid heap use, and some other classes of C/C++ 6376 programming errors. The instrumentation relies on a separate 6377 runtime library (`libmudflap'), which is linked into a program if 6378 `-fmudflap' is given at link time. Run-time behavior of the 6379 instrumented program is controlled by the `MUDFLAP_OPTIONS' 6380 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 6381 its options. 6382 6383 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 6384 your program is multi-threaded. Use `-fmudflapir', in addition to 6385 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 6386 pointer reads. This produces less instrumentation (and therefore 6387 faster execution) and still provides some protection against 6388 outright memory corrupting writes, but allows erroneously read 6389 data to propagate within a program. 6390 6391`-fthread-jumps' 6392 Perform optimizations that check to see if a jump branches to a 6393 location where another comparison subsumed by the first is found. 6394 If so, the first branch is redirected to either the destination of 6395 the second branch or a point immediately following it, depending 6396 on whether the condition is known to be true or false. 6397 6398 Enabled at levels `-O2', `-O3', `-Os'. 6399 6400`-fsplit-wide-types' 6401 When using a type that occupies multiple registers, such as `long 6402 long' on a 32-bit system, split the registers apart and allocate 6403 them independently. This normally generates better code for those 6404 types, but may make debugging more difficult. 6405 6406 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6407 6408`-fcse-follow-jumps' 6409 In common subexpression elimination (CSE), scan through jump 6410 instructions when the target of the jump is not reached by any 6411 other path. For example, when CSE encounters an `if' statement 6412 with an `else' clause, CSE follows the jump when the condition 6413 tested is false. 6414 6415 Enabled at levels `-O2', `-O3', `-Os'. 6416 6417`-fcse-skip-blocks' 6418 This is similar to `-fcse-follow-jumps', but causes CSE to follow 6419 jumps that conditionally skip over blocks. When CSE encounters a 6420 simple `if' statement with no else clause, `-fcse-skip-blocks' 6421 causes CSE to follow the jump around the body of the `if'. 6422 6423 Enabled at levels `-O2', `-O3', `-Os'. 6424 6425`-frerun-cse-after-loop' 6426 Re-run common subexpression elimination after loop optimizations 6427 are performed. 6428 6429 Enabled at levels `-O2', `-O3', `-Os'. 6430 6431`-fgcse' 6432 Perform a global common subexpression elimination pass. This pass 6433 also performs global constant and copy propagation. 6434 6435 _Note:_ When compiling a program using computed gotos, a GCC 6436 extension, you may get better run-time performance if you disable 6437 the global common subexpression elimination pass by adding 6438 `-fno-gcse' to the command line. 6439 6440 Enabled at levels `-O2', `-O3', `-Os'. 6441 6442`-fgcse-lm' 6443 When `-fgcse-lm' is enabled, global common subexpression 6444 elimination attempts to move loads that are only killed by stores 6445 into themselves. This allows a loop containing a load/store 6446 sequence to be changed to a load outside the loop, and a 6447 copy/store within the loop. 6448 6449 Enabled by default when `-fgcse' is enabled. 6450 6451`-fgcse-sm' 6452 When `-fgcse-sm' is enabled, a store motion pass is run after 6453 global common subexpression elimination. This pass attempts to 6454 move stores out of loops. When used in conjunction with 6455 `-fgcse-lm', loops containing a load/store sequence can be changed 6456 to a load before the loop and a store after the loop. 6457 6458 Not enabled at any optimization level. 6459 6460`-fgcse-las' 6461 When `-fgcse-las' is enabled, the global common subexpression 6462 elimination pass eliminates redundant loads that come after stores 6463 to the same memory location (both partial and full redundancies). 6464 6465 Not enabled at any optimization level. 6466 6467`-fgcse-after-reload' 6468 When `-fgcse-after-reload' is enabled, a redundant load elimination 6469 pass is performed after reload. The purpose of this pass is to 6470 clean up redundant spilling. 6471 6472`-faggressive-loop-optimizations' 6473 This option tells the loop optimizer to use language constraints to 6474 derive bounds for the number of iterations of a loop. This 6475 assumes that loop code does not invoke undefined behavior by for 6476 example causing signed integer overflows or out-of-bound array 6477 accesses. The bounds for the number of iterations of a loop are 6478 used to guide loop unrolling and peeling and loop exit test 6479 optimizations. This option is enabled by default. 6480 6481`-funsafe-loop-optimizations' 6482 This option tells the loop optimizer to assume that loop indices 6483 do not overflow, and that loops with nontrivial exit condition are 6484 not infinite. This enables a wider range of loop optimizations 6485 even if the loop optimizer itself cannot prove that these 6486 assumptions are valid. If you use `-Wunsafe-loop-optimizations', 6487 the compiler warns you if it finds this kind of loop. 6488 6489`-fcrossjumping' 6490 Perform cross-jumping transformation. This transformation unifies 6491 equivalent code and saves code size. The resulting code may or 6492 may not perform better than without cross-jumping. 6493 6494 Enabled at levels `-O2', `-O3', `-Os'. 6495 6496`-fauto-inc-dec' 6497 Combine increments or decrements of addresses with memory accesses. 6498 This pass is always skipped on architectures that do not have 6499 instructions to support this. Enabled by default at `-O' and 6500 higher on architectures that support this. 6501 6502`-fdce' 6503 Perform dead code elimination (DCE) on RTL. Enabled by default at 6504 `-O' and higher. 6505 6506`-fdse' 6507 Perform dead store elimination (DSE) on RTL. Enabled by default 6508 at `-O' and higher. 6509 6510`-fif-conversion' 6511 Attempt to transform conditional jumps into branch-less 6512 equivalents. This includes use of conditional moves, min, max, 6513 set flags and abs instructions, and some tricks doable by standard 6514 arithmetics. The use of conditional execution on chips where it 6515 is available is controlled by `if-conversion2'. 6516 6517 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6518 6519`-fif-conversion2' 6520 Use conditional execution (where available) to transform 6521 conditional jumps into branch-less equivalents. 6522 6523 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6524 6525`-fdelete-null-pointer-checks' 6526 Assume that programs cannot safely dereference null pointers, and 6527 that no code or data element resides there. This enables simple 6528 constant folding optimizations at all optimization levels. In 6529 addition, other optimization passes in GCC use this flag to 6530 control global dataflow analyses that eliminate useless checks for 6531 null pointers; these assume that if a pointer is checked after it 6532 has already been dereferenced, it cannot be null. 6533 6534 Note however that in some environments this assumption is not true. 6535 Use `-fno-delete-null-pointer-checks' to disable this optimization 6536 for programs that depend on that behavior. 6537 6538 Some targets, especially embedded ones, disable this option at all 6539 levels. Otherwise it is enabled at all levels: `-O0', `-O1', 6540 `-O2', `-O3', `-Os'. Passes that use the information are enabled 6541 independently at different optimization levels. 6542 6543`-fdevirtualize' 6544 Attempt to convert calls to virtual functions to direct calls. 6545 This is done both within a procedure and interprocedurally as part 6546 of indirect inlining (`-findirect-inlining') and interprocedural 6547 constant propagation (`-fipa-cp'). Enabled at levels `-O2', 6548 `-O3', `-Os'. 6549 6550`-fexpensive-optimizations' 6551 Perform a number of minor optimizations that are relatively 6552 expensive. 6553 6554 Enabled at levels `-O2', `-O3', `-Os'. 6555 6556`-free' 6557 Attempt to remove redundant extension instructions. This is 6558 especially helpful for the x86-64 architecture, which implicitly 6559 zero-extends in 64-bit registers after writing to their lower 6560 32-bit half. 6561 6562 Enabled for x86 at levels `-O2', `-O3'. 6563 6564`-foptimize-register-move' 6565`-fregmove' 6566 Attempt to reassign register numbers in move instructions and as 6567 operands of other simple instructions in order to maximize the 6568 amount of register tying. This is especially helpful on machines 6569 with two-operand instructions. 6570 6571 Note `-fregmove' and `-foptimize-register-move' are the same 6572 optimization. 6573 6574 Enabled at levels `-O2', `-O3', `-Os'. 6575 6576`-fira-algorithm=ALGORITHM' 6577 Use the specified coloring algorithm for the integrated register 6578 allocator. The ALGORITHM argument can be `priority', which 6579 specifies Chow's priority coloring, or `CB', which specifies 6580 Chaitin-Briggs coloring. Chaitin-Briggs coloring is not 6581 implemented for all architectures, but for those targets that do 6582 support it, it is the default because it generates better code. 6583 6584`-fira-region=REGION' 6585 Use specified regions for the integrated register allocator. The 6586 REGION argument should be one of the following: 6587 6588 `all' 6589 Use all loops as register allocation regions. This can give 6590 the best results for machines with a small and/or irregular 6591 register set. 6592 6593 `mixed' 6594 Use all loops except for loops with small register pressure 6595 as the regions. This value usually gives the best results in 6596 most cases and for most architectures, and is enabled by 6597 default when compiling with optimization for speed (`-O', 6598 `-O2', ...). 6599 6600 `one' 6601 Use all functions as a single region. This typically results 6602 in the smallest code size, and is enabled by default for 6603 `-Os' or `-O0'. 6604 6605 6606`-fira-hoist-pressure' 6607 Use IRA to evaluate register pressure in the code hoisting pass for 6608 decisions to hoist expressions. This option usually results in 6609 smaller code, but it can slow the compiler down. 6610 6611 This option is enabled at level `-Os' for all targets. 6612 6613`-fira-loop-pressure' 6614 Use IRA to evaluate register pressure in loops for decisions to 6615 move loop invariants. This option usually results in generation 6616 of faster and smaller code on machines with large register files 6617 (>= 32 registers), but it can slow the compiler down. 6618 6619 This option is enabled at level `-O3' for some targets. 6620 6621`-fno-ira-share-save-slots' 6622 Disable sharing of stack slots used for saving call-used hard 6623 registers living through a call. Each hard register gets a 6624 separate stack slot, and as a result function stack frames are 6625 larger. 6626 6627`-fno-ira-share-spill-slots' 6628 Disable sharing of stack slots allocated for pseudo-registers. 6629 Each pseudo-register that does not get a hard register gets a 6630 separate stack slot, and as a result function stack frames are 6631 larger. 6632 6633`-fira-verbose=N' 6634 Control the verbosity of the dump file for the integrated register 6635 allocator. The default value is 5. If the value N is greater or 6636 equal to 10, the dump output is sent to stderr using the same 6637 format as N minus 10. 6638 6639`-fdelayed-branch' 6640 If supported for the target machine, attempt to reorder 6641 instructions to exploit instruction slots available after delayed 6642 branch instructions. 6643 6644 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6645 6646`-fschedule-insns' 6647 If supported for the target machine, attempt to reorder 6648 instructions to eliminate execution stalls due to required data 6649 being unavailable. This helps machines that have slow floating 6650 point or memory load instructions by allowing other instructions 6651 to be issued until the result of the load or floating-point 6652 instruction is required. 6653 6654 Enabled at levels `-O2', `-O3'. 6655 6656`-fschedule-insns2' 6657 Similar to `-fschedule-insns', but requests an additional pass of 6658 instruction scheduling after register allocation has been done. 6659 This is especially useful on machines with a relatively small 6660 number of registers and where memory load instructions take more 6661 than one cycle. 6662 6663 Enabled at levels `-O2', `-O3', `-Os'. 6664 6665`-fno-sched-interblock' 6666 Don't schedule instructions across basic blocks. This is normally 6667 enabled by default when scheduling before register allocation, i.e. 6668 with `-fschedule-insns' or at `-O2' or higher. 6669 6670`-fno-sched-spec' 6671 Don't allow speculative motion of non-load instructions. This is 6672 normally enabled by default when scheduling before register 6673 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 6674 6675`-fsched-pressure' 6676 Enable register pressure sensitive insn scheduling before register 6677 allocation. This only makes sense when scheduling before register 6678 allocation is enabled, i.e. with `-fschedule-insns' or at `-O2' or 6679 higher. Usage of this option can improve the generated code and 6680 decrease its size by preventing register pressure increase above 6681 the number of available hard registers and subsequent spills in 6682 register allocation. 6683 6684`-fsched-spec-load' 6685 Allow speculative motion of some load instructions. This only 6686 makes sense when scheduling before register allocation, i.e. with 6687 `-fschedule-insns' or at `-O2' or higher. 6688 6689`-fsched-spec-load-dangerous' 6690 Allow speculative motion of more load instructions. This only 6691 makes sense when scheduling before register allocation, i.e. with 6692 `-fschedule-insns' or at `-O2' or higher. 6693 6694`-fsched-stalled-insns' 6695`-fsched-stalled-insns=N' 6696 Define how many insns (if any) can be moved prematurely from the 6697 queue of stalled insns into the ready list during the second 6698 scheduling pass. `-fno-sched-stalled-insns' means that no insns 6699 are moved prematurely, `-fsched-stalled-insns=0' means there is no 6700 limit on how many queued insns can be moved prematurely. 6701 `-fsched-stalled-insns' without a value is equivalent to 6702 `-fsched-stalled-insns=1'. 6703 6704`-fsched-stalled-insns-dep' 6705`-fsched-stalled-insns-dep=N' 6706 Define how many insn groups (cycles) are examined for a dependency 6707 on a stalled insn that is a candidate for premature removal from 6708 the queue of stalled insns. This has an effect only during the 6709 second scheduling pass, and only if `-fsched-stalled-insns' is 6710 used. `-fno-sched-stalled-insns-dep' is equivalent to 6711 `-fsched-stalled-insns-dep=0'. `-fsched-stalled-insns-dep' 6712 without a value is equivalent to `-fsched-stalled-insns-dep=1'. 6713 6714`-fsched2-use-superblocks' 6715 When scheduling after register allocation, use superblock 6716 scheduling. This allows motion across basic block boundaries, 6717 resulting in faster schedules. This option is experimental, as 6718 not all machine descriptions used by GCC model the CPU closely 6719 enough to avoid unreliable results from the algorithm. 6720 6721 This only makes sense when scheduling after register allocation, 6722 i.e. with `-fschedule-insns2' or at `-O2' or higher. 6723 6724`-fsched-group-heuristic' 6725 Enable the group heuristic in the scheduler. This heuristic favors 6726 the instruction that belongs to a schedule group. This is enabled 6727 by default when scheduling is enabled, i.e. with `-fschedule-insns' 6728 or `-fschedule-insns2' or at `-O2' or higher. 6729 6730`-fsched-critical-path-heuristic' 6731 Enable the critical-path heuristic in the scheduler. This 6732 heuristic favors instructions on the critical path. This is 6733 enabled by default when scheduling is enabled, i.e. with 6734 `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher. 6735 6736`-fsched-spec-insn-heuristic' 6737 Enable the speculative instruction heuristic in the scheduler. 6738 This heuristic favors speculative instructions with greater 6739 dependency weakness. This is enabled by default when scheduling 6740 is enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' 6741 or at `-O2' or higher. 6742 6743`-fsched-rank-heuristic' 6744 Enable the rank heuristic in the scheduler. This heuristic favors 6745 the instruction belonging to a basic block with greater size or 6746 frequency. This is enabled by default when scheduling is enabled, 6747 i.e. with `-fschedule-insns' or `-fschedule-insns2' or at `-O2' 6748 or higher. 6749 6750`-fsched-last-insn-heuristic' 6751 Enable the last-instruction heuristic in the scheduler. This 6752 heuristic favors the instruction that is less dependent on the 6753 last instruction scheduled. This is enabled by default when 6754 scheduling is enabled, i.e. with `-fschedule-insns' or 6755 `-fschedule-insns2' or at `-O2' or higher. 6756 6757`-fsched-dep-count-heuristic' 6758 Enable the dependent-count heuristic in the scheduler. This 6759 heuristic favors the instruction that has more instructions 6760 depending on it. This is enabled by default when scheduling is 6761 enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' or 6762 at `-O2' or higher. 6763 6764`-freschedule-modulo-scheduled-loops' 6765 Modulo scheduling is performed before traditional scheduling. If 6766 a loop is modulo scheduled, later scheduling passes may change its 6767 schedule. Use this option to control that behavior. 6768 6769`-fselective-scheduling' 6770 Schedule instructions using selective scheduling algorithm. 6771 Selective scheduling runs instead of the first scheduler pass. 6772 6773`-fselective-scheduling2' 6774 Schedule instructions using selective scheduling algorithm. 6775 Selective scheduling runs instead of the second scheduler pass. 6776 6777`-fsel-sched-pipelining' 6778 Enable software pipelining of innermost loops during selective 6779 scheduling. This option has no effect unless one of 6780 `-fselective-scheduling' or `-fselective-scheduling2' is turned on. 6781 6782`-fsel-sched-pipelining-outer-loops' 6783 When pipelining loops during selective scheduling, also pipeline 6784 outer loops. This option has no effect unless 6785 `-fsel-sched-pipelining' is turned on. 6786 6787`-fshrink-wrap' 6788 Emit function prologues only before parts of the function that 6789 need it, rather than at the top of the function. This flag is 6790 enabled by default at `-O' and higher. 6791 6792`-fcaller-saves' 6793 Enable allocation of values to registers that are clobbered by 6794 function calls, by emitting extra instructions to save and restore 6795 the registers around such calls. Such allocation is done only 6796 when it seems to result in better code. 6797 6798 This option is always enabled by default on certain machines, 6799 usually those which have no call-preserved registers to use 6800 instead. 6801 6802 Enabled at levels `-O2', `-O3', `-Os'. 6803 6804`-fcombine-stack-adjustments' 6805 Tracks stack adjustments (pushes and pops) and stack memory 6806 references and then tries to find ways to combine them. 6807 6808 Enabled by default at `-O1' and higher. 6809 6810`-fconserve-stack' 6811 Attempt to minimize stack usage. The compiler attempts to use less 6812 stack space, even if that makes the program slower. This option 6813 implies setting the `large-stack-frame' parameter to 100 and the 6814 `large-stack-frame-growth' parameter to 400. 6815 6816`-ftree-reassoc' 6817 Perform reassociation on trees. This flag is enabled by default 6818 at `-O' and higher. 6819 6820`-ftree-pre' 6821 Perform partial redundancy elimination (PRE) on trees. This flag 6822 is enabled by default at `-O2' and `-O3'. 6823 6824`-ftree-partial-pre' 6825 Make partial redundancy elimination (PRE) more aggressive. This 6826 flag is enabled by default at `-O3'. 6827 6828`-ftree-forwprop' 6829 Perform forward propagation on trees. This flag is enabled by 6830 default at `-O' and higher. 6831 6832`-ftree-fre' 6833 Perform full redundancy elimination (FRE) on trees. The difference 6834 between FRE and PRE is that FRE only considers expressions that 6835 are computed on all paths leading to the redundant computation. 6836 This analysis is faster than PRE, though it exposes fewer 6837 redundancies. This flag is enabled by default at `-O' and higher. 6838 6839`-ftree-phiprop' 6840 Perform hoisting of loads from conditional pointers on trees. This 6841 pass is enabled by default at `-O' and higher. 6842 6843`-fhoist-adjacent-loads' 6844 Speculatively hoist loads from both branches of an if-then-else if 6845 the loads are from adjacent locations in the same structure and 6846 the target architecture has a conditional move instruction. This 6847 flag is enabled by default at `-O2' and higher. 6848 6849`-ftree-copy-prop' 6850 Perform copy propagation on trees. This pass eliminates 6851 unnecessary copy operations. This flag is enabled by default at 6852 `-O' and higher. 6853 6854`-fipa-pure-const' 6855 Discover which functions are pure or constant. Enabled by default 6856 at `-O' and higher. 6857 6858`-fipa-reference' 6859 Discover which static variables do not escape the compilation unit. 6860 Enabled by default at `-O' and higher. 6861 6862`-fipa-pta' 6863 Perform interprocedural pointer analysis and interprocedural 6864 modification and reference analysis. This option can cause 6865 excessive memory and compile-time usage on large compilation 6866 units. It is not enabled by default at any optimization level. 6867 6868`-fipa-profile' 6869 Perform interprocedural profile propagation. The functions called 6870 only from cold functions are marked as cold. Also functions 6871 executed once (such as `cold', `noreturn', static constructors or 6872 destructors) are identified. Cold functions and loop less parts of 6873 functions executed once are then optimized for size. Enabled by 6874 default at `-O' and higher. 6875 6876`-fipa-cp' 6877 Perform interprocedural constant propagation. This optimization 6878 analyzes the program to determine when values passed to functions 6879 are constants and then optimizes accordingly. This optimization 6880 can substantially increase performance if the application has 6881 constants passed to functions. This flag is enabled by default at 6882 `-O2', `-Os' and `-O3'. 6883 6884`-fipa-cp-clone' 6885 Perform function cloning to make interprocedural constant 6886 propagation stronger. When enabled, interprocedural constant 6887 propagation performs function cloning when externally visible 6888 function can be called with constant arguments. Because this 6889 optimization can create multiple copies of functions, it may 6890 significantly increase code size (see `--param 6891 ipcp-unit-growth=VALUE'). This flag is enabled by default at 6892 `-O3'. 6893 6894`-ftree-sink' 6895 Perform forward store motion on trees. This flag is enabled by 6896 default at `-O' and higher. 6897 6898`-ftree-bit-ccp' 6899 Perform sparse conditional bit constant propagation on trees and 6900 propagate pointer alignment information. This pass only operates 6901 on local scalar variables and is enabled by default at `-O' and 6902 higher. It requires that `-ftree-ccp' is enabled. 6903 6904`-ftree-ccp' 6905 Perform sparse conditional constant propagation (CCP) on trees. 6906 This pass only operates on local scalar variables and is enabled 6907 by default at `-O' and higher. 6908 6909`-ftree-switch-conversion' 6910 Perform conversion of simple initializations in a switch to 6911 initializations from a scalar array. This flag is enabled by 6912 default at `-O2' and higher. 6913 6914`-ftree-tail-merge' 6915 Look for identical code sequences. When found, replace one with a 6916 jump to the other. This optimization is known as tail merging or 6917 cross jumping. This flag is enabled by default at `-O2' and 6918 higher. The compilation time in this pass can be limited using 6919 `max-tail-merge-comparisons' parameter and 6920 `max-tail-merge-iterations' parameter. 6921 6922`-ftree-dce' 6923 Perform dead code elimination (DCE) on trees. This flag is 6924 enabled by default at `-O' and higher. 6925 6926`-ftree-builtin-call-dce' 6927 Perform conditional dead code elimination (DCE) for calls to 6928 built-in functions that may set `errno' but are otherwise 6929 side-effect free. This flag is enabled by default at `-O2' and 6930 higher if `-Os' is not also specified. 6931 6932`-ftree-dominator-opts' 6933 Perform a variety of simple scalar cleanups (constant/copy 6934 propagation, redundancy elimination, range propagation and 6935 expression simplification) based on a dominator tree traversal. 6936 This also performs jump threading (to reduce jumps to jumps). This 6937 flag is enabled by default at `-O' and higher. 6938 6939`-ftree-dse' 6940 Perform dead store elimination (DSE) on trees. A dead store is a 6941 store into a memory location that is later overwritten by another 6942 store without any intervening loads. In this case the earlier 6943 store can be deleted. This flag is enabled by default at `-O' and 6944 higher. 6945 6946`-ftree-ch' 6947 Perform loop header copying on trees. This is beneficial since it 6948 increases effectiveness of code motion optimizations. It also 6949 saves one jump. This flag is enabled by default at `-O' and 6950 higher. It is not enabled for `-Os', since it usually increases 6951 code size. 6952 6953`-ftree-loop-optimize' 6954 Perform loop optimizations on trees. This flag is enabled by 6955 default at `-O' and higher. 6956 6957`-ftree-loop-linear' 6958 Perform loop interchange transformations on tree. Same as 6959 `-floop-interchange'. To use this code transformation, GCC has to 6960 be configured with `--with-ppl' and `--with-cloog' to enable the 6961 Graphite loop transformation infrastructure. 6962 6963`-floop-interchange' 6964 Perform loop interchange transformations on loops. Interchanging 6965 two nested loops switches the inner and outer loops. For example, 6966 given a loop like: 6967 DO J = 1, M 6968 DO I = 1, N 6969 A(J, I) = A(J, I) * C 6970 ENDDO 6971 ENDDO 6972 loop interchange transforms the loop as if it were written: 6973 DO I = 1, N 6974 DO J = 1, M 6975 A(J, I) = A(J, I) * C 6976 ENDDO 6977 ENDDO 6978 which can be beneficial when `N' is larger than the caches, 6979 because in Fortran, the elements of an array are stored in memory 6980 contiguously by column, and the original loop iterates over rows, 6981 potentially creating at each access a cache miss. This 6982 optimization applies to all the languages supported by GCC and is 6983 not limited to Fortran. To use this code transformation, GCC has 6984 to be configured with `--with-ppl' and `--with-cloog' to enable the 6985 Graphite loop transformation infrastructure. 6986 6987`-floop-strip-mine' 6988 Perform loop strip mining transformations on loops. Strip mining 6989 splits a loop into two nested loops. The outer loop has strides 6990 equal to the strip size and the inner loop has strides of the 6991 original loop within a strip. The strip length can be changed 6992 using the `loop-block-tile-size' parameter. For example, given a 6993 loop like: 6994 DO I = 1, N 6995 A(I) = A(I) + C 6996 ENDDO 6997 loop strip mining transforms the loop as if it were written: 6998 DO II = 1, N, 51 6999 DO I = II, min (II + 50, N) 7000 A(I) = A(I) + C 7001 ENDDO 7002 ENDDO 7003 This optimization applies to all the languages supported by GCC 7004 and is not limited to Fortran. To use this code transformation, 7005 GCC has to be configured with `--with-ppl' and `--with-cloog' to 7006 enable the Graphite loop transformation infrastructure. 7007 7008`-floop-block' 7009 Perform loop blocking transformations on loops. Blocking strip 7010 mines each loop in the loop nest such that the memory accesses of 7011 the element loops fit inside caches. The strip length can be 7012 changed using the `loop-block-tile-size' parameter. For example, 7013 given a loop like: 7014 DO I = 1, N 7015 DO J = 1, M 7016 A(J, I) = B(I) + C(J) 7017 ENDDO 7018 ENDDO 7019 loop blocking transforms the loop as if it were written: 7020 DO II = 1, N, 51 7021 DO JJ = 1, M, 51 7022 DO I = II, min (II + 50, N) 7023 DO J = JJ, min (JJ + 50, M) 7024 A(J, I) = B(I) + C(J) 7025 ENDDO 7026 ENDDO 7027 ENDDO 7028 ENDDO 7029 which can be beneficial when `M' is larger than the caches, 7030 because the innermost loop iterates over a smaller amount of data 7031 which can be kept in the caches. This optimization applies to all 7032 the languages supported by GCC and is not limited to Fortran. To 7033 use this code transformation, GCC has to be configured with 7034 `--with-ppl' and `--with-cloog' to enable the Graphite loop 7035 transformation infrastructure. 7036 7037`-fgraphite-identity' 7038 Enable the identity transformation for graphite. For every SCoP 7039 we generate the polyhedral representation and transform it back to 7040 gimple. Using `-fgraphite-identity' we can check the costs or 7041 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some 7042 minimal optimizations are also performed by the code generator 7043 CLooG, like index splitting and dead code elimination in loops. 7044 7045`-floop-nest-optimize' 7046 Enable the ISL based loop nest optimizer. This is a generic loop 7047 nest optimizer based on the Pluto optimization algorithms. It 7048 calculates a loop structure optimized for data-locality and 7049 parallelism. This option is experimental. 7050 7051`-floop-parallelize-all' 7052 Use the Graphite data dependence analysis to identify loops that 7053 can be parallelized. Parallelize all the loops that can be 7054 analyzed to not contain loop carried dependences without checking 7055 that it is profitable to parallelize the loops. 7056 7057`-fcheck-data-deps' 7058 Compare the results of several data dependence analyzers. This 7059 option is used for debugging the data dependence analyzers. 7060 7061`-ftree-loop-if-convert' 7062 Attempt to transform conditional jumps in the innermost loops to 7063 branch-less equivalents. The intent is to remove control-flow from 7064 the innermost loops in order to improve the ability of the 7065 vectorization pass to handle these loops. This is enabled by 7066 default if vectorization is enabled. 7067 7068`-ftree-loop-if-convert-stores' 7069 Attempt to also if-convert conditional jumps containing memory 7070 writes. This transformation can be unsafe for multi-threaded 7071 programs as it transforms conditional memory writes into 7072 unconditional memory writes. For example, 7073 for (i = 0; i < N; i++) 7074 if (cond) 7075 A[i] = expr; 7076 is transformed to 7077 for (i = 0; i < N; i++) 7078 A[i] = cond ? expr : A[i]; 7079 potentially producing data races. 7080 7081`-ftree-loop-distribution' 7082 Perform loop distribution. This flag can improve cache 7083 performance on big loop bodies and allow further loop 7084 optimizations, like parallelization or vectorization, to take 7085 place. For example, the loop 7086 DO I = 1, N 7087 A(I) = B(I) + C 7088 D(I) = E(I) * F 7089 ENDDO 7090 is transformed to 7091 DO I = 1, N 7092 A(I) = B(I) + C 7093 ENDDO 7094 DO I = 1, N 7095 D(I) = E(I) * F 7096 ENDDO 7097 7098`-ftree-loop-distribute-patterns' 7099 Perform loop distribution of patterns that can be code generated 7100 with calls to a library. This flag is enabled by default at `-O3'. 7101 7102 This pass distributes the initialization loops and generates a 7103 call to memset zero. For example, the loop 7104 DO I = 1, N 7105 A(I) = 0 7106 B(I) = A(I) + I 7107 ENDDO 7108 is transformed to 7109 DO I = 1, N 7110 A(I) = 0 7111 ENDDO 7112 DO I = 1, N 7113 B(I) = A(I) + I 7114 ENDDO 7115 and the initialization loop is transformed into a call to memset 7116 zero. 7117 7118`-ftree-loop-im' 7119 Perform loop invariant motion on trees. This pass moves only 7120 invariants that are hard to handle at RTL level (function calls, 7121 operations that expand to nontrivial sequences of insns). With 7122 `-funswitch-loops' it also moves operands of conditions that are 7123 invariant out of the loop, so that we can use just trivial 7124 invariantness analysis in loop unswitching. The pass also includes 7125 store motion. 7126 7127`-ftree-loop-ivcanon' 7128 Create a canonical counter for number of iterations in loops for 7129 which determining number of iterations requires complicated 7130 analysis. Later optimizations then may determine the number 7131 easily. Useful especially in connection with unrolling. 7132 7133`-fivopts' 7134 Perform induction variable optimizations (strength reduction, 7135 induction variable merging and induction variable elimination) on 7136 trees. 7137 7138`-ftree-parallelize-loops=n' 7139 Parallelize loops, i.e., split their iteration space to run in n 7140 threads. This is only possible for loops whose iterations are 7141 independent and can be arbitrarily reordered. The optimization is 7142 only profitable on multiprocessor machines, for loops that are 7143 CPU-intensive, rather than constrained e.g. by memory bandwidth. 7144 This option implies `-pthread', and thus is only supported on 7145 targets that have support for `-pthread'. 7146 7147`-ftree-pta' 7148 Perform function-local points-to analysis on trees. This flag is 7149 enabled by default at `-O' and higher. 7150 7151`-ftree-sra' 7152 Perform scalar replacement of aggregates. This pass replaces 7153 structure references with scalars to prevent committing structures 7154 to memory too early. This flag is enabled by default at `-O' and 7155 higher. 7156 7157`-ftree-copyrename' 7158 Perform copy renaming on trees. This pass attempts to rename 7159 compiler temporaries to other variables at copy locations, usually 7160 resulting in variable names which more closely resemble the 7161 original variables. This flag is enabled by default at `-O' and 7162 higher. 7163 7164`-ftree-coalesce-inlined-vars' 7165 Tell the copyrename pass (see `-ftree-copyrename') to attempt to 7166 combine small user-defined variables too, but only if they were 7167 inlined from other functions. It is a more limited form of 7168 `-ftree-coalesce-vars'. This may harm debug information of such 7169 inlined variables, but it will keep variables of the inlined-into 7170 function apart from each other, such that they are more likely to 7171 contain the expected values in a debugging session. This was the 7172 default in GCC versions older than 4.7. 7173 7174`-ftree-coalesce-vars' 7175 Tell the copyrename pass (see `-ftree-copyrename') to attempt to 7176 combine small user-defined variables too, instead of just compiler 7177 temporaries. This may severely limit the ability to debug an 7178 optimized program compiled with `-fno-var-tracking-assignments'. 7179 In the negated form, this flag prevents SSA coalescing of user 7180 variables, including inlined ones. This option is enabled by 7181 default. 7182 7183`-ftree-ter' 7184 Perform temporary expression replacement during the SSA->normal 7185 phase. Single use/single def temporaries are replaced at their 7186 use location with their defining expression. This results in 7187 non-GIMPLE code, but gives the expanders much more complex trees 7188 to work on resulting in better RTL generation. This is enabled by 7189 default at `-O' and higher. 7190 7191`-ftree-slsr' 7192 Perform straight-line strength reduction on trees. This 7193 recognizes related expressions involving multiplications and 7194 replaces them by less expensive calculations when possible. This 7195 is enabled by default at `-O' and higher. 7196 7197`-ftree-vectorize' 7198 Perform loop vectorization on trees. This flag is enabled by 7199 default at `-O3'. 7200 7201`-ftree-slp-vectorize' 7202 Perform basic block vectorization on trees. This flag is enabled 7203 by default at `-O3' and when `-ftree-vectorize' is enabled. 7204 7205`-ftree-vect-loop-version' 7206 Perform loop versioning when doing loop vectorization on trees. 7207 When a loop appears to be vectorizable except that data alignment 7208 or data dependence cannot be determined at compile time, then 7209 vectorized and non-vectorized versions of the loop are generated 7210 along with run-time checks for alignment or dependence to control 7211 which version is executed. This option is enabled by default 7212 except at level `-Os' where it is disabled. 7213 7214`-fvect-cost-model' 7215 Enable cost model for vectorization. This option is enabled by 7216 default at `-O3'. 7217 7218`-ftree-vrp' 7219 Perform Value Range Propagation on trees. This is similar to the 7220 constant propagation pass, but instead of values, ranges of values 7221 are propagated. This allows the optimizers to remove unnecessary 7222 range checks like array bound checks and null pointer checks. 7223 This is enabled by default at `-O2' and higher. Null pointer check 7224 elimination is only done if `-fdelete-null-pointer-checks' is 7225 enabled. 7226 7227`-ftracer' 7228 Perform tail duplication to enlarge superblock size. This 7229 transformation simplifies the control flow of the function 7230 allowing other optimizations to do a better job. 7231 7232`-funroll-loops' 7233 Unroll loops whose number of iterations can be determined at 7234 compile time or upon entry to the loop. `-funroll-loops' implies 7235 `-frerun-cse-after-loop'. This option makes code larger, and may 7236 or may not make it run faster. 7237 7238`-funroll-all-loops' 7239 Unroll all loops, even if their number of iterations is uncertain 7240 when the loop is entered. This usually makes programs run more 7241 slowly. `-funroll-all-loops' implies the same options as 7242 `-funroll-loops', 7243 7244`-fsplit-ivs-in-unroller' 7245 Enables expression of values of induction variables in later 7246 iterations of the unrolled loop using the value in the first 7247 iteration. This breaks long dependency chains, thus improving 7248 efficiency of the scheduling passes. 7249 7250 A combination of `-fweb' and CSE is often sufficient to obtain the 7251 same effect. However, that is not reliable in cases where the 7252 loop body is more complicated than a single basic block. It also 7253 does not work at all on some architectures due to restrictions in 7254 the CSE pass. 7255 7256 This optimization is enabled by default. 7257 7258`-fvariable-expansion-in-unroller' 7259 With this option, the compiler creates multiple copies of some 7260 local variables when unrolling a loop, which can result in 7261 superior code. 7262 7263`-fpartial-inlining' 7264 Inline parts of functions. This option has any effect only when 7265 inlining itself is turned on by the `-finline-functions' or 7266 `-finline-small-functions' options. 7267 7268 Enabled at level `-O2'. 7269 7270`-fpredictive-commoning' 7271 Perform predictive commoning optimization, i.e., reusing 7272 computations (especially memory loads and stores) performed in 7273 previous iterations of loops. 7274 7275 This option is enabled at level `-O3'. 7276 7277`-fprefetch-loop-arrays' 7278 If supported by the target machine, generate instructions to 7279 prefetch memory to improve the performance of loops that access 7280 large arrays. 7281 7282 This option may generate better or worse code; results are highly 7283 dependent on the structure of loops within the source code. 7284 7285 Disabled at level `-Os'. 7286 7287`-fno-peephole' 7288`-fno-peephole2' 7289 Disable any machine-specific peephole optimizations. The 7290 difference between `-fno-peephole' and `-fno-peephole2' is in how 7291 they are implemented in the compiler; some targets use one, some 7292 use the other, a few use both. 7293 7294 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 7295 levels `-O2', `-O3', `-Os'. 7296 7297`-fno-guess-branch-probability' 7298 Do not guess branch probabilities using heuristics. 7299 7300 GCC uses heuristics to guess branch probabilities if they are not 7301 provided by profiling feedback (`-fprofile-arcs'). These 7302 heuristics are based on the control flow graph. If some branch 7303 probabilities are specified by `__builtin_expect', then the 7304 heuristics are used to guess branch probabilities for the rest of 7305 the control flow graph, taking the `__builtin_expect' info into 7306 account. The interactions between the heuristics and 7307 `__builtin_expect' can be complex, and in some cases, it may be 7308 useful to disable the heuristics so that the effects of 7309 `__builtin_expect' are easier to understand. 7310 7311 The default is `-fguess-branch-probability' at levels `-O', `-O2', 7312 `-O3', `-Os'. 7313 7314`-freorder-blocks' 7315 Reorder basic blocks in the compiled function in order to reduce 7316 number of taken branches and improve code locality. 7317 7318 Enabled at levels `-O2', `-O3'. 7319 7320`-freorder-blocks-and-partition' 7321 In addition to reordering basic blocks in the compiled function, 7322 in order to reduce number of taken branches, partitions hot and 7323 cold basic blocks into separate sections of the assembly and .o 7324 files, to improve paging and cache locality performance. 7325 7326 This optimization is automatically turned off in the presence of 7327 exception handling, for linkonce sections, for functions with a 7328 user-defined section attribute and on any architecture that does 7329 not support named sections. 7330 7331`-freorder-functions' 7332 Reorder functions in the object file in order to improve code 7333 locality. This is implemented by using special subsections 7334 `.text.hot' for most frequently executed functions and 7335 `.text.unlikely' for unlikely executed functions. Reordering is 7336 done by the linker so object file format must support named 7337 sections and linker must place them in a reasonable way. 7338 7339 Also profile feedback must be available to make this option 7340 effective. See `-fprofile-arcs' for details. 7341 7342 Enabled at levels `-O2', `-O3', `-Os'. 7343 7344`-fstrict-aliasing' 7345 Allow the compiler to assume the strictest aliasing rules 7346 applicable to the language being compiled. For C (and C++), this 7347 activates optimizations based on the type of expressions. In 7348 particular, an object of one type is assumed never to reside at 7349 the same address as an object of a different type, unless the 7350 types are almost the same. For example, an `unsigned int' can 7351 alias an `int', but not a `void*' or a `double'. A character type 7352 may alias any other type. 7353 7354 Pay special attention to code like this: 7355 union a_union { 7356 int i; 7357 double d; 7358 }; 7359 7360 int f() { 7361 union a_union t; 7362 t.d = 3.0; 7363 return t.i; 7364 } 7365 The practice of reading from a different union member than the one 7366 most recently written to (called "type-punning") is common. Even 7367 with `-fstrict-aliasing', type-punning is allowed, provided the 7368 memory is accessed through the union type. So, the code above 7369 works as expected. *Note Structures unions enumerations and 7370 bit-fields implementation::. However, this code might not: 7371 int f() { 7372 union a_union t; 7373 int* ip; 7374 t.d = 3.0; 7375 ip = &t.i; 7376 return *ip; 7377 } 7378 7379 Similarly, access by taking the address, casting the resulting 7380 pointer and dereferencing the result has undefined behavior, even 7381 if the cast uses a union type, e.g.: 7382 int f() { 7383 double d = 3.0; 7384 return ((union a_union *) &d)->i; 7385 } 7386 7387 The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3', 7388 `-Os'. 7389 7390`-fstrict-overflow' 7391 Allow the compiler to assume strict signed overflow rules, 7392 depending on the language being compiled. For C (and C++) this 7393 means that overflow when doing arithmetic with signed numbers is 7394 undefined, which means that the compiler may assume that it does 7395 not happen. This permits various optimizations. For example, the 7396 compiler assumes that an expression like `i + 10 > i' is always 7397 true for signed `i'. This assumption is only valid if signed 7398 overflow is undefined, as the expression is false if `i + 10' 7399 overflows when using twos complement arithmetic. When this option 7400 is in effect any attempt to determine whether an operation on 7401 signed numbers overflows must be written carefully to not actually 7402 involve overflow. 7403 7404 This option also allows the compiler to assume strict pointer 7405 semantics: given a pointer to an object, if adding an offset to 7406 that pointer does not produce a pointer to the same object, the 7407 addition is undefined. This permits the compiler to conclude that 7408 `p + u > p' is always true for a pointer `p' and unsigned integer 7409 `u'. This assumption is only valid because pointer wraparound is 7410 undefined, as the expression is false if `p + u' overflows using 7411 twos complement arithmetic. 7412 7413 See also the `-fwrapv' option. Using `-fwrapv' means that integer 7414 signed overflow is fully defined: it wraps. When `-fwrapv' is 7415 used, there is no difference between `-fstrict-overflow' and 7416 `-fno-strict-overflow' for integers. With `-fwrapv' certain types 7417 of overflow are permitted. For example, if the compiler gets an 7418 overflow when doing arithmetic on constants, the overflowed value 7419 can still be used with `-fwrapv', but not otherwise. 7420 7421 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 7422 `-Os'. 7423 7424`-falign-functions' 7425`-falign-functions=N' 7426 Align the start of functions to the next power-of-two greater than 7427 N, skipping up to N bytes. For instance, `-falign-functions=32' 7428 aligns functions to the next 32-byte boundary, but 7429 `-falign-functions=24' aligns to the next 32-byte boundary only if 7430 this can be done by skipping 23 bytes or less. 7431 7432 `-fno-align-functions' and `-falign-functions=1' are equivalent 7433 and mean that functions are not aligned. 7434 7435 Some assemblers only support this flag when N is a power of two; 7436 in that case, it is rounded up. 7437 7438 If N is not specified or is zero, use a machine-dependent default. 7439 7440 Enabled at levels `-O2', `-O3'. 7441 7442`-falign-labels' 7443`-falign-labels=N' 7444 Align all branch targets to a power-of-two boundary, skipping up to 7445 N bytes like `-falign-functions'. This option can easily make 7446 code slower, because it must insert dummy operations for when the 7447 branch target is reached in the usual flow of the code. 7448 7449 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 7450 that labels are not aligned. 7451 7452 If `-falign-loops' or `-falign-jumps' are applicable and are 7453 greater than this value, then their values are used instead. 7454 7455 If N is not specified or is zero, use a machine-dependent default 7456 which is very likely to be `1', meaning no alignment. 7457 7458 Enabled at levels `-O2', `-O3'. 7459 7460`-falign-loops' 7461`-falign-loops=N' 7462 Align loops to a power-of-two boundary, skipping up to N bytes 7463 like `-falign-functions'. If the loops are executed many times, 7464 this makes up for any execution of the dummy operations. 7465 7466 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 7467 that loops are not aligned. 7468 7469 If N is not specified or is zero, use a machine-dependent default. 7470 7471 Enabled at levels `-O2', `-O3'. 7472 7473`-falign-jumps' 7474`-falign-jumps=N' 7475 Align branch targets to a power-of-two boundary, for branch targets 7476 where the targets can only be reached by jumping, skipping up to N 7477 bytes like `-falign-functions'. In this case, no dummy operations 7478 need be executed. 7479 7480 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 7481 that loops are not aligned. 7482 7483 If N is not specified or is zero, use a machine-dependent default. 7484 7485 Enabled at levels `-O2', `-O3'. 7486 7487`-funit-at-a-time' 7488 This option is left for compatibility reasons. `-funit-at-a-time' 7489 has no effect, while `-fno-unit-at-a-time' implies 7490 `-fno-toplevel-reorder' and `-fno-section-anchors'. 7491 7492 Enabled by default. 7493 7494`-fno-toplevel-reorder' 7495 Do not reorder top-level functions, variables, and `asm' 7496 statements. Output them in the same order that they appear in the 7497 input file. When this option is used, unreferenced static 7498 variables are not removed. This option is intended to support 7499 existing code that relies on a particular ordering. For new code, 7500 it is better to use attributes. 7501 7502 Enabled at level `-O0'. When disabled explicitly, it also implies 7503 `-fno-section-anchors', which is otherwise enabled at `-O0' on some 7504 targets. 7505 7506`-fweb' 7507 Constructs webs as commonly used for register allocation purposes 7508 and assign each web individual pseudo register. This allows the 7509 register allocation pass to operate on pseudos directly, but also 7510 strengthens several other optimization passes, such as CSE, loop 7511 optimizer and trivial dead code remover. It can, however, make 7512 debugging impossible, since variables no longer stay in a "home 7513 register". 7514 7515 Enabled by default with `-funroll-loops'. 7516 7517`-fwhole-program' 7518 Assume that the current compilation unit represents the whole 7519 program being compiled. All public functions and variables with 7520 the exception of `main' and those merged by attribute 7521 `externally_visible' become static functions and in effect are 7522 optimized more aggressively by interprocedural optimizers. 7523 7524 This option should not be used in combination with `-flto'. 7525 Instead relying on a linker plugin should provide safer and more 7526 precise information. 7527 7528`-flto[=N]' 7529 This option runs the standard link-time optimizer. When invoked 7530 with source code, it generates GIMPLE (one of GCC's internal 7531 representations) and writes it to special ELF sections in the 7532 object file. When the object files are linked together, all the 7533 function bodies are read from these ELF sections and instantiated 7534 as if they had been part of the same translation unit. 7535 7536 To use the link-time optimizer, `-flto' needs to be specified at 7537 compile time and during the final link. For example: 7538 7539 gcc -c -O2 -flto foo.c 7540 gcc -c -O2 -flto bar.c 7541 gcc -o myprog -flto -O2 foo.o bar.o 7542 7543 The first two invocations to GCC save a bytecode representation of 7544 GIMPLE into special ELF sections inside `foo.o' and `bar.o'. The 7545 final invocation reads the GIMPLE bytecode from `foo.o' and 7546 `bar.o', merges the two files into a single internal image, and 7547 compiles the result as usual. Since both `foo.o' and `bar.o' are 7548 merged into a single image, this causes all the interprocedural 7549 analyses and optimizations in GCC to work across the two files as 7550 if they were a single one. This means, for example, that the 7551 inliner is able to inline functions in `bar.o' into functions in 7552 `foo.o' and vice-versa. 7553 7554 Another (simpler) way to enable link-time optimization is: 7555 7556 gcc -o myprog -flto -O2 foo.c bar.c 7557 7558 The above generates bytecode for `foo.c' and `bar.c', merges them 7559 together into a single GIMPLE representation and optimizes them as 7560 usual to produce `myprog'. 7561 7562 The only important thing to keep in mind is that to enable 7563 link-time optimizations the `-flto' flag needs to be passed to 7564 both the compile and the link commands. 7565 7566 To make whole program optimization effective, it is necessary to 7567 make certain whole program assumptions. The compiler needs to know 7568 what functions and variables can be accessed by libraries and 7569 runtime outside of the link-time optimized unit. When supported 7570 by the linker, the linker plugin (see `-fuse-linker-plugin') 7571 passes information to the compiler about used and externally 7572 visible symbols. When the linker plugin is not available, 7573 `-fwhole-program' should be used to allow the compiler to make 7574 these assumptions, which leads to more aggressive optimization 7575 decisions. 7576 7577 Note that when a file is compiled with `-flto', the generated 7578 object file is larger than a regular object file because it 7579 contains GIMPLE bytecodes and the usual final code. This means 7580 that object files with LTO information can be linked as normal 7581 object files; if `-flto' is not passed to the linker, no 7582 interprocedural optimizations are applied. 7583 7584 Additionally, the optimization flags used to compile individual 7585 files are not necessarily related to those used at link time. For 7586 instance, 7587 7588 gcc -c -O0 -flto foo.c 7589 gcc -c -O0 -flto bar.c 7590 gcc -o myprog -flto -O3 foo.o bar.o 7591 7592 This produces individual object files with unoptimized assembler 7593 code, but the resulting binary `myprog' is optimized at `-O3'. 7594 If, instead, the final binary is generated without `-flto', then 7595 `myprog' is not optimized. 7596 7597 When producing the final binary with `-flto', GCC only applies 7598 link-time optimizations to those files that contain bytecode. 7599 Therefore, you can mix and match object files and libraries with 7600 GIMPLE bytecodes and final object code. GCC automatically selects 7601 which files to optimize in LTO mode and which files to link without 7602 further processing. 7603 7604 There are some code generation flags preserved by GCC when 7605 generating bytecodes, as they need to be used during the final link 7606 stage. Currently, the following options are saved into the GIMPLE 7607 bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags. 7608 7609 At link time, these options are read in and reapplied. Note that 7610 the current implementation makes no attempt to recognize 7611 conflicting values for these options. If different files have 7612 conflicting option values (e.g., one file is compiled with `-fPIC' 7613 and another isn't), the compiler simply uses the last value read 7614 from the bytecode files. It is recommended, then, that you 7615 compile all the files participating in the same link with the same 7616 options. 7617 7618 If LTO encounters objects with C linkage declared with incompatible 7619 types in separate translation units to be linked together 7620 (undefined behavior according to ISO C99 6.2.7), a non-fatal 7621 diagnostic may be issued. The behavior is still undefined at run 7622 time. 7623 7624 Another feature of LTO is that it is possible to apply 7625 interprocedural optimizations on files written in different 7626 languages. This requires support in the language front end. 7627 Currently, the C, C++ and Fortran front ends are capable of 7628 emitting GIMPLE bytecodes, so something like this should work: 7629 7630 gcc -c -flto foo.c 7631 g++ -c -flto bar.cc 7632 gfortran -c -flto baz.f90 7633 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran 7634 7635 Notice that the final link is done with `g++' to get the C++ 7636 runtime libraries and `-lgfortran' is added to get the Fortran 7637 runtime libraries. In general, when mixing languages in LTO mode, 7638 you should use the same link command options as when mixing 7639 languages in a regular (non-LTO) compilation; all you need to add 7640 is `-flto' to all the compile and link commands. 7641 7642 If object files containing GIMPLE bytecode are stored in a library 7643 archive, say `libfoo.a', it is possible to extract and use them in 7644 an LTO link if you are using a linker with plugin support. To 7645 enable this feature, use the flag `-fuse-linker-plugin' at link 7646 time: 7647 7648 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo 7649 7650 With the linker plugin enabled, the linker extracts the needed 7651 GIMPLE files from `libfoo.a' and passes them on to the running GCC 7652 to make them part of the aggregated GIMPLE image to be optimized. 7653 7654 If you are not using a linker with plugin support and/or do not 7655 enable the linker plugin, then the objects inside `libfoo.a' are 7656 extracted and linked as usual, but they do not participate in the 7657 LTO optimization process. 7658 7659 Link-time optimizations do not require the presence of the whole 7660 program to operate. If the program does not require any symbols 7661 to be exported, it is possible to combine `-flto' and 7662 `-fwhole-program' to allow the interprocedural optimizers to use 7663 more aggressive assumptions which may lead to improved 7664 optimization opportunities. Use of `-fwhole-program' is not 7665 needed when linker plugin is active (see `-fuse-linker-plugin'). 7666 7667 The current implementation of LTO makes no attempt to generate 7668 bytecode that is portable between different types of hosts. The 7669 bytecode files are versioned and there is a strict version check, 7670 so bytecode files generated in one version of GCC will not work 7671 with an older/newer version of GCC. 7672 7673 Link-time optimization does not work well with generation of 7674 debugging information. Combining `-flto' with `-g' is currently 7675 experimental and expected to produce wrong results. 7676 7677 If you specify the optional N, the optimization and code 7678 generation done at link time is executed in parallel using N 7679 parallel jobs by utilizing an installed `make' program. The 7680 environment variable `MAKE' may be used to override the program 7681 used. The default value for N is 1. 7682 7683 You can also specify `-flto=jobserver' to use GNU make's job 7684 server mode to determine the number of parallel jobs. This is 7685 useful when the Makefile calling GCC is already executing in 7686 parallel. You must prepend a `+' to the command recipe in the 7687 parent Makefile for this to work. This option likely only works 7688 if `MAKE' is GNU make. 7689 7690 This option is disabled by default. 7691 7692`-flto-partition=ALG' 7693 Specify the partitioning algorithm used by the link-time optimizer. 7694 The value is either `1to1' to specify a partitioning mirroring the 7695 original source files or `balanced' to specify partitioning into 7696 equally sized chunks (whenever possible) or `max' to create new 7697 partition for every symbol where possible. Specifying `none' as 7698 an algorithm disables partitioning and streaming completely. The 7699 default value is `balanced'. While `1to1' can be used as an 7700 workaround for various code ordering issues, the `max' 7701 partitioning is intended for internal testing only. 7702 7703`-flto-compression-level=N' 7704 This option specifies the level of compression used for 7705 intermediate language written to LTO object files, and is only 7706 meaningful in conjunction with LTO mode (`-flto'). Valid values 7707 are 0 (no compression) to 9 (maximum compression). Values outside 7708 this range are clamped to either 0 or 9. If the option is not 7709 given, a default balanced compression setting is used. 7710 7711`-flto-report' 7712 Prints a report with internal details on the workings of the 7713 link-time optimizer. The contents of this report vary from 7714 version to version. It is meant to be useful to GCC developers 7715 when processing object files in LTO mode (via `-flto'). 7716 7717 Disabled by default. 7718 7719`-fuse-linker-plugin' 7720 Enables the use of a linker plugin during link-time optimization. 7721 This option relies on plugin support in the linker, which is 7722 available in gold or in GNU ld 2.21 or newer. 7723 7724 This option enables the extraction of object files with GIMPLE 7725 bytecode out of library archives. This improves the quality of 7726 optimization by exposing more code to the link-time optimizer. 7727 This information specifies what symbols can be accessed externally 7728 (by non-LTO object or during dynamic linking). Resulting code 7729 quality improvements on binaries (and shared libraries that use 7730 hidden visibility) are similar to `-fwhole-program'. See `-flto' 7731 for a description of the effect of this flag and how to use it. 7732 7733 This option is enabled by default when LTO support in GCC is 7734 enabled and GCC was configured for use with a linker supporting 7735 plugins (GNU ld 2.21 or newer or gold). 7736 7737`-ffat-lto-objects' 7738 Fat LTO objects are object files that contain both the 7739 intermediate language and the object code. This makes them usable 7740 for both LTO linking and normal linking. This option is effective 7741 only when compiling with `-flto' and is ignored at link time. 7742 7743 `-fno-fat-lto-objects' improves compilation time over plain LTO, 7744 but requires the complete toolchain to be aware of LTO. It 7745 requires a linker with linker plugin support for basic 7746 functionality. Additionally, `nm', `ar' and `ranlib' need to 7747 support linker plugins to allow a full-featured build environment 7748 (capable of building static libraries etc). GCC provides the 7749 `gcc-ar', `gcc-nm', `gcc-ranlib' wrappers to pass the right options 7750 to these tools. With non fat LTO makefiles need to be modified to 7751 use them. 7752 7753 The default is `-ffat-lto-objects' but this default is intended to 7754 change in future releases when linker plugin enabled environments 7755 become more common. 7756 7757`-fcompare-elim' 7758 After register allocation and post-register allocation instruction 7759 splitting, identify arithmetic instructions that compute processor 7760 flags similar to a comparison operation based on that arithmetic. 7761 If possible, eliminate the explicit comparison operation. 7762 7763 This pass only applies to certain targets that cannot explicitly 7764 represent the comparison operation before register allocation is 7765 complete. 7766 7767 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7768 7769`-fuse-ld=bfd' 7770 Use the `bfd' linker instead of the default linker. 7771 7772`-fuse-ld=gold' 7773 Use the `gold' linker instead of the default linker. 7774 7775`-fcprop-registers' 7776 After register allocation and post-register allocation instruction 7777 splitting, perform a copy-propagation pass to try to reduce 7778 scheduling dependencies and occasionally eliminate the copy. 7779 7780 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7781 7782`-fprofile-correction' 7783 Profiles collected using an instrumented binary for multi-threaded 7784 programs may be inconsistent due to missed counter updates. When 7785 this option is specified, GCC uses heuristics to correct or smooth 7786 out such inconsistencies. By default, GCC emits an error message 7787 when an inconsistent profile is detected. 7788 7789`-fprofile-dir=PATH' 7790 Set the directory to search for the profile data files in to PATH. 7791 This option affects only the profile data generated by 7792 `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used 7793 by `-fprofile-use' and `-fbranch-probabilities' and its related 7794 options. Both absolute and relative paths can be used. By 7795 default, GCC uses the current directory as PATH, thus the profile 7796 data file appears in the same directory as the object file. 7797 7798`-fprofile-generate' 7799`-fprofile-generate=PATH' 7800 Enable options usually used for instrumenting application to 7801 produce profile useful for later recompilation with profile 7802 feedback based optimization. You must use `-fprofile-generate' 7803 both when compiling and when linking your program. 7804 7805 The following options are enabled: `-fprofile-arcs', 7806 `-fprofile-values', `-fvpt'. 7807 7808 If PATH is specified, GCC looks at the PATH to find the profile 7809 feedback data files. See `-fprofile-dir'. 7810 7811`-fprofile-use' 7812`-fprofile-use=PATH' 7813 Enable profile feedback directed optimizations, and optimizations 7814 generally profitable only with profile feedback available. 7815 7816 The following options are enabled: `-fbranch-probabilities', 7817 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer', 7818 `-ftree-vectorize', `ftree-loop-distribute-patterns' 7819 7820 By default, GCC emits an error message if the feedback profiles do 7821 not match the source code. This error can be turned into a 7822 warning by using `-Wcoverage-mismatch'. Note this may result in 7823 poorly optimized code. 7824 7825 If PATH is specified, GCC looks at the PATH to find the profile 7826 feedback data files. See `-fprofile-dir'. 7827 7828 The following options control compiler behavior regarding 7829floating-point arithmetic. These options trade off between speed and 7830correctness. All must be specifically enabled. 7831 7832`-ffloat-store' 7833 Do not store floating-point variables in registers, and inhibit 7834 other options that might change whether a floating-point value is 7835 taken from a register or memory. 7836 7837 This option prevents undesirable excess precision on machines such 7838 as the 68000 where the floating registers (of the 68881) keep more 7839 precision than a `double' is supposed to have. Similarly for the 7840 x86 architecture. For most programs, the excess precision does 7841 only good, but a few programs rely on the precise definition of 7842 IEEE floating point. Use `-ffloat-store' for such programs, after 7843 modifying them to store all pertinent intermediate computations 7844 into variables. 7845 7846`-fexcess-precision=STYLE' 7847 This option allows further control over excess precision on 7848 machines where floating-point registers have more precision than 7849 the IEEE `float' and `double' types and the processor does not 7850 support operations rounding to those types. By default, 7851 `-fexcess-precision=fast' is in effect; this means that operations 7852 are carried out in the precision of the registers and that it is 7853 unpredictable when rounding to the types specified in the source 7854 code takes place. When compiling C, if 7855 `-fexcess-precision=standard' is specified then excess precision 7856 follows the rules specified in ISO C99; in particular, both casts 7857 and assignments cause values to be rounded to their semantic types 7858 (whereas `-ffloat-store' only affects assignments). This option 7859 is enabled by default for C if a strict conformance option such as 7860 `-std=c99' is used. 7861 7862 `-fexcess-precision=standard' is not implemented for languages 7863 other than C, and has no effect if `-funsafe-math-optimizations' 7864 or `-ffast-math' is specified. On the x86, it also has no effect 7865 if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the 7866 former case, IEEE semantics apply without excess precision, and in 7867 the latter, rounding is unpredictable. 7868 7869`-ffast-math' 7870 Sets `-fno-math-errno', `-funsafe-math-optimizations', 7871 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans' 7872 and `-fcx-limited-range'. 7873 7874 This option causes the preprocessor macro `__FAST_MATH__' to be 7875 defined. 7876 7877 This option is not turned on by any `-O' option besides `-Ofast' 7878 since it can result in incorrect output for programs that depend 7879 on an exact implementation of IEEE or ISO rules/specifications for 7880 math functions. It may, however, yield faster code for programs 7881 that do not require the guarantees of these specifications. 7882 7883`-fno-math-errno' 7884 Do not set `errno' after calling math functions that are executed 7885 with a single instruction, e.g., `sqrt'. A program that relies on 7886 IEEE exceptions for math error handling may want to use this flag 7887 for speed while maintaining IEEE arithmetic compatibility. 7888 7889 This option is not turned on by any `-O' option since it can 7890 result in incorrect output for programs that depend on an exact 7891 implementation of IEEE or ISO rules/specifications for math 7892 functions. It may, however, yield faster code for programs that do 7893 not require the guarantees of these specifications. 7894 7895 The default is `-fmath-errno'. 7896 7897 On Darwin systems, the math library never sets `errno'. There is 7898 therefore no reason for the compiler to consider the possibility 7899 that it might, and `-fno-math-errno' is the default. 7900 7901`-funsafe-math-optimizations' 7902 Allow optimizations for floating-point arithmetic that (a) assume 7903 that arguments and results are valid and (b) may violate IEEE or 7904 ANSI standards. When used at link-time, it may include libraries 7905 or startup files that change the default FPU control word or other 7906 similar optimizations. 7907 7908 This option is not turned on by any `-O' option since it can 7909 result in incorrect output for programs that depend on an exact 7910 implementation of IEEE or ISO rules/specifications for math 7911 functions. It may, however, yield faster code for programs that do 7912 not require the guarantees of these specifications. Enables 7913 `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math' 7914 and `-freciprocal-math'. 7915 7916 The default is `-fno-unsafe-math-optimizations'. 7917 7918`-fassociative-math' 7919 Allow re-association of operands in series of floating-point 7920 operations. This violates the ISO C and C++ language standard by 7921 possibly changing computation result. NOTE: re-ordering may 7922 change the sign of zero as well as ignore NaNs and inhibit or 7923 create underflow or overflow (and thus cannot be used on code that 7924 relies on rounding behavior like `(x + 2**52) - 2**52'. May also 7925 reorder floating-point comparisons and thus may not be used when 7926 ordered comparisons are required. This option requires that both 7927 `-fno-signed-zeros' and `-fno-trapping-math' be in effect. 7928 Moreover, it doesn't make much sense with `-frounding-math'. For 7929 Fortran the option is automatically enabled when both 7930 `-fno-signed-zeros' and `-fno-trapping-math' are in effect. 7931 7932 The default is `-fno-associative-math'. 7933 7934`-freciprocal-math' 7935 Allow the reciprocal of a value to be used instead of dividing by 7936 the value if this enables optimizations. For example `x / y' can 7937 be replaced with `x * (1/y)', which is useful if `(1/y)' is 7938 subject to common subexpression elimination. Note that this loses 7939 precision and increases the number of flops operating on the value. 7940 7941 The default is `-fno-reciprocal-math'. 7942 7943`-ffinite-math-only' 7944 Allow optimizations for floating-point arithmetic that assume that 7945 arguments and results are not NaNs or +-Infs. 7946 7947 This option is not turned on by any `-O' option since it can 7948 result in incorrect output for programs that depend on an exact 7949 implementation of IEEE or ISO rules/specifications for math 7950 functions. It may, however, yield faster code for programs that do 7951 not require the guarantees of these specifications. 7952 7953 The default is `-fno-finite-math-only'. 7954 7955`-fno-signed-zeros' 7956 Allow optimizations for floating-point arithmetic that ignore the 7957 signedness of zero. IEEE arithmetic specifies the behavior of 7958 distinct +0.0 and -0.0 values, which then prohibits simplification 7959 of expressions such as x+0.0 or 0.0*x (even with 7960 `-ffinite-math-only'). This option implies that the sign of a 7961 zero result isn't significant. 7962 7963 The default is `-fsigned-zeros'. 7964 7965`-fno-trapping-math' 7966 Compile code assuming that floating-point operations cannot 7967 generate user-visible traps. These traps include division by 7968 zero, overflow, underflow, inexact result and invalid operation. 7969 This option requires that `-fno-signaling-nans' be in effect. 7970 Setting this option may allow faster code if one relies on 7971 "non-stop" IEEE arithmetic, for example. 7972 7973 This option should never be turned on by any `-O' option since it 7974 can result in incorrect output for programs that depend on an 7975 exact implementation of IEEE or ISO rules/specifications for math 7976 functions. 7977 7978 The default is `-ftrapping-math'. 7979 7980`-frounding-math' 7981 Disable transformations and optimizations that assume default 7982 floating-point rounding behavior. This is round-to-zero for all 7983 floating point to integer conversions, and round-to-nearest for 7984 all other arithmetic truncations. This option should be specified 7985 for programs that change the FP rounding mode dynamically, or that 7986 may be executed with a non-default rounding mode. This option 7987 disables constant folding of floating-point expressions at compile 7988 time (which may be affected by rounding mode) and arithmetic 7989 transformations that are unsafe in the presence of sign-dependent 7990 rounding modes. 7991 7992 The default is `-fno-rounding-math'. 7993 7994 This option is experimental and does not currently guarantee to 7995 disable all GCC optimizations that are affected by rounding mode. 7996 Future versions of GCC may provide finer control of this setting 7997 using C99's `FENV_ACCESS' pragma. This command-line option will 7998 be used to specify the default state for `FENV_ACCESS'. 7999 8000`-fsignaling-nans' 8001 Compile code assuming that IEEE signaling NaNs may generate 8002 user-visible traps during floating-point operations. Setting this 8003 option disables optimizations that may change the number of 8004 exceptions visible with signaling NaNs. This option implies 8005 `-ftrapping-math'. 8006 8007 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 8008 defined. 8009 8010 The default is `-fno-signaling-nans'. 8011 8012 This option is experimental and does not currently guarantee to 8013 disable all GCC optimizations that affect signaling NaN behavior. 8014 8015`-fsingle-precision-constant' 8016 Treat floating-point constants as single precision instead of 8017 implicitly converting them to double-precision constants. 8018 8019`-fcx-limited-range' 8020 When enabled, this option states that a range reduction step is not 8021 needed when performing complex division. Also, there is no 8022 checking whether the result of a complex multiplication or 8023 division is `NaN + I*NaN', with an attempt to rescue the situation 8024 in that case. The default is `-fno-cx-limited-range', but is 8025 enabled by `-ffast-math'. 8026 8027 This option controls the default setting of the ISO C99 8028 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 8029 all languages. 8030 8031`-fcx-fortran-rules' 8032 Complex multiplication and division follow Fortran rules. Range 8033 reduction is done as part of complex division, but there is no 8034 checking whether the result of a complex multiplication or 8035 division is `NaN + I*NaN', with an attempt to rescue the situation 8036 in that case. 8037 8038 The default is `-fno-cx-fortran-rules'. 8039 8040 8041 The following options control optimizations that may improve 8042performance, but are not enabled by any `-O' options. This section 8043includes experimental options that may produce broken code. 8044 8045`-fbranch-probabilities' 8046 After running a program compiled with `-fprofile-arcs' (*note 8047 Options for Debugging Your Program or `gcc': Debugging Options.), 8048 you can compile it a second time using `-fbranch-probabilities', 8049 to improve optimizations based on the number of times each branch 8050 was taken. When a program compiled with `-fprofile-arcs' exits, 8051 it saves arc execution counts to a file called `SOURCENAME.gcda' 8052 for each source file. The information in this data file is very 8053 dependent on the structure of the generated code, so you must use 8054 the same source code and the same optimization options for both 8055 compilations. 8056 8057 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 8058 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 8059 optimization. Currently, they are only used in one place: in 8060 `reorg.c', instead of guessing which path a branch is most likely 8061 to take, the `REG_BR_PROB' values are used to exactly determine 8062 which path is taken more often. 8063 8064`-fprofile-values' 8065 If combined with `-fprofile-arcs', it adds code so that some data 8066 about values of expressions in the program is gathered. 8067 8068 With `-fbranch-probabilities', it reads back the data gathered 8069 from profiling values of expressions for usage in optimizations. 8070 8071 Enabled with `-fprofile-generate' and `-fprofile-use'. 8072 8073`-fvpt' 8074 If combined with `-fprofile-arcs', this option instructs the 8075 compiler to add code to gather information about values of 8076 expressions. 8077 8078 With `-fbranch-probabilities', it reads back the data gathered and 8079 actually performs the optimizations based on them. Currently the 8080 optimizations include specialization of division operations using 8081 the knowledge about the value of the denominator. 8082 8083`-frename-registers' 8084 Attempt to avoid false dependencies in scheduled code by making use 8085 of registers left over after register allocation. This 8086 optimization most benefits processors with lots of registers. 8087 Depending on the debug information format adopted by the target, 8088 however, it can make debugging impossible, since variables no 8089 longer stay in a "home register". 8090 8091 Enabled by default with `-funroll-loops' and `-fpeel-loops'. 8092 8093`-ftracer' 8094 Perform tail duplication to enlarge superblock size. This 8095 transformation simplifies the control flow of the function 8096 allowing other optimizations to do a better job. 8097 8098 Enabled with `-fprofile-use'. 8099 8100`-funroll-loops' 8101 Unroll loops whose number of iterations can be determined at 8102 compile time or upon entry to the loop. `-funroll-loops' implies 8103 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 8104 also turns on complete loop peeling (i.e. complete removal of 8105 loops with a small constant number of iterations). This option 8106 makes code larger, and may or may not make it run faster. 8107 8108 Enabled with `-fprofile-use'. 8109 8110`-funroll-all-loops' 8111 Unroll all loops, even if their number of iterations is uncertain 8112 when the loop is entered. This usually makes programs run more 8113 slowly. `-funroll-all-loops' implies the same options as 8114 `-funroll-loops'. 8115 8116`-fpeel-loops' 8117 Peels loops for which there is enough information that they do not 8118 roll much (from profile feedback). It also turns on complete loop 8119 peeling (i.e. complete removal of loops with small constant number 8120 of iterations). 8121 8122 Enabled with `-fprofile-use'. 8123 8124`-fmove-loop-invariants' 8125 Enables the loop invariant motion pass in the RTL loop optimizer. 8126 Enabled at level `-O1' 8127 8128`-funswitch-loops' 8129 Move branches with loop invariant conditions out of the loop, with 8130 duplicates of the loop on both branches (modified according to 8131 result of the condition). 8132 8133`-ffunction-sections' 8134`-fdata-sections' 8135 Place each function or data item into its own section in the output 8136 file if the target supports arbitrary sections. The name of the 8137 function or the name of the data item determines the section's name 8138 in the output file. 8139 8140 Use these options on systems where the linker can perform 8141 optimizations to improve locality of reference in the instruction 8142 space. Most systems using the ELF object format and SPARC 8143 processors running Solaris 2 have linkers with such optimizations. 8144 AIX may have these optimizations in the future. 8145 8146 Only use these options when there are significant benefits from 8147 doing so. When you specify these options, the assembler and linker 8148 create larger object and executable files and are also slower. 8149 You cannot use `gprof' on all systems if you specify this option, 8150 and you may have problems with debugging if you specify both this 8151 option and `-g'. 8152 8153`-fbranch-target-load-optimize' 8154 Perform branch target register load optimization before prologue / 8155 epilogue threading. The use of target registers can typically be 8156 exposed only during reload, thus hoisting loads out of loops and 8157 doing inter-block scheduling needs a separate optimization pass. 8158 8159`-fbranch-target-load-optimize2' 8160 Perform branch target register load optimization after prologue / 8161 epilogue threading. 8162 8163`-fbtr-bb-exclusive' 8164 When performing branch target register load optimization, don't 8165 reuse branch target registers within any basic block. 8166 8167`-fstack-protector' 8168 Emit extra code to check for buffer overflows, such as stack 8169 smashing attacks. This is done by adding a guard variable to 8170 functions with vulnerable objects. This includes functions that 8171 call `alloca', and functions with buffers larger than 8 bytes. 8172 The guards are initialized when a function is entered and then 8173 checked when the function exits. If a guard check fails, an error 8174 message is printed and the program exits. 8175 8176`-fstack-protector-all' 8177 Like `-fstack-protector' except that all functions are protected. 8178 8179`-fsection-anchors' 8180 Try to reduce the number of symbolic address calculations by using 8181 shared "anchor" symbols to address nearby objects. This 8182 transformation can help to reduce the number of GOT entries and 8183 GOT accesses on some targets. 8184 8185 For example, the implementation of the following function `foo': 8186 8187 static int a, b, c; 8188 int foo (void) { return a + b + c; } 8189 8190 usually calculates the addresses of all three variables, but if you 8191 compile it with `-fsection-anchors', it accesses the variables 8192 from a common anchor point instead. The effect is similar to the 8193 following pseudocode (which isn't valid C): 8194 8195 int foo (void) 8196 { 8197 register int *xr = &x; 8198 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 8199 } 8200 8201 Not all targets support this option. 8202 8203`--param NAME=VALUE' 8204 In some places, GCC uses various constants to control the amount of 8205 optimization that is done. For example, GCC does not inline 8206 functions that contain more than a certain number of instructions. 8207 You can control some of these constants on the command line using 8208 the `--param' option. 8209 8210 The names of specific parameters, and the meaning of the values, 8211 are tied to the internals of the compiler, and are subject to 8212 change without notice in future releases. 8213 8214 In each case, the VALUE is an integer. The allowable choices for 8215 NAME are: 8216 8217 `predictable-branch-outcome' 8218 When branch is predicted to be taken with probability lower 8219 than this threshold (in percent), then it is considered well 8220 predictable. The default is 10. 8221 8222 `max-crossjump-edges' 8223 The maximum number of incoming edges to consider for 8224 cross-jumping. The algorithm used by `-fcrossjumping' is 8225 O(N^2) in the number of edges incoming to each block. 8226 Increasing values mean more aggressive optimization, making 8227 the compilation time increase with probably small improvement 8228 in executable size. 8229 8230 `min-crossjump-insns' 8231 The minimum number of instructions that must be matched at 8232 the end of two blocks before cross-jumping is performed on 8233 them. This value is ignored in the case where all 8234 instructions in the block being cross-jumped from are 8235 matched. The default value is 5. 8236 8237 `max-grow-copy-bb-insns' 8238 The maximum code size expansion factor when copying basic 8239 blocks instead of jumping. The expansion is relative to a 8240 jump instruction. The default value is 8. 8241 8242 `max-goto-duplication-insns' 8243 The maximum number of instructions to duplicate to a block 8244 that jumps to a computed goto. To avoid O(N^2) behavior in a 8245 number of passes, GCC factors computed gotos early in the 8246 compilation process, and unfactors them as late as possible. 8247 Only computed jumps at the end of a basic blocks with no more 8248 than max-goto-duplication-insns are unfactored. The default 8249 value is 8. 8250 8251 `max-delay-slot-insn-search' 8252 The maximum number of instructions to consider when looking 8253 for an instruction to fill a delay slot. If more than this 8254 arbitrary number of instructions are searched, the time 8255 savings from filling the delay slot are minimal, so stop 8256 searching. Increasing values mean more aggressive 8257 optimization, making the compilation time increase with 8258 probably small improvement in execution time. 8259 8260 `max-delay-slot-live-search' 8261 When trying to fill delay slots, the maximum number of 8262 instructions to consider when searching for a block with 8263 valid live register information. Increasing this arbitrarily 8264 chosen value means more aggressive optimization, increasing 8265 the compilation time. This parameter should be removed when 8266 the delay slot code is rewritten to maintain the control-flow 8267 graph. 8268 8269 `max-gcse-memory' 8270 The approximate maximum amount of memory that can be 8271 allocated in order to perform the global common subexpression 8272 elimination optimization. If more memory than specified is 8273 required, the optimization is not done. 8274 8275 `max-gcse-insertion-ratio' 8276 If the ratio of expression insertions to deletions is larger 8277 than this value for any expression, then RTL PRE inserts or 8278 removes the expression and thus leaves partially redundant 8279 computations in the instruction stream. The default value is 8280 20. 8281 8282 `max-pending-list-length' 8283 The maximum number of pending dependencies scheduling allows 8284 before flushing the current state and starting over. Large 8285 functions with few branches or calls can create excessively 8286 large lists which needlessly consume memory and resources. 8287 8288 `max-modulo-backtrack-attempts' 8289 The maximum number of backtrack attempts the scheduler should 8290 make when modulo scheduling a loop. Larger values can 8291 exponentially increase compilation time. 8292 8293 `max-inline-insns-single' 8294 Several parameters control the tree inliner used in GCC. 8295 This number sets the maximum number of instructions (counted 8296 in GCC's internal representation) in a single function that 8297 the tree inliner considers for inlining. This only affects 8298 functions declared inline and methods implemented in a class 8299 declaration (C++). The default value is 400. 8300 8301 `max-inline-insns-auto' 8302 When you use `-finline-functions' (included in `-O3'), a lot 8303 of functions that would otherwise not be considered for 8304 inlining by the compiler are investigated. To those 8305 functions, a different (more restrictive) limit compared to 8306 functions declared inline can be applied. The default value 8307 is 40. 8308 8309 `inline-min-speedup' 8310 When estimated performance improvement of caller + callee 8311 runtime exceeds this threshold (in precent), the function can 8312 be inlined regardless the limit on `--param 8313 max-inline-insns-single' and `--param max-inline-insns-auto'. 8314 8315 `large-function-insns' 8316 The limit specifying really large functions. For functions 8317 larger than this limit after inlining, inlining is 8318 constrained by `--param large-function-growth'. This 8319 parameter is useful primarily to avoid extreme compilation 8320 time caused by non-linear algorithms used by the back end. 8321 The default value is 2700. 8322 8323 `large-function-growth' 8324 Specifies maximal growth of large function caused by inlining 8325 in percents. The default value is 100 which limits large 8326 function growth to 2.0 times the original size. 8327 8328 `large-unit-insns' 8329 The limit specifying large translation unit. Growth caused 8330 by inlining of units larger than this limit is limited by 8331 `--param inline-unit-growth'. For small units this might be 8332 too tight. For example, consider a unit consisting of 8333 function A that is inline and B that just calls A three 8334 times. If B is small relative to A, the growth of unit is 8335 300\% and yet such inlining is very sane. For very large 8336 units consisting of small inlineable functions, however, the 8337 overall unit growth limit is needed to avoid exponential 8338 explosion of code size. Thus for smaller units, the size is 8339 increased to `--param large-unit-insns' before applying 8340 `--param inline-unit-growth'. The default is 10000. 8341 8342 `inline-unit-growth' 8343 Specifies maximal overall growth of the compilation unit 8344 caused by inlining. The default value is 30 which limits 8345 unit growth to 1.3 times the original size. 8346 8347 `ipcp-unit-growth' 8348 Specifies maximal overall growth of the compilation unit 8349 caused by interprocedural constant propagation. The default 8350 value is 10 which limits unit growth to 1.1 times the 8351 original size. 8352 8353 `large-stack-frame' 8354 The limit specifying large stack frames. While inlining the 8355 algorithm is trying to not grow past this limit too much. 8356 The default value is 256 bytes. 8357 8358 `large-stack-frame-growth' 8359 Specifies maximal growth of large stack frames caused by 8360 inlining in percents. The default value is 1000 which limits 8361 large stack frame growth to 11 times the original size. 8362 8363 `max-inline-insns-recursive' 8364 `max-inline-insns-recursive-auto' 8365 Specifies the maximum number of instructions an out-of-line 8366 copy of a self-recursive inline function can grow into by 8367 performing recursive inlining. 8368 8369 For functions declared inline, `--param 8370 max-inline-insns-recursive' is taken into account. For 8371 functions not declared inline, recursive inlining happens 8372 only when `-finline-functions' (included in `-O3') is enabled 8373 and `--param max-inline-insns-recursive-auto' is used. The 8374 default value is 450. 8375 8376 `max-inline-recursive-depth' 8377 `max-inline-recursive-depth-auto' 8378 Specifies the maximum recursion depth used for recursive 8379 inlining. 8380 8381 For functions declared inline, `--param 8382 max-inline-recursive-depth' is taken into account. For 8383 functions not declared inline, recursive inlining happens 8384 only when `-finline-functions' (included in `-O3') is enabled 8385 and `--param max-inline-recursive-depth-auto' is used. The 8386 default value is 8. 8387 8388 `min-inline-recursive-probability' 8389 Recursive inlining is profitable only for function having 8390 deep recursion in average and can hurt for function having 8391 little recursion depth by increasing the prologue size or 8392 complexity of function body to other optimizers. 8393 8394 When profile feedback is available (see `-fprofile-generate') 8395 the actual recursion depth can be guessed from probability 8396 that function recurses via a given call expression. This 8397 parameter limits inlining only to call expressions whose 8398 probability exceeds the given threshold (in percents). The 8399 default value is 10. 8400 8401 `early-inlining-insns' 8402 Specify growth that the early inliner can make. In effect it 8403 increases the amount of inlining for code having a large 8404 abstraction penalty. The default value is 10. 8405 8406 `max-early-inliner-iterations' 8407 `max-early-inliner-iterations' 8408 Limit of iterations of the early inliner. This basically 8409 bounds the number of nested indirect calls the early inliner 8410 can resolve. Deeper chains are still handled by late 8411 inlining. 8412 8413 `comdat-sharing-probability' 8414 `comdat-sharing-probability' 8415 Probability (in percent) that C++ inline function with comdat 8416 visibility are shared across multiple compilation units. The 8417 default value is 20. 8418 8419 `min-vect-loop-bound' 8420 The minimum number of iterations under which loops are not 8421 vectorized when `-ftree-vectorize' is used. The number of 8422 iterations after vectorization needs to be greater than the 8423 value specified by this option to allow vectorization. The 8424 default value is 0. 8425 8426 `gcse-cost-distance-ratio' 8427 Scaling factor in calculation of maximum distance an 8428 expression can be moved by GCSE optimizations. This is 8429 currently supported only in the code hoisting pass. The 8430 bigger the ratio, the more aggressive code hoisting is with 8431 simple expressions, i.e., the expressions that have cost less 8432 than `gcse-unrestricted-cost'. Specifying 0 disables 8433 hoisting of simple expressions. The default value is 10. 8434 8435 `gcse-unrestricted-cost' 8436 Cost, roughly measured as the cost of a single typical machine 8437 instruction, at which GCSE optimizations do not constrain the 8438 distance an expression can travel. This is currently 8439 supported only in the code hoisting pass. The lesser the 8440 cost, the more aggressive code hoisting is. Specifying 0 8441 allows all expressions to travel unrestricted distances. The 8442 default value is 3. 8443 8444 `max-hoist-depth' 8445 The depth of search in the dominator tree for expressions to 8446 hoist. This is used to avoid quadratic behavior in hoisting 8447 algorithm. The value of 0 does not limit on the search, but 8448 may slow down compilation of huge functions. The default 8449 value is 30. 8450 8451 `max-tail-merge-comparisons' 8452 The maximum amount of similar bbs to compare a bb with. This 8453 is used to avoid quadratic behavior in tree tail merging. 8454 The default value is 10. 8455 8456 `max-tail-merge-iterations' 8457 The maximum amount of iterations of the pass over the 8458 function. This is used to limit compilation time in tree 8459 tail merging. The default value is 2. 8460 8461 `max-unrolled-insns' 8462 The maximum number of instructions that a loop may have to be 8463 unrolled. If a loop is unrolled, this parameter also 8464 determines how many times the loop code is unrolled. 8465 8466 `max-average-unrolled-insns' 8467 The maximum number of instructions biased by probabilities of 8468 their execution that a loop may have to be unrolled. If a 8469 loop is unrolled, this parameter also determines how many 8470 times the loop code is unrolled. 8471 8472 `max-unroll-times' 8473 The maximum number of unrollings of a single loop. 8474 8475 `max-peeled-insns' 8476 The maximum number of instructions that a loop may have to be 8477 peeled. If a loop is peeled, this parameter also determines 8478 how many times the loop code is peeled. 8479 8480 `max-peel-times' 8481 The maximum number of peelings of a single loop. 8482 8483 `max-peel-branches' 8484 The maximum number of branches on the hot path through the 8485 peeled sequence. 8486 8487 `max-completely-peeled-insns' 8488 The maximum number of insns of a completely peeled loop. 8489 8490 `max-completely-peel-times' 8491 The maximum number of iterations of a loop to be suitable for 8492 complete peeling. 8493 8494 `max-completely-peel-loop-nest-depth' 8495 The maximum depth of a loop nest suitable for complete 8496 peeling. 8497 8498 `max-unswitch-insns' 8499 The maximum number of insns of an unswitched loop. 8500 8501 `max-unswitch-level' 8502 The maximum number of branches unswitched in a single loop. 8503 8504 `lim-expensive' 8505 The minimum cost of an expensive expression in the loop 8506 invariant motion. 8507 8508 `iv-consider-all-candidates-bound' 8509 Bound on number of candidates for induction variables, below 8510 which all candidates are considered for each use in induction 8511 variable optimizations. If there are more candidates than 8512 this, only the most relevant ones are considered to avoid 8513 quadratic time complexity. 8514 8515 `iv-max-considered-uses' 8516 The induction variable optimizations give up on loops that 8517 contain more induction variable uses. 8518 8519 `iv-always-prune-cand-set-bound' 8520 If the number of candidates in the set is smaller than this 8521 value, always try to remove unnecessary ivs from the set when 8522 adding a new one. 8523 8524 `scev-max-expr-size' 8525 Bound on size of expressions used in the scalar evolutions 8526 analyzer. Large expressions slow the analyzer. 8527 8528 `scev-max-expr-complexity' 8529 Bound on the complexity of the expressions in the scalar 8530 evolutions analyzer. Complex expressions slow the analyzer. 8531 8532 `omega-max-vars' 8533 The maximum number of variables in an Omega constraint system. 8534 The default value is 128. 8535 8536 `omega-max-geqs' 8537 The maximum number of inequalities in an Omega constraint 8538 system. The default value is 256. 8539 8540 `omega-max-eqs' 8541 The maximum number of equalities in an Omega constraint 8542 system. The default value is 128. 8543 8544 `omega-max-wild-cards' 8545 The maximum number of wildcard variables that the Omega 8546 solver is able to insert. The default value is 18. 8547 8548 `omega-hash-table-size' 8549 The size of the hash table in the Omega solver. The default 8550 value is 550. 8551 8552 `omega-max-keys' 8553 The maximal number of keys used by the Omega solver. The 8554 default value is 500. 8555 8556 `omega-eliminate-redundant-constraints' 8557 When set to 1, use expensive methods to eliminate all 8558 redundant constraints. The default value is 0. 8559 8560 `vect-max-version-for-alignment-checks' 8561 The maximum number of run-time checks that can be performed 8562 when doing loop versioning for alignment in the vectorizer. 8563 See option `-ftree-vect-loop-version' for more information. 8564 8565 `vect-max-version-for-alias-checks' 8566 The maximum number of run-time checks that can be performed 8567 when doing loop versioning for alias in the vectorizer. See 8568 option `-ftree-vect-loop-version' for more information. 8569 8570 `max-iterations-to-track' 8571 The maximum number of iterations of a loop the brute-force 8572 algorithm for analysis of the number of iterations of the 8573 loop tries to evaluate. 8574 8575 `hot-bb-count-ws-permille' 8576 A basic block profile count is considered hot if it 8577 contributes to the given permillage (i.e. 0...1000) of the 8578 entire profiled execution. 8579 8580 `hot-bb-frequency-fraction' 8581 Select fraction of the entry block frequency of executions of 8582 basic block in function given basic block needs to have to be 8583 considered hot. 8584 8585 `max-predicted-iterations' 8586 The maximum number of loop iterations we predict statically. 8587 This is useful in cases where a function contains a single 8588 loop with known bound and another loop with unknown bound. 8589 The known number of iterations is predicted correctly, while 8590 the unknown number of iterations average to roughly 10. This 8591 means that the loop without bounds appears artificially cold 8592 relative to the other one. 8593 8594 `align-threshold' 8595 Select fraction of the maximal frequency of executions of a 8596 basic block in a function to align the basic block. 8597 8598 `align-loop-iterations' 8599 A loop expected to iterate at least the selected number of 8600 iterations is aligned. 8601 8602 `tracer-dynamic-coverage' 8603 `tracer-dynamic-coverage-feedback' 8604 This value is used to limit superblock formation once the 8605 given percentage of executed instructions is covered. This 8606 limits unnecessary code size expansion. 8607 8608 The `tracer-dynamic-coverage-feedback' is used only when 8609 profile feedback is available. The real profiles (as opposed 8610 to statically estimated ones) are much less balanced allowing 8611 the threshold to be larger value. 8612 8613 `tracer-max-code-growth' 8614 Stop tail duplication once code growth has reached given 8615 percentage. This is a rather artificial limit, as most of 8616 the duplicates are eliminated later in cross jumping, so it 8617 may be set to much higher values than is the desired code 8618 growth. 8619 8620 `tracer-min-branch-ratio' 8621 Stop reverse growth when the reverse probability of best edge 8622 is less than this threshold (in percent). 8623 8624 `tracer-min-branch-ratio' 8625 `tracer-min-branch-ratio-feedback' 8626 Stop forward growth if the best edge has probability lower 8627 than this threshold. 8628 8629 Similarly to `tracer-dynamic-coverage' two values are 8630 present, one for compilation for profile feedback and one for 8631 compilation without. The value for compilation with profile 8632 feedback needs to be more conservative (higher) in order to 8633 make tracer effective. 8634 8635 `max-cse-path-length' 8636 The maximum number of basic blocks on path that CSE considers. 8637 The default is 10. 8638 8639 `max-cse-insns' 8640 The maximum number of instructions CSE processes before 8641 flushing. The default is 1000. 8642 8643 `ggc-min-expand' 8644 GCC uses a garbage collector to manage its own memory 8645 allocation. This parameter specifies the minimum percentage 8646 by which the garbage collector's heap should be allowed to 8647 expand between collections. Tuning this may improve 8648 compilation speed; it has no effect on code generation. 8649 8650 The default is 30% + 70% * (RAM/1GB) with an upper bound of 8651 100% when RAM >= 1GB. If `getrlimit' is available, the 8652 notion of "RAM" is the smallest of actual RAM and 8653 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 8654 calculate RAM on a particular platform, the lower bound of 8655 30% is used. Setting this parameter and `ggc-min-heapsize' 8656 to zero causes a full collection to occur at every 8657 opportunity. This is extremely slow, but can be useful for 8658 debugging. 8659 8660 `ggc-min-heapsize' 8661 Minimum size of the garbage collector's heap before it begins 8662 bothering to collect garbage. The first collection occurs 8663 after the heap expands by `ggc-min-expand'% beyond 8664 `ggc-min-heapsize'. Again, tuning this may improve 8665 compilation speed, and has no effect on code generation. 8666 8667 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 8668 that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 8669 exceeded, but with a lower bound of 4096 (four megabytes) and 8670 an upper bound of 131072 (128 megabytes). If GCC is not able 8671 to calculate RAM on a particular platform, the lower bound is 8672 used. Setting this parameter very large effectively disables 8673 garbage collection. Setting this parameter and 8674 `ggc-min-expand' to zero causes a full collection to occur at 8675 every opportunity. 8676 8677 `max-reload-search-insns' 8678 The maximum number of instruction reload should look backward 8679 for equivalent register. Increasing values mean more 8680 aggressive optimization, making the compilation time increase 8681 with probably slightly better performance. The default value 8682 is 100. 8683 8684 `max-cselib-memory-locations' 8685 The maximum number of memory locations cselib should take 8686 into account. Increasing values mean more aggressive 8687 optimization, making the compilation time increase with 8688 probably slightly better performance. The default value is 8689 500. 8690 8691 `reorder-blocks-duplicate' 8692 `reorder-blocks-duplicate-feedback' 8693 Used by the basic block reordering pass to decide whether to 8694 use unconditional branch or duplicate the code on its 8695 destination. Code is duplicated when its estimated size is 8696 smaller than this value multiplied by the estimated size of 8697 unconditional jump in the hot spots of the program. 8698 8699 The `reorder-block-duplicate-feedback' is used only when 8700 profile feedback is available. It may be set to higher 8701 values than `reorder-block-duplicate' since information about 8702 the hot spots is more accurate. 8703 8704 `max-sched-ready-insns' 8705 The maximum number of instructions ready to be issued the 8706 scheduler should consider at any given time during the first 8707 scheduling pass. Increasing values mean more thorough 8708 searches, making the compilation time increase with probably 8709 little benefit. The default value is 100. 8710 8711 `max-sched-region-blocks' 8712 The maximum number of blocks in a region to be considered for 8713 interblock scheduling. The default value is 10. 8714 8715 `max-pipeline-region-blocks' 8716 The maximum number of blocks in a region to be considered for 8717 pipelining in the selective scheduler. The default value is 8718 15. 8719 8720 `max-sched-region-insns' 8721 The maximum number of insns in a region to be considered for 8722 interblock scheduling. The default value is 100. 8723 8724 `max-pipeline-region-insns' 8725 The maximum number of insns in a region to be considered for 8726 pipelining in the selective scheduler. The default value is 8727 200. 8728 8729 `min-spec-prob' 8730 The minimum probability (in percents) of reaching a source 8731 block for interblock speculative scheduling. The default 8732 value is 40. 8733 8734 `max-sched-extend-regions-iters' 8735 The maximum number of iterations through CFG to extend 8736 regions. A value of 0 (the default) disables region 8737 extensions. 8738 8739 `max-sched-insn-conflict-delay' 8740 The maximum conflict delay for an insn to be considered for 8741 speculative motion. The default value is 3. 8742 8743 `sched-spec-prob-cutoff' 8744 The minimal probability of speculation success (in percents), 8745 so that speculative insns are scheduled. The default value 8746 is 40. 8747 8748 `sched-spec-state-edge-prob-cutoff' 8749 The minimum probability an edge must have for the scheduler 8750 to save its state across it. The default value is 10. 8751 8752 `sched-mem-true-dep-cost' 8753 Minimal distance (in CPU cycles) between store and load 8754 targeting same memory locations. The default value is 1. 8755 8756 `selsched-max-lookahead' 8757 The maximum size of the lookahead window of selective 8758 scheduling. It is a depth of search for available 8759 instructions. The default value is 50. 8760 8761 `selsched-max-sched-times' 8762 The maximum number of times that an instruction is scheduled 8763 during selective scheduling. This is the limit on the number 8764 of iterations through which the instruction may be pipelined. 8765 The default value is 2. 8766 8767 `selsched-max-insns-to-rename' 8768 The maximum number of best instructions in the ready list 8769 that are considered for renaming in the selective scheduler. 8770 The default value is 2. 8771 8772 `sms-min-sc' 8773 The minimum value of stage count that swing modulo scheduler 8774 generates. The default value is 2. 8775 8776 `max-last-value-rtl' 8777 The maximum size measured as number of RTLs that can be 8778 recorded in an expression in combiner for a pseudo register 8779 as last known value of that register. The default is 10000. 8780 8781 `integer-share-limit' 8782 Small integer constants can use a shared data structure, 8783 reducing the compiler's memory usage and increasing its 8784 speed. This sets the maximum value of a shared integer 8785 constant. The default value is 256. 8786 8787 `ssp-buffer-size' 8788 The minimum size of buffers (i.e. arrays) that receive stack 8789 smashing protection when `-fstack-protection' is used. 8790 8791 `max-jump-thread-duplication-stmts' 8792 Maximum number of statements allowed in a block that needs to 8793 be duplicated when threading jumps. 8794 8795 `max-fields-for-field-sensitive' 8796 Maximum number of fields in a structure treated in a field 8797 sensitive manner during pointer analysis. The default is zero 8798 for `-O0' and `-O1', and 100 for `-Os', `-O2', and `-O3'. 8799 8800 `prefetch-latency' 8801 Estimate on average number of instructions that are executed 8802 before prefetch finishes. The distance prefetched ahead is 8803 proportional to this constant. Increasing this number may 8804 also lead to less streams being prefetched (see 8805 `simultaneous-prefetches'). 8806 8807 `simultaneous-prefetches' 8808 Maximum number of prefetches that can run at the same time. 8809 8810 `l1-cache-line-size' 8811 The size of cache line in L1 cache, in bytes. 8812 8813 `l1-cache-size' 8814 The size of L1 cache, in kilobytes. 8815 8816 `l2-cache-size' 8817 The size of L2 cache, in kilobytes. 8818 8819 `min-insn-to-prefetch-ratio' 8820 The minimum ratio between the number of instructions and the 8821 number of prefetches to enable prefetching in a loop. 8822 8823 `prefetch-min-insn-to-mem-ratio' 8824 The minimum ratio between the number of instructions and the 8825 number of memory references to enable prefetching in a loop. 8826 8827 `use-canonical-types' 8828 Whether the compiler should use the "canonical" type system. 8829 By default, this should always be 1, which uses a more 8830 efficient internal mechanism for comparing types in C++ and 8831 Objective-C++. However, if bugs in the canonical type system 8832 are causing compilation failures, set this value to 0 to 8833 disable canonical types. 8834 8835 `switch-conversion-max-branch-ratio' 8836 Switch initialization conversion refuses to create arrays 8837 that are bigger than `switch-conversion-max-branch-ratio' 8838 times the number of branches in the switch. 8839 8840 `max-partial-antic-length' 8841 Maximum length of the partial antic set computed during the 8842 tree partial redundancy elimination optimization 8843 (`-ftree-pre') when optimizing at `-O3' and above. For some 8844 sorts of source code the enhanced partial redundancy 8845 elimination optimization can run away, consuming all of the 8846 memory available on the host machine. This parameter sets a 8847 limit on the length of the sets that are computed, which 8848 prevents the runaway behavior. Setting a value of 0 for this 8849 parameter allows an unlimited set length. 8850 8851 `sccvn-max-scc-size' 8852 Maximum size of a strongly connected component (SCC) during 8853 SCCVN processing. If this limit is hit, SCCVN processing for 8854 the whole function is not done and optimizations depending on 8855 it are disabled. The default maximum SCC size is 10000. 8856 8857 `sccvn-max-alias-queries-per-access' 8858 Maximum number of alias-oracle queries we perform when 8859 looking for redundancies for loads and stores. If this limit 8860 is hit the search is aborted and the load or store is not 8861 considered redundant. The number of queries is 8862 algorithmically limited to the number of stores on all paths 8863 from the load to the function entry. The default maxmimum 8864 number of queries is 1000. 8865 8866 `ira-max-loops-num' 8867 IRA uses regional register allocation by default. If a 8868 function contains more loops than the number given by this 8869 parameter, only at most the given number of the most 8870 frequently-executed loops form regions for regional register 8871 allocation. The default value of the parameter is 100. 8872 8873 `ira-max-conflict-table-size' 8874 Although IRA uses a sophisticated algorithm to compress the 8875 conflict table, the table can still require excessive amounts 8876 of memory for huge functions. If the conflict table for a 8877 function could be more than the size in MB given by this 8878 parameter, the register allocator instead uses a faster, 8879 simpler, and lower-quality algorithm that does not require 8880 building a pseudo-register conflict table. The default value 8881 of the parameter is 2000. 8882 8883 `ira-loop-reserved-regs' 8884 IRA can be used to evaluate more accurate register pressure 8885 in loops for decisions to move loop invariants (see `-O3'). 8886 The number of available registers reserved for some other 8887 purposes is given by this parameter. The default value of 8888 the parameter is 2, which is the minimal number of registers 8889 needed by typical instructions. This value is the best found 8890 from numerous experiments. 8891 8892 `loop-invariant-max-bbs-in-loop' 8893 Loop invariant motion can be very expensive, both in 8894 compilation time and in amount of needed compile-time memory, 8895 with very large loops. Loops with more basic blocks than 8896 this parameter won't have loop invariant motion optimization 8897 performed on them. The default value of the parameter is 8898 1000 for `-O1' and 10000 for `-O2' and above. 8899 8900 `loop-max-datarefs-for-datadeps' 8901 Building data dapendencies is expensive for very large loops. 8902 This parameter limits the number of data references in loops 8903 that are considered for data dependence analysis. These 8904 large loops are no handled by the optimizations using loop 8905 data dependencies. The default value is 1000. 8906 8907 `max-vartrack-size' 8908 Sets a maximum number of hash table slots to use during 8909 variable tracking dataflow analysis of any function. If this 8910 limit is exceeded with variable tracking at assignments 8911 enabled, analysis for that function is retried without it, 8912 after removing all debug insns from the function. If the 8913 limit is exceeded even without debug insns, var tracking 8914 analysis is completely disabled for the function. Setting 8915 the parameter to zero makes it unlimited. 8916 8917 `max-vartrack-expr-depth' 8918 Sets a maximum number of recursion levels when attempting to 8919 map variable names or debug temporaries to value expressions. 8920 This trades compilation time for more complete debug 8921 information. If this is set too low, value expressions that 8922 are available and could be represented in debug information 8923 may end up not being used; setting this higher may enable the 8924 compiler to find more complex debug expressions, but compile 8925 time and memory use may grow. The default is 12. 8926 8927 `min-nondebug-insn-uid' 8928 Use uids starting at this parameter for nondebug insns. The 8929 range below the parameter is reserved exclusively for debug 8930 insns created by `-fvar-tracking-assignments', but debug 8931 insns may get (non-overlapping) uids above it if the reserved 8932 range is exhausted. 8933 8934 `ipa-sra-ptr-growth-factor' 8935 IPA-SRA replaces a pointer to an aggregate with one or more 8936 new parameters only when their cumulative size is less or 8937 equal to `ipa-sra-ptr-growth-factor' times the size of the 8938 original pointer parameter. 8939 8940 `tm-max-aggregate-size' 8941 When making copies of thread-local variables in a 8942 transaction, this parameter specifies the size in bytes after 8943 which variables are saved with the logging functions as 8944 opposed to save/restore code sequence pairs. This option 8945 only applies when using `-fgnu-tm'. 8946 8947 `graphite-max-nb-scop-params' 8948 To avoid exponential effects in the Graphite loop transforms, 8949 the number of parameters in a Static Control Part (SCoP) is 8950 bounded. The default value is 10 parameters. A variable 8951 whose value is unknown at compilation time and defined 8952 outside a SCoP is a parameter of the SCoP. 8953 8954 `graphite-max-bbs-per-function' 8955 To avoid exponential effects in the detection of SCoPs, the 8956 size of the functions analyzed by Graphite is bounded. The 8957 default value is 100 basic blocks. 8958 8959 `loop-block-tile-size' 8960 Loop blocking or strip mining transforms, enabled with 8961 `-floop-block' or `-floop-strip-mine', strip mine each loop 8962 in the loop nest by a given number of iterations. The strip 8963 length can be changed using the `loop-block-tile-size' 8964 parameter. The default value is 51 iterations. 8965 8966 `ipa-cp-value-list-size' 8967 IPA-CP attempts to track all possible values and types passed 8968 to a function's parameter in order to propagate them and 8969 perform devirtualization. `ipa-cp-value-list-size' is the 8970 maximum number of values and types it stores per one formal 8971 parameter of a function. 8972 8973 `lto-partitions' 8974 Specify desired number of partitions produced during WHOPR 8975 compilation. The number of partitions should exceed the 8976 number of CPUs used for compilation. The default value is 32. 8977 8978 `lto-minpartition' 8979 Size of minimal partition for WHOPR (in estimated 8980 instructions). This prevents expenses of splitting very 8981 small programs into too many partitions. 8982 8983 `cxx-max-namespaces-for-diagnostic-help' 8984 The maximum number of namespaces to consult for suggestions 8985 when C++ name lookup fails for an identifier. The default is 8986 1000. 8987 8988 `sink-frequency-threshold' 8989 The maximum relative execution frequency (in percents) of the 8990 target block relative to a statement's original block to 8991 allow statement sinking of a statement. Larger numbers 8992 result in more aggressive statement sinking. The default 8993 value is 75. A small positive adjustment is applied for 8994 statements with memory operands as those are even more 8995 profitable so sink. 8996 8997 `max-stores-to-sink' 8998 The maximum number of conditional stores paires that can be 8999 sunk. Set to 0 if either vectorization (`-ftree-vectorize') 9000 or if-conversion (`-ftree-loop-if-convert') is disabled. The 9001 default is 2. 9002 9003 `allow-load-data-races' 9004 Allow optimizers to introduce new data races on loads. Set 9005 to 1 to allow, otherwise to 0. This option is enabled by 9006 default unless implicitly set by the `-fmemory-model=' option. 9007 9008 `allow-store-data-races' 9009 Allow optimizers to introduce new data races on stores. Set 9010 to 1 to allow, otherwise to 0. This option is enabled by 9011 default unless implicitly set by the `-fmemory-model=' option. 9012 9013 `allow-packed-load-data-races' 9014 Allow optimizers to introduce new data races on packed data 9015 loads. Set to 1 to allow, otherwise to 0. This option is 9016 enabled by default unless implicitly set by the 9017 `-fmemory-model=' option. 9018 9019 `allow-packed-store-data-races' 9020 Allow optimizers to introduce new data races on packed data 9021 stores. Set to 1 to allow, otherwise to 0. This option is 9022 enabled by default unless implicitly set by the 9023 `-fmemory-model=' option. 9024 9025 `case-values-threshold' 9026 The smallest number of different values for which it is best 9027 to use a jump-table instead of a tree of conditional 9028 branches. If the value is 0, use the default for the 9029 machine. The default is 0. 9030 9031 `tree-reassoc-width' 9032 Set the maximum number of instructions executed in parallel in 9033 reassociated tree. This parameter overrides target dependent 9034 heuristics used by default if has non zero value. 9035 9036 `sched-pressure-algorithm' 9037 Choose between the two available implementations of 9038 `-fsched-pressure'. Algorithm 1 is the original 9039 implementation and is the more likely to prevent instructions 9040 from being reordered. Algorithm 2 was designed to be a 9041 compromise between the relatively conservative approach taken 9042 by algorithm 1 and the rather aggressive approach taken by 9043 the default scheduler. It relies more heavily on having a 9044 regular register file and accurate register pressure classes. 9045 See `haifa-sched.c' in the GCC sources for more details. 9046 9047 The default choice depends on the target. 9048 9049 `max-slsr-cand-scan' 9050 Set the maximum number of existing candidates that will be 9051 considered when seeking a basis for a new straight-line 9052 strength reduction candidate. 9053 9054 9055 9056File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 9057 90583.11 Options Controlling the Preprocessor 9059========================================= 9060 9061These options control the C preprocessor, which is run on each C source 9062file before actual compilation. 9063 9064 If you use the `-E' option, nothing is done except preprocessing. 9065Some of these options make sense only together with `-E' because they 9066cause the preprocessor output to be unsuitable for actual compilation. 9067 9068`-Wp,OPTION' 9069 You can use `-Wp,OPTION' to bypass the compiler driver and pass 9070 OPTION directly through to the preprocessor. If OPTION contains 9071 commas, it is split into multiple options at the commas. However, 9072 many options are modified, translated or interpreted by the 9073 compiler driver before being passed to the preprocessor, and `-Wp' 9074 forcibly bypasses this phase. The preprocessor's direct interface 9075 is undocumented and subject to change, so whenever possible you 9076 should avoid using `-Wp' and let the driver handle the options 9077 instead. 9078 9079`-Xpreprocessor OPTION' 9080 Pass OPTION as an option to the preprocessor. You can use this to 9081 supply system-specific preprocessor options that GCC does not 9082 recognize. 9083 9084 If you want to pass an option that takes an argument, you must use 9085 `-Xpreprocessor' twice, once for the option and once for the 9086 argument. 9087 9088`-no-integrated-cpp' 9089 Perform preprocessing as a separate pass before compilation. By 9090 default, GCC performs preprocessing as an integrated part of input 9091 tokenization and parsing. If this option is provided, the 9092 appropriate language front end (`cc1', `cc1plus', or `cc1obj' for 9093 C, C++, and Objective-C, respectively) is instead invoked twice, 9094 once for preprocessing only and once for actual compilation of the 9095 preprocessed input. This option may be useful in conjunction with 9096 the `-B' or `-wrapper' options to specify an alternate 9097 preprocessor or perform additional processing of the program 9098 source between normal preprocessing and compilation. 9099 9100`-D NAME' 9101 Predefine NAME as a macro, with definition `1'. 9102 9103`-D NAME=DEFINITION' 9104 The contents of DEFINITION are tokenized and processed as if they 9105 appeared during translation phase three in a `#define' directive. 9106 In particular, the definition will be truncated by embedded 9107 newline characters. 9108 9109 If you are invoking the preprocessor from a shell or shell-like 9110 program you may need to use the shell's quoting syntax to protect 9111 characters such as spaces that have a meaning in the shell syntax. 9112 9113 If you wish to define a function-like macro on the command line, 9114 write its argument list with surrounding parentheses before the 9115 equals sign (if any). Parentheses are meaningful to most shells, 9116 so you will need to quote the option. With `sh' and `csh', 9117 `-D'NAME(ARGS...)=DEFINITION'' works. 9118 9119 `-D' and `-U' options are processed in the order they are given on 9120 the command line. All `-imacros FILE' and `-include FILE' options 9121 are processed after all `-D' and `-U' options. 9122 9123`-U NAME' 9124 Cancel any previous definition of NAME, either built in or 9125 provided with a `-D' option. 9126 9127`-undef' 9128 Do not predefine any system-specific or GCC-specific macros. The 9129 standard predefined macros remain defined. 9130 9131`-I DIR' 9132 Add the directory DIR to the list of directories to be searched 9133 for header files. Directories named by `-I' are searched before 9134 the standard system include directories. If the directory DIR is 9135 a standard system include directory, the option is ignored to 9136 ensure that the default search order for system directories and 9137 the special treatment of system headers are not defeated . If DIR 9138 begins with `=', then the `=' will be replaced by the sysroot 9139 prefix; see `--sysroot' and `-isysroot'. 9140 9141`-o FILE' 9142 Write output to FILE. This is the same as specifying FILE as the 9143 second non-option argument to `cpp'. `gcc' has a different 9144 interpretation of a second non-option argument, so you must use 9145 `-o' to specify the output file. 9146 9147`-Wall' 9148 Turns on all optional warnings which are desirable for normal code. 9149 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 9150 warning about integer promotion causing a change of sign in `#if' 9151 expressions. Note that many of the preprocessor's warnings are on 9152 by default and have no options to control them. 9153 9154`-Wcomment' 9155`-Wcomments' 9156 Warn whenever a comment-start sequence `/*' appears in a `/*' 9157 comment, or whenever a backslash-newline appears in a `//' comment. 9158 (Both forms have the same effect.) 9159 9160`-Wtrigraphs' 9161 Most trigraphs in comments cannot affect the meaning of the 9162 program. However, a trigraph that would form an escaped newline 9163 (`??/' at the end of a line) can, by changing where the comment 9164 begins or ends. Therefore, only trigraphs that would form escaped 9165 newlines produce warnings inside a comment. 9166 9167 This option is implied by `-Wall'. If `-Wall' is not given, this 9168 option is still enabled unless trigraphs are enabled. To get 9169 trigraph conversion without warnings, but get the other `-Wall' 9170 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 9171 9172`-Wtraditional' 9173 Warn about certain constructs that behave differently in 9174 traditional and ISO C. Also warn about ISO C constructs that have 9175 no traditional C equivalent, and problematic constructs which 9176 should be avoided. 9177 9178`-Wundef' 9179 Warn whenever an identifier which is not a macro is encountered in 9180 an `#if' directive, outside of `defined'. Such identifiers are 9181 replaced with zero. 9182 9183`-Wunused-macros' 9184 Warn about macros defined in the main file that are unused. A 9185 macro is "used" if it is expanded or tested for existence at least 9186 once. The preprocessor will also warn if the macro has not been 9187 used at the time it is redefined or undefined. 9188 9189 Built-in macros, macros defined on the command line, and macros 9190 defined in include files are not warned about. 9191 9192 _Note:_ If a macro is actually used, but only used in skipped 9193 conditional blocks, then CPP will report it as unused. To avoid 9194 the warning in such a case, you might improve the scope of the 9195 macro's definition by, for example, moving it into the first 9196 skipped block. Alternatively, you could provide a dummy use with 9197 something like: 9198 9199 #if defined the_macro_causing_the_warning 9200 #endif 9201 9202`-Wendif-labels' 9203 Warn whenever an `#else' or an `#endif' are followed by text. 9204 This usually happens in code of the form 9205 9206 #if FOO 9207 ... 9208 #else FOO 9209 ... 9210 #endif FOO 9211 9212 The second and third `FOO' should be in comments, but often are not 9213 in older programs. This warning is on by default. 9214 9215`-Werror' 9216 Make all warnings into hard errors. Source code which triggers 9217 warnings will be rejected. 9218 9219`-Wsystem-headers' 9220 Issue warnings for code in system headers. These are normally 9221 unhelpful in finding bugs in your own code, therefore suppressed. 9222 If you are responsible for the system library, you may want to see 9223 them. 9224 9225`-w' 9226 Suppress all warnings, including those which GNU CPP issues by 9227 default. 9228 9229`-pedantic' 9230 Issue all the mandatory diagnostics listed in the C standard. 9231 Some of them are left out by default, since they trigger 9232 frequently on harmless code. 9233 9234`-pedantic-errors' 9235 Issue all the mandatory diagnostics, and make all mandatory 9236 diagnostics into errors. This includes mandatory diagnostics that 9237 GCC issues without `-pedantic' but treats as warnings. 9238 9239`-M' 9240 Instead of outputting the result of preprocessing, output a rule 9241 suitable for `make' describing the dependencies of the main source 9242 file. The preprocessor outputs one `make' rule containing the 9243 object file name for that source file, a colon, and the names of 9244 all the included files, including those coming from `-include' or 9245 `-imacros' command line options. 9246 9247 Unless specified explicitly (with `-MT' or `-MQ'), the object file 9248 name consists of the name of the source file with any suffix 9249 replaced with object file suffix and with any leading directory 9250 parts removed. If there are many included files then the rule is 9251 split into several lines using `\'-newline. The rule has no 9252 commands. 9253 9254 This option does not suppress the preprocessor's debug output, 9255 such as `-dM'. To avoid mixing such debug output with the 9256 dependency rules you should explicitly specify the dependency 9257 output file with `-MF', or use an environment variable like 9258 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 9259 output will still be sent to the regular output stream as normal. 9260 9261 Passing `-M' to the driver implies `-E', and suppresses warnings 9262 with an implicit `-w'. 9263 9264`-MM' 9265 Like `-M' but do not mention header files that are found in system 9266 header directories, nor header files that are included, directly 9267 or indirectly, from such a header. 9268 9269 This implies that the choice of angle brackets or double quotes in 9270 an `#include' directive does not in itself determine whether that 9271 header will appear in `-MM' dependency output. This is a slight 9272 change in semantics from GCC versions 3.0 and earlier. 9273 9274`-MF FILE' 9275 When used with `-M' or `-MM', specifies a file to write the 9276 dependencies to. If no `-MF' switch is given the preprocessor 9277 sends the rules to the same place it would have sent preprocessed 9278 output. 9279 9280 When used with the driver options `-MD' or `-MMD', `-MF' overrides 9281 the default dependency output file. 9282 9283`-MG' 9284 In conjunction with an option such as `-M' requesting dependency 9285 generation, `-MG' assumes missing header files are generated files 9286 and adds them to the dependency list without raising an error. 9287 The dependency filename is taken directly from the `#include' 9288 directive without prepending any path. `-MG' also suppresses 9289 preprocessed output, as a missing header file renders this useless. 9290 9291 This feature is used in automatic updating of makefiles. 9292 9293`-MP' 9294 This option instructs CPP to add a phony target for each dependency 9295 other than the main file, causing each to depend on nothing. These 9296 dummy rules work around errors `make' gives if you remove header 9297 files without updating the `Makefile' to match. 9298 9299 This is typical output: 9300 9301 test.o: test.c test.h 9302 9303 test.h: 9304 9305`-MT TARGET' 9306 Change the target of the rule emitted by dependency generation. By 9307 default CPP takes the name of the main input file, deletes any 9308 directory components and any file suffix such as `.c', and appends 9309 the platform's usual object suffix. The result is the target. 9310 9311 An `-MT' option will set the target to be exactly the string you 9312 specify. If you want multiple targets, you can specify them as a 9313 single argument to `-MT', or use multiple `-MT' options. 9314 9315 For example, `-MT '$(objpfx)foo.o'' might give 9316 9317 $(objpfx)foo.o: foo.c 9318 9319`-MQ TARGET' 9320 Same as `-MT', but it quotes any characters which are special to 9321 Make. `-MQ '$(objpfx)foo.o'' gives 9322 9323 $$(objpfx)foo.o: foo.c 9324 9325 The default target is automatically quoted, as if it were given 9326 with `-MQ'. 9327 9328`-MD' 9329 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 9330 implied. The driver determines FILE based on whether an `-o' 9331 option is given. If it is, the driver uses its argument but with 9332 a suffix of `.d', otherwise it takes the name of the input file, 9333 removes any directory components and suffix, and applies a `.d' 9334 suffix. 9335 9336 If `-MD' is used in conjunction with `-E', any `-o' switch is 9337 understood to specify the dependency output file (*note -MF: 9338 dashMF.), but if used without `-E', each `-o' is understood to 9339 specify a target object file. 9340 9341 Since `-E' is not implied, `-MD' can be used to generate a 9342 dependency output file as a side-effect of the compilation process. 9343 9344`-MMD' 9345 Like `-MD' except mention only user header files, not system 9346 header files. 9347 9348`-fpch-deps' 9349 When using precompiled headers (*note Precompiled Headers::), this 9350 flag will cause the dependency-output flags to also list the files 9351 from the precompiled header's dependencies. If not specified only 9352 the precompiled header would be listed and not the files that were 9353 used to create it because those files are not consulted when a 9354 precompiled header is used. 9355 9356`-fpch-preprocess' 9357 This option allows use of a precompiled header (*note Precompiled 9358 Headers::) together with `-E'. It inserts a special `#pragma', 9359 `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the 9360 place where the precompiled header was found, and its FILENAME. 9361 When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and 9362 loads the PCH. 9363 9364 This option is off by default, because the resulting preprocessed 9365 output is only really suitable as input to GCC. It is switched on 9366 by `-save-temps'. 9367 9368 You should not write this `#pragma' in your own code, but it is 9369 safe to edit the filename if the PCH file is available in a 9370 different location. The filename may be absolute or it may be 9371 relative to GCC's current directory. 9372 9373`-x c' 9374`-x c++' 9375`-x objective-c' 9376`-x assembler-with-cpp' 9377 Specify the source language: C, C++, Objective-C, or assembly. 9378 This has nothing to do with standards conformance or extensions; 9379 it merely selects which base syntax to expect. If you give none 9380 of these options, cpp will deduce the language from the extension 9381 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 9382 extensions for C++ and assembly are also recognized. If cpp does 9383 not recognize the extension, it will treat the file as C; this is 9384 the most generic mode. 9385 9386 _Note:_ Previous versions of cpp accepted a `-lang' option which 9387 selected both the language and the standards conformance level. 9388 This option has been removed, because it conflicts with the `-l' 9389 option. 9390 9391`-std=STANDARD' 9392`-ansi' 9393 Specify the standard to which the code should conform. Currently 9394 CPP knows about C and C++ standards; others may be added in the 9395 future. 9396 9397 STANDARD may be one of: 9398 `c90' 9399 `c89' 9400 `iso9899:1990' 9401 The ISO C standard from 1990. `c90' is the customary 9402 shorthand for this version of the standard. 9403 9404 The `-ansi' option is equivalent to `-std=c90'. 9405 9406 `iso9899:199409' 9407 The 1990 C standard, as amended in 1994. 9408 9409 `iso9899:1999' 9410 `c99' 9411 `iso9899:199x' 9412 `c9x' 9413 The revised ISO C standard, published in December 1999. 9414 Before publication, this was known as C9X. 9415 9416 `iso9899:2011' 9417 `c11' 9418 `c1x' 9419 The revised ISO C standard, published in December 2011. 9420 Before publication, this was known as C1X. 9421 9422 `gnu90' 9423 `gnu89' 9424 The 1990 C standard plus GNU extensions. This is the default. 9425 9426 `gnu99' 9427 `gnu9x' 9428 The 1999 C standard plus GNU extensions. 9429 9430 `gnu11' 9431 `gnu1x' 9432 The 2011 C standard plus GNU extensions. 9433 9434 `c++98' 9435 The 1998 ISO C++ standard plus amendments. 9436 9437 `gnu++98' 9438 The same as `-std=c++98' plus GNU extensions. This is the 9439 default for C++ code. 9440 9441`-I-' 9442 Split the include path. Any directories specified with `-I' 9443 options before `-I-' are searched only for headers requested with 9444 `#include "FILE"'; they are not searched for `#include <FILE>'. 9445 If additional directories are specified with `-I' options after 9446 the `-I-', those directories are searched for all `#include' 9447 directives. 9448 9449 In addition, `-I-' inhibits the use of the directory of the current 9450 file directory as the first search directory for `#include "FILE"'. 9451 This option has been deprecated. 9452 9453`-nostdinc' 9454 Do not search the standard system directories for header files. 9455 Only the directories you have specified with `-I' options (and the 9456 directory of the current file, if appropriate) are searched. 9457 9458`-nostdinc++' 9459 Do not search for header files in the C++-specific standard 9460 directories, but do still search the other standard directories. 9461 (This option is used when building the C++ library.) 9462 9463`-include FILE' 9464 Process FILE as if `#include "file"' appeared as the first line of 9465 the primary source file. However, the first directory searched 9466 for FILE is the preprocessor's working directory _instead of_ the 9467 directory containing the main source file. If not found there, it 9468 is searched for in the remainder of the `#include "..."' search 9469 chain as normal. 9470 9471 If multiple `-include' options are given, the files are included 9472 in the order they appear on the command line. 9473 9474`-imacros FILE' 9475 Exactly like `-include', except that any output produced by 9476 scanning FILE is thrown away. Macros it defines remain defined. 9477 This allows you to acquire all the macros from a header without 9478 also processing its declarations. 9479 9480 All files specified by `-imacros' are processed before all files 9481 specified by `-include'. 9482 9483`-idirafter DIR' 9484 Search DIR for header files, but do it _after_ all directories 9485 specified with `-I' and the standard system directories have been 9486 exhausted. DIR is treated as a system include directory. If DIR 9487 begins with `=', then the `=' will be replaced by the sysroot 9488 prefix; see `--sysroot' and `-isysroot'. 9489 9490`-iprefix PREFIX' 9491 Specify PREFIX as the prefix for subsequent `-iwithprefix' 9492 options. If the prefix represents a directory, you should include 9493 the final `/'. 9494 9495`-iwithprefix DIR' 9496`-iwithprefixbefore DIR' 9497 Append DIR to the prefix specified previously with `-iprefix', and 9498 add the resulting directory to the include search path. 9499 `-iwithprefixbefore' puts it in the same place `-I' would; 9500 `-iwithprefix' puts it where `-idirafter' would. 9501 9502`-isysroot DIR' 9503 This option is like the `--sysroot' option, but applies only to 9504 header files (except for Darwin targets, where it applies to both 9505 header files and libraries). See the `--sysroot' option for more 9506 information. 9507 9508`-imultilib DIR' 9509 Use DIR as a subdirectory of the directory containing 9510 target-specific C++ headers. 9511 9512`-isystem DIR' 9513 Search DIR for header files, after all directories specified by 9514 `-I' but before the standard system directories. Mark it as a 9515 system directory, so that it gets the same special treatment as is 9516 applied to the standard system directories. If DIR begins with 9517 `=', then the `=' will be replaced by the sysroot prefix; see 9518 `--sysroot' and `-isysroot'. 9519 9520`-iquote DIR' 9521 Search DIR only for header files requested with `#include "FILE"'; 9522 they are not searched for `#include <FILE>', before all 9523 directories specified by `-I' and before the standard system 9524 directories. If DIR begins with `=', then the `=' will be replaced 9525 by the sysroot prefix; see `--sysroot' and `-isysroot'. 9526 9527`-fdirectives-only' 9528 When preprocessing, handle directives, but do not expand macros. 9529 9530 The option's behavior depends on the `-E' and `-fpreprocessed' 9531 options. 9532 9533 With `-E', preprocessing is limited to the handling of directives 9534 such as `#define', `#ifdef', and `#error'. Other preprocessor 9535 operations, such as macro expansion and trigraph conversion are 9536 not performed. In addition, the `-dD' option is implicitly 9537 enabled. 9538 9539 With `-fpreprocessed', predefinition of command line and most 9540 builtin macros is disabled. Macros such as `__LINE__', which are 9541 contextually dependent, are handled normally. This enables 9542 compilation of files previously preprocessed with `-E 9543 -fdirectives-only'. 9544 9545 With both `-E' and `-fpreprocessed', the rules for 9546 `-fpreprocessed' take precedence. This enables full preprocessing 9547 of files previously preprocessed with `-E -fdirectives-only'. 9548 9549`-fdollars-in-identifiers' 9550 Accept `$' in identifiers. 9551 9552`-fextended-identifiers' 9553 Accept universal character names in identifiers. This option is 9554 experimental; in a future version of GCC, it will be enabled by 9555 default for C99 and C++. 9556 9557`-fno-canonical-system-headers' 9558 When preprocessing, do not shorten system header paths with 9559 canonicalization. 9560 9561`-fpreprocessed' 9562 Indicate to the preprocessor that the input file has already been 9563 preprocessed. This suppresses things like macro expansion, 9564 trigraph conversion, escaped newline splicing, and processing of 9565 most directives. The preprocessor still recognizes and removes 9566 comments, so that you can pass a file preprocessed with `-C' to 9567 the compiler without problems. In this mode the integrated 9568 preprocessor is little more than a tokenizer for the front ends. 9569 9570 `-fpreprocessed' is implicit if the input file has one of the 9571 extensions `.i', `.ii' or `.mi'. These are the extensions that 9572 GCC uses for preprocessed files created by `-save-temps'. 9573 9574`-ftabstop=WIDTH' 9575 Set the distance between tab stops. This helps the preprocessor 9576 report correct column numbers in warnings or errors, even if tabs 9577 appear on the line. If the value is less than 1 or greater than 9578 100, the option is ignored. The default is 8. 9579 9580`-fdebug-cpp' 9581 This option is only useful for debugging GCC. When used with 9582 `-E', dumps debugging information about location maps. Every 9583 token in the output is preceded by the dump of the map its location 9584 belongs to. The dump of the map holding the location of a token 9585 would be: 9586 {`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} 9587 9588 When used without `-E', this option has no effect. 9589 9590`-ftrack-macro-expansion[=LEVEL]' 9591 Track locations of tokens across macro expansions. This allows the 9592 compiler to emit diagnostic about the current macro expansion stack 9593 when a compilation error occurs in a macro expansion. Using this 9594 option makes the preprocessor and the compiler consume more 9595 memory. The LEVEL parameter can be used to choose the level of 9596 precision of token location tracking thus decreasing the memory 9597 consumption if necessary. Value `0' of LEVEL de-activates this 9598 option just as if no `-ftrack-macro-expansion' was present on the 9599 command line. Value `1' tracks tokens locations in a degraded mode 9600 for the sake of minimal memory overhead. In this mode all tokens 9601 resulting from the expansion of an argument of a function-like 9602 macro have the same location. Value `2' tracks tokens locations 9603 completely. This value is the most memory hungry. When this 9604 option is given no argument, the default parameter value is `2'. 9605 9606 Note that -ftrack-macro-expansion=2 is activated by default. 9607 9608`-fexec-charset=CHARSET' 9609 Set the execution character set, used for string and character 9610 constants. The default is UTF-8. CHARSET can be any encoding 9611 supported by the system's `iconv' library routine. 9612 9613`-fwide-exec-charset=CHARSET' 9614 Set the wide execution character set, used for wide string and 9615 character constants. The default is UTF-32 or UTF-16, whichever 9616 corresponds to the width of `wchar_t'. As with `-fexec-charset', 9617 CHARSET can be any encoding supported by the system's `iconv' 9618 library routine; however, you will have problems with encodings 9619 that do not fit exactly in `wchar_t'. 9620 9621`-finput-charset=CHARSET' 9622 Set the input character set, used for translation from the 9623 character set of the input file to the source character set used 9624 by GCC. If the locale does not specify, or GCC cannot get this 9625 information from the locale, the default is UTF-8. This can be 9626 overridden by either the locale or this command line option. 9627 Currently the command line option takes precedence if there's a 9628 conflict. CHARSET can be any encoding supported by the system's 9629 `iconv' library routine. 9630 9631`-fworking-directory' 9632 Enable generation of linemarkers in the preprocessor output that 9633 will let the compiler know the current working directory at the 9634 time of preprocessing. When this option is enabled, the 9635 preprocessor will emit, after the initial linemarker, a second 9636 linemarker with the current working directory followed by two 9637 slashes. GCC will use this directory, when it's present in the 9638 preprocessed input, as the directory emitted as the current 9639 working directory in some debugging information formats. This 9640 option is implicitly enabled if debugging information is enabled, 9641 but this can be inhibited with the negated form 9642 `-fno-working-directory'. If the `-P' flag is present in the 9643 command line, this option has no effect, since no `#line' 9644 directives are emitted whatsoever. 9645 9646`-fno-show-column' 9647 Do not print column numbers in diagnostics. This may be necessary 9648 if diagnostics are being scanned by a program that does not 9649 understand the column numbers, such as `dejagnu'. 9650 9651`-A PREDICATE=ANSWER' 9652 Make an assertion with the predicate PREDICATE and answer ANSWER. 9653 This form is preferred to the older form `-A PREDICATE(ANSWER)', 9654 which is still supported, because it does not use shell special 9655 characters. 9656 9657`-A -PREDICATE=ANSWER' 9658 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 9659 9660`-dCHARS' 9661 CHARS is a sequence of one or more of the following characters, 9662 and must not be preceded by a space. Other characters are 9663 interpreted by the compiler proper, or reserved for future 9664 versions of GCC, and so are silently ignored. If you specify 9665 characters whose behavior conflicts, the result is undefined. 9666 9667 `M' 9668 Instead of the normal output, generate a list of `#define' 9669 directives for all the macros defined during the execution of 9670 the preprocessor, including predefined macros. This gives 9671 you a way of finding out what is predefined in your version 9672 of the preprocessor. Assuming you have no file `foo.h', the 9673 command 9674 9675 touch foo.h; cpp -dM foo.h 9676 9677 will show all the predefined macros. 9678 9679 If you use `-dM' without the `-E' option, `-dM' is 9680 interpreted as a synonym for `-fdump-rtl-mach'. *Note 9681 Debugging Options: (gcc)Debugging Options. 9682 9683 `D' 9684 Like `M' except in two respects: it does _not_ include the 9685 predefined macros, and it outputs _both_ the `#define' 9686 directives and the result of preprocessing. Both kinds of 9687 output go to the standard output file. 9688 9689 `N' 9690 Like `D', but emit only the macro names, not their expansions. 9691 9692 `I' 9693 Output `#include' directives in addition to the result of 9694 preprocessing. 9695 9696 `U' 9697 Like `D' except that only macros that are expanded, or whose 9698 definedness is tested in preprocessor directives, are output; 9699 the output is delayed until the use or test of the macro; and 9700 `#undef' directives are also output for macros tested but 9701 undefined at the time. 9702 9703`-P' 9704 Inhibit generation of linemarkers in the output from the 9705 preprocessor. This might be useful when running the preprocessor 9706 on something that is not C code, and will be sent to a program 9707 which might be confused by the linemarkers. 9708 9709`-C' 9710 Do not discard comments. All comments are passed through to the 9711 output file, except for comments in processed directives, which 9712 are deleted along with the directive. 9713 9714 You should be prepared for side effects when using `-C'; it causes 9715 the preprocessor to treat comments as tokens in their own right. 9716 For example, comments appearing at the start of what would be a 9717 directive line have the effect of turning that line into an 9718 ordinary source line, since the first token on the line is no 9719 longer a `#'. 9720 9721`-CC' 9722 Do not discard comments, including during macro expansion. This is 9723 like `-C', except that comments contained within macros are also 9724 passed through to the output file where the macro is expanded. 9725 9726 In addition to the side-effects of the `-C' option, the `-CC' 9727 option causes all C++-style comments inside a macro to be 9728 converted to C-style comments. This is to prevent later use of 9729 that macro from inadvertently commenting out the remainder of the 9730 source line. 9731 9732 The `-CC' option is generally used to support lint comments. 9733 9734`-traditional-cpp' 9735 Try to imitate the behavior of old-fashioned C preprocessors, as 9736 opposed to ISO C preprocessors. 9737 9738`-trigraphs' 9739 Process trigraph sequences. These are three-character sequences, 9740 all starting with `??', that are defined by ISO C to stand for 9741 single characters. For example, `??/' stands for `\', so `'??/n'' 9742 is a character constant for a newline. By default, GCC ignores 9743 trigraphs, but in standard-conforming modes it converts them. See 9744 the `-std' and `-ansi' options. 9745 9746 The nine trigraphs and their replacements are 9747 9748 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 9749 Replacement: [ ] { } # \ ^ | ~ 9750 9751`-remap' 9752 Enable special code to work around file systems which only permit 9753 very short file names, such as MS-DOS. 9754 9755`--help' 9756`--target-help' 9757 Print text describing all the command line options instead of 9758 preprocessing anything. 9759 9760`-v' 9761 Verbose mode. Print out GNU CPP's version number at the beginning 9762 of execution, and report the final form of the include path. 9763 9764`-H' 9765 Print the name of each header file used, in addition to other 9766 normal activities. Each name is indented to show how deep in the 9767 `#include' stack it is. Precompiled header files are also 9768 printed, even if they are found to be invalid; an invalid 9769 precompiled header file is printed with `...x' and a valid one 9770 with `...!' . 9771 9772`-version' 9773`--version' 9774 Print out GNU CPP's version number. With one dash, proceed to 9775 preprocess as normal. With two dashes, exit immediately. 9776 9777 9778File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 9779 97803.12 Passing Options to the Assembler 9781===================================== 9782 9783You can pass options to the assembler. 9784 9785`-Wa,OPTION' 9786 Pass OPTION as an option to the assembler. If OPTION contains 9787 commas, it is split into multiple options at the commas. 9788 9789`-Xassembler OPTION' 9790 Pass OPTION as an option to the assembler. You can use this to 9791 supply system-specific assembler options that GCC does not 9792 recognize. 9793 9794 If you want to pass an option that takes an argument, you must use 9795 `-Xassembler' twice, once for the option and once for the argument. 9796 9797 9798 9799File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 9800 98013.13 Options for Linking 9802======================== 9803 9804These options come into play when the compiler links object files into 9805an executable output file. They are meaningless if the compiler is not 9806doing a link step. 9807 9808`OBJECT-FILE-NAME' 9809 A file name that does not end in a special recognized suffix is 9810 considered to name an object file or library. (Object files are 9811 distinguished from libraries by the linker according to the file 9812 contents.) If linking is done, these object files are used as 9813 input to the linker. 9814 9815`-c' 9816`-S' 9817`-E' 9818 If any of these options is used, then the linker is not run, and 9819 object file names should not be used as arguments. *Note Overall 9820 Options::. 9821 9822`-lLIBRARY' 9823`-l LIBRARY' 9824 Search the library named LIBRARY when linking. (The second 9825 alternative with the library as a separate argument is only for 9826 POSIX compliance and is not recommended.) 9827 9828 It makes a difference where in the command you write this option; 9829 the linker searches and processes libraries and object files in 9830 the order they are specified. Thus, `foo.o -lz bar.o' searches 9831 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 9832 refers to functions in `z', those functions may not be loaded. 9833 9834 The linker searches a standard list of directories for the library, 9835 which is actually a file named `libLIBRARY.a'. The linker then 9836 uses this file as if it had been specified precisely by name. 9837 9838 The directories searched include several standard system 9839 directories plus any that you specify with `-L'. 9840 9841 Normally the files found this way are library files--archive files 9842 whose members are object files. The linker handles an archive 9843 file by scanning through it for members which define symbols that 9844 have so far been referenced but not defined. But if the file that 9845 is found is an ordinary object file, it is linked in the usual 9846 fashion. The only difference between using an `-l' option and 9847 specifying a file name is that `-l' surrounds LIBRARY with `lib' 9848 and `.a' and searches several directories. 9849 9850`-lobjc' 9851 You need this special case of the `-l' option in order to link an 9852 Objective-C or Objective-C++ program. 9853 9854`-nostartfiles' 9855 Do not use the standard system startup files when linking. The 9856 standard system libraries are used normally, unless `-nostdlib' or 9857 `-nodefaultlibs' is used. 9858 9859`-nodefaultlibs' 9860 Do not use the standard system libraries when linking. Only the 9861 libraries you specify are passed to the linker, and options 9862 specifying linkage of the system libraries, such as 9863 `-static-libgcc' or `-shared-libgcc', are ignored. The standard 9864 startup files are used normally, unless `-nostartfiles' is used. 9865 9866 The compiler may generate calls to `memcmp', `memset', `memcpy' 9867 and `memmove'. These entries are usually resolved by entries in 9868 libc. These entry points should be supplied through some other 9869 mechanism when this option is specified. 9870 9871`-nostdlib' 9872 Do not use the standard system startup files or libraries when 9873 linking. No startup files and only the libraries you specify are 9874 passed to the linker, and options specifying linkage of the system 9875 libraries, such as `-static-libgcc' or `-shared-libgcc', are 9876 ignored. 9877 9878 The compiler may generate calls to `memcmp', `memset', `memcpy' 9879 and `memmove'. These entries are usually resolved by entries in 9880 libc. These entry points should be supplied through some other 9881 mechanism when this option is specified. 9882 9883 One of the standard libraries bypassed by `-nostdlib' and 9884 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 9885 which GCC uses to overcome shortcomings of particular machines, or 9886 special needs for some languages. (*Note Interfacing to GCC 9887 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 9888 most cases, you need `libgcc.a' even when you want to avoid other 9889 standard libraries. In other words, when you specify `-nostdlib' 9890 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 9891 This ensures that you have no unresolved references to internal GCC 9892 library subroutines. (An example of such an internal subroutine 9893 is `__main', used to ensure C++ constructors are called; *note 9894 `collect2': (gccint)Collect2.) 9895 9896`-pie' 9897 Produce a position independent executable on targets that support 9898 it. For predictable results, you must also specify the same set 9899 of options used for compilation (`-fpie', `-fPIE', or model 9900 suboptions) when you specify this linker option. 9901 9902`-rdynamic' 9903 Pass the flag `-export-dynamic' to the ELF linker, on targets that 9904 support it. This instructs the linker to add all symbols, not only 9905 used ones, to the dynamic symbol table. This option is needed for 9906 some uses of `dlopen' or to allow obtaining backtraces from within 9907 a program. 9908 9909`-s' 9910 Remove all symbol table and relocation information from the 9911 executable. 9912 9913`-static' 9914 On systems that support dynamic linking, this prevents linking 9915 with the shared libraries. On other systems, this option has no 9916 effect. 9917 9918`-shared' 9919 Produce a shared object which can then be linked with other 9920 objects to form an executable. Not all systems support this 9921 option. For predictable results, you must also specify the same 9922 set of options used for compilation (`-fpic', `-fPIC', or model 9923 suboptions) when you specify this linker option.(1) 9924 9925`-shared-libgcc' 9926`-static-libgcc' 9927 On systems that provide `libgcc' as a shared library, these options 9928 force the use of either the shared or static version, respectively. 9929 If no shared version of `libgcc' was built when the compiler was 9930 configured, these options have no effect. 9931 9932 There are several situations in which an application should use the 9933 shared `libgcc' instead of the static version. The most common of 9934 these is when the application wishes to throw and catch exceptions 9935 across different shared libraries. In that case, each of the 9936 libraries as well as the application itself should use the shared 9937 `libgcc'. 9938 9939 Therefore, the G++ and GCJ drivers automatically add 9940 `-shared-libgcc' whenever you build a shared library or a main 9941 executable, because C++ and Java programs typically use 9942 exceptions, so this is the right thing to do. 9943 9944 If, instead, you use the GCC driver to create shared libraries, 9945 you may find that they are not always linked with the shared 9946 `libgcc'. If GCC finds, at its configuration time, that you have 9947 a non-GNU linker or a GNU linker that does not support option 9948 `--eh-frame-hdr', it links the shared version of `libgcc' into 9949 shared libraries by default. Otherwise, it takes advantage of the 9950 linker and optimizes away the linking with the shared version of 9951 `libgcc', linking with the static version of libgcc by default. 9952 This allows exceptions to propagate through such shared libraries, 9953 without incurring relocation costs at library load time. 9954 9955 However, if a library or main executable is supposed to throw or 9956 catch exceptions, you must link it using the G++ or GCJ driver, as 9957 appropriate for the languages used in the program, or using the 9958 option `-shared-libgcc', such that it is linked with the shared 9959 `libgcc'. 9960 9961`-static-libasan' 9962 When the `-fsanitize=address' option is used to link a program, 9963 the GCC driver automatically links against `libasan'. If 9964 `libasan' is available as a shared library, and the `-static' 9965 option is not used, then this links against the shared version of 9966 `libasan'. The `-static-libasan' option directs the GCC driver to 9967 link `libasan' statically, without necessarily linking other 9968 libraries statically. 9969 9970`-static-libtsan' 9971 When the `-fsanitize=thread' option is used to link a program, the 9972 GCC driver automatically links against `libtsan'. If `libtsan' is 9973 available as a shared library, and the `-static' option is not 9974 used, then this links against the shared version of `libtsan'. 9975 The `-static-libtsan' option directs the GCC driver to link 9976 `libtsan' statically, without necessarily linking other libraries 9977 statically. 9978 9979`-static-libstdc++' 9980 When the `g++' program is used to link a C++ program, it normally 9981 automatically links against `libstdc++'. If `libstdc++' is 9982 available as a shared library, and the `-static' option is not 9983 used, then this links against the shared version of `libstdc++'. 9984 That is normally fine. However, it is sometimes useful to freeze 9985 the version of `libstdc++' used by the program without going all 9986 the way to a fully static link. The `-static-libstdc++' option 9987 directs the `g++' driver to link `libstdc++' statically, without 9988 necessarily linking other libraries statically. 9989 9990`-symbolic' 9991 Bind references to global symbols when building a shared object. 9992 Warn about any unresolved references (unless overridden by the 9993 link editor option `-Xlinker -z -Xlinker defs'). Only a few 9994 systems support this option. 9995 9996`-T SCRIPT' 9997 Use SCRIPT as the linker script. This option is supported by most 9998 systems using the GNU linker. On some targets, such as bare-board 9999 targets without an operating system, the `-T' option may be 10000 required when linking to avoid references to undefined symbols. 10001 10002`-Xlinker OPTION' 10003 Pass OPTION as an option to the linker. You can use this to 10004 supply system-specific linker options that GCC does not recognize. 10005 10006 If you want to pass an option that takes a separate argument, you 10007 must use `-Xlinker' twice, once for the option and once for the 10008 argument. For example, to pass `-assert definitions', you must 10009 write `-Xlinker -assert -Xlinker definitions'. It does not work 10010 to write `-Xlinker "-assert definitions"', because this passes the 10011 entire string as a single argument, which is not what the linker 10012 expects. 10013 10014 When using the GNU linker, it is usually more convenient to pass 10015 arguments to linker options using the `OPTION=VALUE' syntax than 10016 as separate arguments. For example, you can specify `-Xlinker 10017 -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'. 10018 Other linkers may not support this syntax for command-line options. 10019 10020`-Wl,OPTION' 10021 Pass OPTION as an option to the linker. If OPTION contains 10022 commas, it is split into multiple options at the commas. You can 10023 use this syntax to pass an argument to the option. For example, 10024 `-Wl,-Map,output.map' passes `-Map output.map' to the linker. 10025 When using the GNU linker, you can also get the same effect with 10026 `-Wl,-Map=output.map'. 10027 10028`-u SYMBOL' 10029 Pretend the symbol SYMBOL is undefined, to force linking of 10030 library modules to define it. You can use `-u' multiple times with 10031 different symbols to force loading of additional library modules. 10032 10033 ---------- Footnotes ---------- 10034 10035 (1) On some systems, `gcc -shared' needs to build supplementary stub 10036code for constructors to work. On multi-libbed systems, `gcc -shared' 10037must select the correct support libraries to link against. Failing to 10038supply the correct flags may lead to subtle defects. Supplying them in 10039cases where they are not necessary is innocuous. 10040 10041 10042File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 10043 100443.14 Options for Directory Search 10045================================= 10046 10047These options specify directories to search for header files, for 10048libraries and for parts of the compiler: 10049 10050`-IDIR' 10051 Add the directory DIR to the head of the list of directories to be 10052 searched for header files. This can be used to override a system 10053 header file, substituting your own version, since these 10054 directories are searched before the system header file 10055 directories. However, you should not use this option to add 10056 directories that contain vendor-supplied system header files (use 10057 `-isystem' for that). If you use more than one `-I' option, the 10058 directories are scanned in left-to-right order; the standard 10059 system directories come after. 10060 10061 If a standard system include directory, or a directory specified 10062 with `-isystem', is also specified with `-I', the `-I' option is 10063 ignored. The directory is still searched but as a system 10064 directory at its normal position in the system include chain. 10065 This is to ensure that GCC's procedure to fix buggy system headers 10066 and the ordering for the `include_next' directive are not 10067 inadvertently changed. If you really need to change the search 10068 order for system directories, use the `-nostdinc' and/or 10069 `-isystem' options. 10070 10071`-iplugindir=DIR' 10072 Set the directory to search for plugins that are passed by 10073 `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'. This option 10074 is not meant to be used by the user, but only passed by the driver. 10075 10076`-iquoteDIR' 10077 Add the directory DIR to the head of the list of directories to be 10078 searched for header files only for the case of `#include "FILE"'; 10079 they are not searched for `#include <FILE>', otherwise just like 10080 `-I'. 10081 10082`-LDIR' 10083 Add directory DIR to the list of directories to be searched for 10084 `-l'. 10085 10086`-BPREFIX' 10087 This option specifies where to find the executables, libraries, 10088 include files, and data files of the compiler itself. 10089 10090 The compiler driver program runs one or more of the subprograms 10091 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 10092 program it tries to run, both with and without `MACHINE/VERSION/' 10093 (*note Target Options::). 10094 10095 For each subprogram to be run, the compiler driver first tries the 10096 `-B' prefix, if any. If that name is not found, or if `-B' is not 10097 specified, the driver tries two standard prefixes, `/usr/lib/gcc/' 10098 and `/usr/local/lib/gcc/'. If neither of those results in a file 10099 name that is found, the unmodified program name is searched for 10100 using the directories specified in your `PATH' environment 10101 variable. 10102 10103 The compiler checks to see if the path provided by the `-B' refers 10104 to a directory, and if necessary it adds a directory separator 10105 character at the end of the path. 10106 10107 `-B' prefixes that effectively specify directory names also apply 10108 to libraries in the linker, because the compiler translates these 10109 options into `-L' options for the linker. They also apply to 10110 includes files in the preprocessor, because the compiler 10111 translates these options into `-isystem' options for the 10112 preprocessor. In this case, the compiler appends `include' to the 10113 prefix. 10114 10115 The runtime support file `libgcc.a' can also be searched for using 10116 the `-B' prefix, if needed. If it is not found there, the two 10117 standard prefixes above are tried, and that is all. The file is 10118 left out of the link if it is not found by those means. 10119 10120 Another way to specify a prefix much like the `-B' prefix is to use 10121 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 10122 Variables::. 10123 10124 As a special kludge, if the path provided by `-B' is 10125 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 10126 is replaced by `[dir/]include'. This is to help with 10127 boot-strapping the compiler. 10128 10129`-specs=FILE' 10130 Process FILE after the compiler reads in the standard `specs' 10131 file, in order to override the defaults which the `gcc' driver 10132 program uses when determining what switches to pass to `cc1', 10133 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 10134 specified on the command line, and they are processed in order, 10135 from left to right. 10136 10137`--sysroot=DIR' 10138 Use DIR as the logical root directory for headers and libraries. 10139 For example, if the compiler normally searches for headers in 10140 `/usr/include' and libraries in `/usr/lib', it instead searches 10141 `DIR/usr/include' and `DIR/usr/lib'. 10142 10143 If you use both this option and the `-isysroot' option, then the 10144 `--sysroot' option applies to libraries, but the `-isysroot' 10145 option applies to header files. 10146 10147 The GNU linker (beginning with version 2.16) has the necessary 10148 support for this option. If your linker does not support this 10149 option, the header file aspect of `--sysroot' still works, but the 10150 library aspect does not. 10151 10152`--no-sysroot-suffix' 10153 For some targets, a suffix is added to the root directory specified 10154 with `--sysroot', depending on the other options used, so that 10155 headers may for example be found in `DIR/SUFFIX/usr/include' 10156 instead of `DIR/usr/include'. This option disables the addition of 10157 such a suffix. 10158 10159`-I-' 10160 This option has been deprecated. Please use `-iquote' instead for 10161 `-I' directories before the `-I-' and remove the `-I-'. Any 10162 directories you specify with `-I' options before the `-I-' option 10163 are searched only for the case of `#include "FILE"'; they are not 10164 searched for `#include <FILE>'. 10165 10166 If additional directories are specified with `-I' options after 10167 the `-I-', these directories are searched for all `#include' 10168 directives. (Ordinarily _all_ `-I' directories are used this way.) 10169 10170 In addition, the `-I-' option inhibits the use of the current 10171 directory (where the current input file came from) as the first 10172 search directory for `#include "FILE"'. There is no way to 10173 override this effect of `-I-'. With `-I.' you can specify 10174 searching the directory that is current when the compiler is 10175 invoked. That is not exactly the same as what the preprocessor 10176 does by default, but it is often satisfactory. 10177 10178 `-I-' does not inhibit the use of the standard system directories 10179 for header files. Thus, `-I-' and `-nostdinc' are independent. 10180 10181 10182File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 10183 101843.15 Specifying subprocesses and the switches to pass to them 10185============================================================= 10186 10187`gcc' is a driver program. It performs its job by invoking a sequence 10188of other programs to do the work of compiling, assembling and linking. 10189GCC interprets its command-line parameters and uses these to deduce 10190which programs it should invoke, and which command-line options it 10191ought to place on their command lines. This behavior is controlled by 10192"spec strings". In most cases there is one spec string for each 10193program that GCC can invoke, but a few programs have multiple spec 10194strings to control their behavior. The spec strings built into GCC can 10195be overridden by using the `-specs=' command-line switch to specify a 10196spec file. 10197 10198 "Spec files" are plaintext files that are used to construct spec 10199strings. They consist of a sequence of directives separated by blank 10200lines. The type of directive is determined by the first non-whitespace 10201character on the line, which can be one of the following: 10202 10203`%COMMAND' 10204 Issues a COMMAND to the spec file processor. The commands that can 10205 appear here are: 10206 10207 `%include <FILE>' 10208 Search for FILE and insert its text at the current point in 10209 the specs file. 10210 10211 `%include_noerr <FILE>' 10212 Just like `%include', but do not generate an error message if 10213 the include file cannot be found. 10214 10215 `%rename OLD_NAME NEW_NAME' 10216 Rename the spec string OLD_NAME to NEW_NAME. 10217 10218 10219`*[SPEC_NAME]:' 10220 This tells the compiler to create, override or delete the named 10221 spec string. All lines after this directive up to the next 10222 directive or blank line are considered to be the text for the spec 10223 string. If this results in an empty string then the spec is 10224 deleted. (Or, if the spec did not exist, then nothing happens.) 10225 Otherwise, if the spec does not currently exist a new spec is 10226 created. If the spec does exist then its contents are overridden 10227 by the text of this directive, unless the first character of that 10228 text is the `+' character, in which case the text is appended to 10229 the spec. 10230 10231`[SUFFIX]:' 10232 Creates a new `[SUFFIX] spec' pair. All lines after this directive 10233 and up to the next directive or blank line are considered to make 10234 up the spec string for the indicated suffix. When the compiler 10235 encounters an input file with the named suffix, it processes the 10236 spec string in order to work out how to compile that file. For 10237 example: 10238 10239 .ZZ: 10240 z-compile -input %i 10241 10242 This says that any input file whose name ends in `.ZZ' should be 10243 passed to the program `z-compile', which should be invoked with the 10244 command-line switch `-input' and with the result of performing the 10245 `%i' substitution. (See below.) 10246 10247 As an alternative to providing a spec string, the text following a 10248 suffix directive can be one of the following: 10249 10250 `@LANGUAGE' 10251 This says that the suffix is an alias for a known LANGUAGE. 10252 This is similar to using the `-x' command-line switch to GCC 10253 to specify a language explicitly. For example: 10254 10255 .ZZ: 10256 @c++ 10257 10258 Says that .ZZ files are, in fact, C++ source files. 10259 10260 `#NAME' 10261 This causes an error messages saying: 10262 10263 NAME compiler not installed on this system. 10264 10265 GCC already has an extensive list of suffixes built into it. This 10266 directive adds an entry to the end of the list of suffixes, but 10267 since the list is searched from the end backwards, it is 10268 effectively possible to override earlier entries using this 10269 technique. 10270 10271 10272 GCC has the following spec strings built into it. Spec files can 10273override these strings or create their own. Note that individual 10274targets can also add their own spec strings to this list. 10275 10276 asm Options to pass to the assembler 10277 asm_final Options to pass to the assembler post-processor 10278 cpp Options to pass to the C preprocessor 10279 cc1 Options to pass to the C compiler 10280 cc1plus Options to pass to the C++ compiler 10281 endfile Object files to include at the end of the link 10282 link Options to pass to the linker 10283 lib Libraries to include on the command line to the linker 10284 libgcc Decides which GCC support library to pass to the linker 10285 linker Sets the name of the linker 10286 predefines Defines to be passed to the C preprocessor 10287 signed_char Defines to pass to CPP to say whether `char' is signed 10288 by default 10289 startfile Object files to include at the start of the link 10290 10291 Here is a small example of a spec file: 10292 10293 %rename lib old_lib 10294 10295 *lib: 10296 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 10297 10298 This example renames the spec called `lib' to `old_lib' and then 10299overrides the previous definition of `lib' with a new one. The new 10300definition adds in some extra command-line options before including the 10301text of the old definition. 10302 10303 "Spec strings" are a list of command-line options to be passed to their 10304corresponding program. In addition, the spec strings can contain 10305`%'-prefixed sequences to substitute variable text or to conditionally 10306insert text into the command line. Using these constructs it is 10307possible to generate quite complex command lines. 10308 10309 Here is a table of all defined `%'-sequences for spec strings. Note 10310that spaces are not generated automatically around the results of 10311expanding these sequences. Therefore you can concatenate them together 10312or combine them with constant text in a single argument. 10313 10314`%%' 10315 Substitute one `%' into the program name or argument. 10316 10317`%i' 10318 Substitute the name of the input file being processed. 10319 10320`%b' 10321 Substitute the basename of the input file being processed. This 10322 is the substring up to (and not including) the last period and not 10323 including the directory. 10324 10325`%B' 10326 This is the same as `%b', but include the file suffix (text after 10327 the last period). 10328 10329`%d' 10330 Marks the argument containing or following the `%d' as a temporary 10331 file name, so that that file is deleted if GCC exits successfully. 10332 Unlike `%g', this contributes no text to the argument. 10333 10334`%gSUFFIX' 10335 Substitute a file name that has suffix SUFFIX and is chosen once 10336 per compilation, and mark the argument in the same way as `%d'. 10337 To reduce exposure to denial-of-service attacks, the file name is 10338 now chosen in a way that is hard to predict even when previously 10339 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 10340 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 10341 matches the regexp `[.A-Za-z]*' or the special string `%O', which 10342 is treated exactly as if `%O' had been preprocessed. Previously, 10343 `%g' was simply substituted with a file name chosen once per 10344 compilation, without regard to any appended suffix (which was 10345 therefore treated just like ordinary text), making such attacks 10346 more likely to succeed. 10347 10348`%uSUFFIX' 10349 Like `%g', but generates a new temporary file name each time it 10350 appears instead of once per compilation. 10351 10352`%USUFFIX' 10353 Substitutes the last file name generated with `%uSUFFIX', 10354 generating a new one if there is no such last file name. In the 10355 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 10356 they don't share the same suffix _space_, so `%g.s ... %U.s ... 10357 %g.s ... %U.s' involves the generation of two distinct file names, 10358 one for each `%g.s' and another for each `%U.s'. Previously, `%U' 10359 was simply substituted with a file name chosen for the previous 10360 `%u', without regard to any appended suffix. 10361 10362`%jSUFFIX' 10363 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 10364 writable, and if `-save-temps' is not used; otherwise, substitute 10365 the name of a temporary file, just like `%u'. This temporary file 10366 is not meant for communication between processes, but rather as a 10367 junk disposal mechanism. 10368 10369`%|SUFFIX' 10370`%mSUFFIX' 10371 Like `%g', except if `-pipe' is in effect. In that case `%|' 10372 substitutes a single dash and `%m' substitutes nothing at all. 10373 These are the two most common ways to instruct a program that it 10374 should read from standard input or write to standard output. If 10375 you need something more elaborate you can use an `%{pipe:`X'}' 10376 construct: see for example `f/lang-specs.h'. 10377 10378`%.SUFFIX' 10379 Substitutes .SUFFIX for the suffixes of a matched switch's args 10380 when it is subsequently output with `%*'. SUFFIX is terminated by 10381 the next space or %. 10382 10383`%w' 10384 Marks the argument containing or following the `%w' as the 10385 designated output file of this compilation. This puts the argument 10386 into the sequence of arguments that `%o' substitutes. 10387 10388`%o' 10389 Substitutes the names of all the output files, with spaces 10390 automatically placed around them. You should write spaces around 10391 the `%o' as well or the results are undefined. `%o' is for use in 10392 the specs for running the linker. Input files whose names have no 10393 recognized suffix are not compiled at all, but they are included 10394 among the output files, so they are linked. 10395 10396`%O' 10397 Substitutes the suffix for object files. Note that this is 10398 handled specially when it immediately follows `%g, %u, or %U', 10399 because of the need for those to form complete file names. The 10400 handling is such that `%O' is treated exactly as if it had already 10401 been substituted, except that `%g, %u, and %U' do not currently 10402 support additional SUFFIX characters following `%O' as they do 10403 following, for example, `.o'. 10404 10405`%p' 10406 Substitutes the standard macro predefinitions for the current 10407 target machine. Use this when running `cpp'. 10408 10409`%P' 10410 Like `%p', but puts `__' before and after the name of each 10411 predefined macro, except for macros that start with `__' or with 10412 `_L', where L is an uppercase letter. This is for ISO C. 10413 10414`%I' 10415 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 10416 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 10417 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 10418 necessary. 10419 10420`%s' 10421 Current argument is the name of a library or startup file of some 10422 sort. Search for that file in a standard list of directories and 10423 substitute the full name found. The current working directory is 10424 included in the list of directories scanned. 10425 10426`%T' 10427 Current argument is the name of a linker script. Search for that 10428 file in the current list of directories to scan for libraries. If 10429 the file is located insert a `--script' option into the command 10430 line followed by the full path name found. If the file is not 10431 found then generate an error message. Note: the current working 10432 directory is not searched. 10433 10434`%eSTR' 10435 Print STR as an error message. STR is terminated by a newline. 10436 Use this when inconsistent options are detected. 10437 10438`%(NAME)' 10439 Substitute the contents of spec string NAME at this point. 10440 10441`%x{OPTION}' 10442 Accumulate an option for `%X'. 10443 10444`%X' 10445 Output the accumulated linker options specified by `-Wl' or a `%x' 10446 spec string. 10447 10448`%Y' 10449 Output the accumulated assembler options specified by `-Wa'. 10450 10451`%Z' 10452 Output the accumulated preprocessor options specified by `-Wp'. 10453 10454`%a' 10455 Process the `asm' spec. This is used to compute the switches to 10456 be passed to the assembler. 10457 10458`%A' 10459 Process the `asm_final' spec. This is a spec string for passing 10460 switches to an assembler post-processor, if such a program is 10461 needed. 10462 10463`%l' 10464 Process the `link' spec. This is the spec for computing the 10465 command line passed to the linker. Typically it makes use of the 10466 `%L %G %S %D and %E' sequences. 10467 10468`%D' 10469 Dump out a `-L' option for each directory that GCC believes might 10470 contain startup files. If the target supports multilibs then the 10471 current multilib directory is prepended to each of these paths. 10472 10473`%L' 10474 Process the `lib' spec. This is a spec string for deciding which 10475 libraries are included on the command line to the linker. 10476 10477`%G' 10478 Process the `libgcc' spec. This is a spec string for deciding 10479 which GCC support library is included on the command line to the 10480 linker. 10481 10482`%S' 10483 Process the `startfile' spec. This is a spec for deciding which 10484 object files are the first ones passed to the linker. Typically 10485 this might be a file named `crt0.o'. 10486 10487`%E' 10488 Process the `endfile' spec. This is a spec string that specifies 10489 the last object files that are passed to the linker. 10490 10491`%C' 10492 Process the `cpp' spec. This is used to construct the arguments 10493 to be passed to the C preprocessor. 10494 10495`%1' 10496 Process the `cc1' spec. This is used to construct the options to 10497 be passed to the actual C compiler (`cc1'). 10498 10499`%2' 10500 Process the `cc1plus' spec. This is used to construct the options 10501 to be passed to the actual C++ compiler (`cc1plus'). 10502 10503`%*' 10504 Substitute the variable part of a matched option. See below. 10505 Note that each comma in the substituted string is replaced by a 10506 single space. 10507 10508`%<`S'' 10509 Remove all occurrences of `-S' from the command line. Note--this 10510 command is position dependent. `%' commands in the spec string 10511 before this one see `-S', `%' commands in the spec string after 10512 this one do not. 10513 10514`%:FUNCTION(ARGS)' 10515 Call the named function FUNCTION, passing it ARGS. ARGS is first 10516 processed as a nested spec string, then split into an argument 10517 vector in the usual fashion. The function returns a string which 10518 is processed as if it had appeared literally as part of the 10519 current spec. 10520 10521 The following built-in spec functions are provided: 10522 10523 ``getenv'' 10524 The `getenv' spec function takes two arguments: an environment 10525 variable name and a string. If the environment variable is 10526 not defined, a fatal error is issued. Otherwise, the return 10527 value is the value of the environment variable concatenated 10528 with the string. For example, if `TOPDIR' is defined as 10529 `/path/to/top', then: 10530 10531 %:getenv(TOPDIR /include) 10532 10533 expands to `/path/to/top/include'. 10534 10535 ``if-exists'' 10536 The `if-exists' spec function takes one argument, an absolute 10537 pathname to a file. If the file exists, `if-exists' returns 10538 the pathname. Here is a small example of its usage: 10539 10540 *startfile: 10541 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 10542 10543 ``if-exists-else'' 10544 The `if-exists-else' spec function is similar to the 10545 `if-exists' spec function, except that it takes two 10546 arguments. The first argument is an absolute pathname to a 10547 file. If the file exists, `if-exists-else' returns the 10548 pathname. If it does not exist, it returns the second 10549 argument. This way, `if-exists-else' can be used to select 10550 one file or another, based on the existence of the first. 10551 Here is a small example of its usage: 10552 10553 *startfile: 10554 crt0%O%s %:if-exists(crti%O%s) \ 10555 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 10556 10557 ``replace-outfile'' 10558 The `replace-outfile' spec function takes two arguments. It 10559 looks for the first argument in the outfiles array and 10560 replaces it with the second argument. Here is a small 10561 example of its usage: 10562 10563 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 10564 10565 ``remove-outfile'' 10566 The `remove-outfile' spec function takes one argument. It 10567 looks for the first argument in the outfiles array and 10568 removes it. Here is a small example its usage: 10569 10570 %:remove-outfile(-lm) 10571 10572 ``pass-through-libs'' 10573 The `pass-through-libs' spec function takes any number of 10574 arguments. It finds any `-l' options and any non-options 10575 ending in `.a' (which it assumes are the names of linker 10576 input library archive files) and returns a result containing 10577 all the found arguments each prepended by 10578 `-plugin-opt=-pass-through=' and joined by spaces. This list 10579 is intended to be passed to the LTO linker plugin. 10580 10581 %:pass-through-libs(%G %L %G) 10582 10583 ``print-asm-header'' 10584 The `print-asm-header' function takes no arguments and simply 10585 prints a banner like: 10586 10587 Assembler options 10588 ================= 10589 10590 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 10591 10592 It is used to separate compiler options from assembler options 10593 in the `--target-help' output. 10594 10595`%{`S'}' 10596 Substitutes the `-S' switch, if that switch is given to GCC. If 10597 that switch is not specified, this substitutes nothing. Note that 10598 the leading dash is omitted when specifying this option, and it is 10599 automatically inserted if the substitution is performed. Thus the 10600 spec string `%{foo}' matches the command-line option `-foo' and 10601 outputs the command-line option `-foo'. 10602 10603`%W{`S'}' 10604 Like %{`S'} but mark last argument supplied within as a file to be 10605 deleted on failure. 10606 10607`%{`S'*}' 10608 Substitutes all the switches specified to GCC whose names start 10609 with `-S', but which also take an argument. This is used for 10610 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 10611 being one switch whose name starts with `o'. %{o*} substitutes 10612 this text, including the space. Thus two arguments are generated. 10613 10614`%{`S'*&`T'*}' 10615 Like %{`S'*}, but preserve order of `S' and `T' options (the order 10616 of `S' and `T' in the spec is not significant). There can be any 10617 number of ampersand-separated variables; for each the wild card is 10618 optional. Useful for CPP as `%{D*&U*&A*}'. 10619 10620`%{`S':`X'}' 10621 Substitutes `X', if the `-S' switch is given to GCC. 10622 10623`%{!`S':`X'}' 10624 Substitutes `X', if the `-S' switch is _not_ given to GCC. 10625 10626`%{`S'*:`X'}' 10627 Substitutes `X' if one or more switches whose names start with 10628 `-S' are specified to GCC. Normally `X' is substituted only once, 10629 no matter how many such switches appeared. However, if `%*' 10630 appears somewhere in `X', then `X' is substituted once for each 10631 matching switch, with the `%*' replaced by the part of that switch 10632 matching the `*'. 10633 10634`%{.`S':`X'}' 10635 Substitutes `X', if processing a file with suffix `S'. 10636 10637`%{!.`S':`X'}' 10638 Substitutes `X', if _not_ processing a file with suffix `S'. 10639 10640`%{,`S':`X'}' 10641 Substitutes `X', if processing a file for language `S'. 10642 10643`%{!,`S':`X'}' 10644 Substitutes `X', if not processing a file for language `S'. 10645 10646`%{`S'|`P':`X'}' 10647 Substitutes `X' if either `-S' or `-P' is given to GCC. This may 10648 be combined with `!', `.', `,', and `*' sequences as well, 10649 although they have a stronger binding than the `|'. If `%*' 10650 appears in `X', all of the alternatives must be starred, and only 10651 the first matching alternative is substituted. 10652 10653 For example, a spec string like this: 10654 10655 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 10656 10657 outputs the following command-line options from the following input 10658 command-line options: 10659 10660 fred.c -foo -baz 10661 jim.d -bar -boggle 10662 -d fred.c -foo -baz -boggle 10663 -d jim.d -bar -baz -boggle 10664 10665`%{S:X; T:Y; :D}' 10666 If `S' is given to GCC, substitutes `X'; else if `T' is given to 10667 GCC, substitutes `Y'; else substitutes `D'. There can be as many 10668 clauses as you need. This may be combined with `.', `,', `!', 10669 `|', and `*' as needed. 10670 10671 10672 The conditional text `X' in a %{`S':`X'} or similar construct may 10673contain other nested `%' constructs or spaces, or even newlines. They 10674are processed as usual, as described above. Trailing white space in 10675`X' is ignored. White space may also appear anywhere on the left side 10676of the colon in these constructs, except between `.' or `*' and the 10677corresponding word. 10678 10679 The `-O', `-f', `-m', and `-W' switches are handled specifically in 10680these constructs. If another value of `-O' or the negated form of a 10681`-f', `-m', or `-W' switch is found later in the command line, the 10682earlier switch value is ignored, except with {`S'*} where `S' is just 10683one letter, which passes all matching options. 10684 10685 The character `|' at the beginning of the predicate text is used to 10686indicate that a command should be piped to the following command, but 10687only if `-pipe' is specified. 10688 10689 It is built into GCC which switches take arguments and which do not. 10690(You might think it would be useful to generalize this to allow each 10691compiler's spec to say which switches take arguments. But this cannot 10692be done in a consistent fashion. GCC cannot even decide which input 10693files have been specified without knowing which switches take arguments, 10694and it must know which input files to compile in order to tell which 10695compilers to run). 10696 10697 GCC also knows implicitly that arguments starting in `-l' are to be 10698treated as compiler output files, and passed to the linker in their 10699proper position among the other output files. 10700 10701 10702File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 10703 107043.16 Specifying Target Machine and Compiler Version 10705=================================================== 10706 10707The usual way to run GCC is to run the executable called `gcc', or 10708`MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a 10709version other than the one that was installed last. 10710 10711 10712File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 10713 107143.17 Hardware Models and Configurations 10715======================================= 10716 10717Each target machine types can have its own special options, starting 10718with `-m', to choose among various hardware models or 10719configurations--for example, 68010 vs 68020, floating coprocessor or 10720none. A single installed version of the compiler can compile for any 10721model or configuration, according to the options specified. 10722 10723 Some configurations of the compiler also support additional special 10724options, usually for compatibility with other compilers on the same 10725platform. 10726 10727* Menu: 10728 10729* AArch64 Options:: 10730* Adapteva Epiphany Options:: 10731* ARM Options:: 10732* AVR Options:: 10733* Blackfin Options:: 10734* C6X Options:: 10735* CRIS Options:: 10736* CR16 Options:: 10737* Darwin Options:: 10738* DEC Alpha Options:: 10739* FR30 Options:: 10740* FRV Options:: 10741* GNU/Linux Options:: 10742* H8/300 Options:: 10743* HPPA Options:: 10744* i386 and x86-64 Options:: 10745* i386 and x86-64 Windows Options:: 10746* IA-64 Options:: 10747* LM32 Options:: 10748* M32C Options:: 10749* M32R/D Options:: 10750* M680x0 Options:: 10751* MCore Options:: 10752* MeP Options:: 10753* MicroBlaze Options:: 10754* MIPS Options:: 10755* MMIX Options:: 10756* MN10300 Options:: 10757* Moxie Options:: 10758* PDP-11 Options:: 10759* picoChip Options:: 10760* PowerPC Options:: 10761* RL78 Options:: 10762* RS/6000 and PowerPC Options:: 10763* RX Options:: 10764* S/390 and zSeries Options:: 10765* Score Options:: 10766* SH Options:: 10767* Solaris 2 Options:: 10768* SPARC Options:: 10769* SPU Options:: 10770* System V Options:: 10771* TILE-Gx Options:: 10772* TILEPro Options:: 10773* V850 Options:: 10774* VAX Options:: 10775* VMS Options:: 10776* VxWorks Options:: 10777* x86-64 Options:: 10778* Xstormy16 Options:: 10779* Xtensa Options:: 10780* zSeries Options:: 10781 10782 10783File: gcc.info, Node: AArch64 Options, Next: Adapteva Epiphany Options, Up: Submodel Options 10784 107853.17.1 AArch64 Options 10786---------------------- 10787 10788These options are defined for AArch64 implementations: 10789 10790`-mbig-endian' 10791 Generate big-endian code. This is the default when GCC is 10792 configured for an `aarch64_be-*-*' target. 10793 10794`-mgeneral-regs-only' 10795 Generate code which uses only the general registers. 10796 10797`-mlittle-endian' 10798 Generate little-endian code. This is the default when GCC is 10799 configured for an `aarch64-*-*' but not an `aarch64_be-*-*' target. 10800 10801`-mcmodel=tiny' 10802 Generate code for the tiny code model. The program and its 10803 statically defined symbols must be within 1GB of each other. 10804 Pointers are 64 bits. Programs can be statically or dynamically 10805 linked. This model is not fully implemented and mostly treated as 10806 `small'. 10807 10808`-mcmodel=small' 10809 Generate code for the small code model. The program and its 10810 statically defined symbols must be within 4GB of each other. 10811 Pointers are 64 bits. Programs can be statically or dynamically 10812 linked. This is the default code model. 10813 10814`-mcmodel=large' 10815 Generate code for the large code model. This makes no assumptions 10816 about addresses and sizes of sections. Pointers are 64 bits. 10817 Programs can be statically linked only. 10818 10819`-mstrict-align' 10820 Do not assume that unaligned memory references will be handled by 10821 the system. 10822 10823`-momit-leaf-frame-pointer' 10824`-mno-omit-leaf-frame-pointer' 10825 Omit or keep the frame pointer in leaf functions. The former 10826 behaviour is the default. 10827 10828`-mtls-dialect=desc' 10829 Use TLS descriptors as the thread-local storage mechanism for 10830 dynamic accesses of TLS variables. This is the default. 10831 10832`-mtls-dialect=traditional' 10833 Use traditional TLS as the thread-local storage mechanism for 10834 dynamic accesses of TLS variables. 10835 10836`-mfix-cortex-a53-835769' 10837`-mno-fix-cortex-a53-835769' 10838 Enable or disable the workaround for the ARM Cortex-A53 erratum 10839 number 835769. This will involve inserting a NOP instruction 10840 between memory instructions and 64-bit integer multiply-accumulate 10841 instructions. 10842 10843`-march=NAME' 10844 Specify the name of the target architecture, optionally suffixed 10845 by one or more feature modifiers. This option has the form 10846 `-march=ARCH{+[no]FEATURE}*', where the only value for ARCH is 10847 `armv8-a'. The possible values for FEATURE are documented in the 10848 sub-section below. 10849 10850 Where conflicting feature modifiers are specified, the right-most 10851 feature is used. 10852 10853 GCC uses this name to determine what kind of instructions it can 10854 emit when generating assembly code. This option can be used in 10855 conjunction with or instead of the `-mcpu=' option. 10856 10857`-mcpu=NAME' 10858 Specify the name of the target processor, optionally suffixed by 10859 one or more feature modifiers. This option has the form 10860 `-mcpu=CPU{+[no]FEATURE}*', where the possible values for CPU are 10861 `generic', `large'. The possible values for FEATURE are 10862 documented in the sub-section below. 10863 10864 Where conflicting feature modifiers are specified, the right-most 10865 feature is used. 10866 10867 GCC uses this name to determine what kind of instructions it can 10868 emit when generating assembly code. 10869 10870`-mtune=NAME' 10871 Specify the name of the processor to tune the performance for. 10872 The code will be tuned as if the target processor were of the type 10873 specified in this option, but still using instructions compatible 10874 with the target processor specified by a `-mcpu=' option. This 10875 option cannot be suffixed by feature modifiers. 10876 10877 108783.17.1.1 `-march' and `-mcpu' feature modifiers 10879............................................... 10880 10881Feature modifiers used with `-march' and `-mcpu' can be one the 10882following: 10883 10884`crypto' 10885 Enable Crypto extension. This implies Advanced SIMD is enabled. 10886 10887`fp' 10888 Enable floating-point instructions. 10889 10890`simd' 10891 Enable Advanced SIMD instructions. This implies floating-point 10892 instructions are enabled. This is the default for all current 10893 possible values for options `-march' and `-mcpu='. 10894 10895 10896File: gcc.info, Node: Adapteva Epiphany Options, Next: ARM Options, Prev: AArch64 Options, Up: Submodel Options 10897 108983.17.2 Adapteva Epiphany Options 10899-------------------------------- 10900 10901These `-m' options are defined for Adapteva Epiphany: 10902 10903`-mhalf-reg-file' 10904 Don't allocate any register in the range `r32'...`r63'. That 10905 allows code to run on hardware variants that lack these registers. 10906 10907`-mprefer-short-insn-regs' 10908 Preferrentially allocate registers that allow short instruction 10909 generation. This can result in increased instruction count, so 10910 this may either reduce or increase overall code size. 10911 10912`-mbranch-cost=NUM' 10913 Set the cost of branches to roughly NUM "simple" instructions. 10914 This cost is only a heuristic and is not guaranteed to produce 10915 consistent results across releases. 10916 10917`-mcmove' 10918 Enable the generation of conditional moves. 10919 10920`-mnops=NUM' 10921 Emit NUM NOPs before every other generated instruction. 10922 10923`-mno-soft-cmpsf' 10924 For single-precision floating-point comparisons, emit an `fsub' 10925 instruction and test the flags. This is faster than a software 10926 comparison, but can get incorrect results in the presence of NaNs, 10927 or when two different small numbers are compared such that their 10928 difference is calculated as zero. The default is `-msoft-cmpsf', 10929 which uses slower, but IEEE-compliant, software comparisons. 10930 10931`-mstack-offset=NUM' 10932 Set the offset between the top of the stack and the stack pointer. 10933 E.g., a value of 8 means that the eight bytes in the range 10934 `sp+0...sp+7' can be used by leaf functions without stack 10935 allocation. Values other than `8' or `16' are untested and 10936 unlikely to work. Note also that this option changes the ABI; 10937 compiling a program with a different stack offset than the 10938 libraries have been compiled with generally does not work. This 10939 option can be useful if you want to evaluate if a different stack 10940 offset would give you better code, but to actually use a different 10941 stack offset to build working programs, it is recommended to 10942 configure the toolchain with the appropriate 10943 `--with-stack-offset=NUM' option. 10944 10945`-mno-round-nearest' 10946 Make the scheduler assume that the rounding mode has been set to 10947 truncating. The default is `-mround-nearest'. 10948 10949`-mlong-calls' 10950 If not otherwise specified by an attribute, assume all calls might 10951 be beyond the offset range of the `b' / `bl' instructions, and 10952 therefore load the function address into a register before 10953 performing a (otherwise direct) call. This is the default. 10954 10955`-mshort-calls' 10956 If not otherwise specified by an attribute, assume all direct 10957 calls are in the range of the `b' / `bl' instructions, so use 10958 these instructions for direct calls. The default is 10959 `-mlong-calls'. 10960 10961`-msmall16' 10962 Assume addresses can be loaded as 16-bit unsigned values. This 10963 does not apply to function addresses for which `-mlong-calls' 10964 semantics are in effect. 10965 10966`-mfp-mode=MODE' 10967 Set the prevailing mode of the floating-point unit. This 10968 determines the floating-point mode that is provided and expected 10969 at function call and return time. Making this mode match the mode 10970 you predominantly need at function start can make your programs 10971 smaller and faster by avoiding unnecessary mode switches. 10972 10973 MODE can be set to one the following values: 10974 10975 `caller' 10976 Any mode at function entry is valid, and retained or restored 10977 when the function returns, and when it calls other functions. 10978 This mode is useful for compiling libraries or other 10979 compilation units you might want to incorporate into 10980 different programs with different prevailing FPU modes, and 10981 the convenience of being able to use a single object file 10982 outweighs the size and speed overhead for any extra mode 10983 switching that might be needed, compared with what would be 10984 needed with a more specific choice of prevailing FPU mode. 10985 10986 `truncate' 10987 This is the mode used for floating-point calculations with 10988 truncating (i.e. round towards zero) rounding mode. That 10989 includes conversion from floating point to integer. 10990 10991 `round-nearest' 10992 This is the mode used for floating-point calculations with 10993 round-to-nearest-or-even rounding mode. 10994 10995 `int' 10996 This is the mode used to perform integer calculations in the 10997 FPU, e.g. integer multiply, or integer 10998 multiply-and-accumulate. 10999 11000 The default is `-mfp-mode=caller' 11001 11002`-mnosplit-lohi' 11003`-mno-postinc' 11004`-mno-postmodify' 11005 Code generation tweaks that disable, respectively, splitting of 11006 32-bit loads, generation of post-increment addresses, and 11007 generation of post-modify addresses. The defaults are 11008 `msplit-lohi', `-mpost-inc', and `-mpost-modify'. 11009 11010`-mnovect-double' 11011 Change the preferred SIMD mode to SImode. The default is 11012 `-mvect-double', which uses DImode as preferred SIMD mode. 11013 11014`-max-vect-align=NUM' 11015 The maximum alignment for SIMD vector mode types. NUM may be 4 or 11016 8. The default is 8. Note that this is an ABI change, even 11017 though many library function interfaces are unaffected if they 11018 don't use SIMD vector modes in places that affect size and/or 11019 alignment of relevant types. 11020 11021`-msplit-vecmove-early' 11022 Split vector moves into single word moves before reload. In 11023 theory this can give better register allocation, but so far the 11024 reverse seems to be generally the case. 11025 11026`-m1reg-REG' 11027 Specify a register to hold the constant -1, which makes loading 11028 small negative constants and certain bitmasks faster. Allowable 11029 values for REG are `r43' and `r63', which specify use of that 11030 register as a fixed register, and `none', which means that no 11031 register is used for this purpose. The default is `-m1reg-none'. 11032 11033 11034 11035File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: Adapteva Epiphany Options, Up: Submodel Options 11036 110373.17.3 ARM Options 11038------------------ 11039 11040These `-m' options are defined for Advanced RISC Machines (ARM) 11041architectures: 11042 11043`-mabi=NAME' 11044 Generate code for the specified ABI. Permissible values are: 11045 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 11046 11047`-mapcs-frame' 11048 Generate a stack frame that is compliant with the ARM Procedure 11049 Call Standard for all functions, even if this is not strictly 11050 necessary for correct execution of the code. Specifying 11051 `-fomit-frame-pointer' with this option causes the stack frames 11052 not to be generated for leaf functions. The default is 11053 `-mno-apcs-frame'. 11054 11055`-mapcs' 11056 This is a synonym for `-mapcs-frame'. 11057 11058`-mthumb-interwork' 11059 Generate code that supports calling between the ARM and Thumb 11060 instruction sets. Without this option, on pre-v5 architectures, 11061 the two instruction sets cannot be reliably used inside one 11062 program. The default is `-mno-thumb-interwork', since slightly 11063 larger code is generated when `-mthumb-interwork' is specified. 11064 In AAPCS configurations this option is meaningless. 11065 11066`-mno-sched-prolog' 11067 Prevent the reordering of instructions in the function prologue, 11068 or the merging of those instruction with the instructions in the 11069 function's body. This means that all functions start with a 11070 recognizable set of instructions (or in fact one of a choice from 11071 a small set of different function prologues), and this information 11072 can be used to locate the start of functions inside an executable 11073 piece of code. The default is `-msched-prolog'. 11074 11075`-mfloat-abi=NAME' 11076 Specifies which floating-point ABI to use. Permissible values 11077 are: `soft', `softfp' and `hard'. 11078 11079 Specifying `soft' causes GCC to generate output containing library 11080 calls for floating-point operations. `softfp' allows the 11081 generation of code using hardware floating-point instructions, but 11082 still uses the soft-float calling conventions. `hard' allows 11083 generation of floating-point instructions and uses FPU-specific 11084 calling conventions. 11085 11086 The default depends on the specific target configuration. Note 11087 that the hard-float and soft-float ABIs are not link-compatible; 11088 you must compile your entire program with the same ABI, and link 11089 with a compatible set of libraries. 11090 11091`-mlittle-endian' 11092 Generate code for a processor running in little-endian mode. This 11093 is the default for all standard configurations. 11094 11095`-mbig-endian' 11096 Generate code for a processor running in big-endian mode; the 11097 default is to compile code for a little-endian processor. 11098 11099`-mwords-little-endian' 11100 This option only applies when generating code for big-endian 11101 processors. Generate code for a little-endian word order but a 11102 big-endian byte order. That is, a byte order of the form 11103 `32107654'. Note: this option should only be used if you require 11104 compatibility with code for big-endian ARM processors generated by 11105 versions of the compiler prior to 2.8. This option is now 11106 deprecated. 11107 11108`-march=NAME' 11109 This specifies the name of the target ARM architecture. GCC uses 11110 this name to determine what kind of instructions it can emit when 11111 generating assembly code. This option can be used in conjunction 11112 with or instead of the `-mcpu=' option. Permissible names are: 11113 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 11114 `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2', 11115 `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r', 11116 `armv7-m', `armv7e-m' `armv8-a', `iwmmxt', `iwmmxt2', `ep9312'. 11117 11118 `-march=native' causes the compiler to auto-detect the architecture 11119 of the build computer. At present, this feature is only supported 11120 on GNU/Linux, and not all architectures are recognized. If the 11121 auto-detect is unsuccessful the option has no effect. 11122 11123`-mtune=NAME' 11124 This option specifies the name of the target ARM processor for 11125 which GCC should tune the performance of the code. For some ARM 11126 implementations better performance can be obtained by using this 11127 option. Permissible names are: `arm2', `arm250', `arm3', `arm6', 11128 `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d', 11129 `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i', 11130 `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe', 11131 `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t', 11132 `strongarm', `strongarm110', `strongarm1100', `strongarm1110', 11133 `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t', 11134 `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t', 11135 `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e', 11136 `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore', 11137 `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', 11138 `arm1176jzf-s', `cortex-a5', `cortex-a7', `cortex-a8', `cortex-a9', 11139 `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-m4', 11140 `cortex-m3', `cortex-m1', `cortex-m0', `cortex-m0plus', 11141 `marvell-pj4', `xscale', `iwmmxt', `iwmmxt2', `ep9312', `fa526', 11142 `fa626', `fa606te', `fa626te', `fmp626', `fa726te'. 11143 11144 `-mtune=generic-ARCH' specifies that GCC should tune the 11145 performance for a blend of processors within architecture ARCH. 11146 The aim is to generate code that run well on the current most 11147 popular processors, balancing between optimizations that benefit 11148 some CPUs in the range, and avoiding performance pitfalls of other 11149 CPUs. The effects of this option may change in future GCC 11150 versions as CPU models come and go. 11151 11152 `-mtune=native' causes the compiler to auto-detect the CPU of the 11153 build computer. At present, this feature is only supported on 11154 GNU/Linux, and not all architectures are recognized. If the 11155 auto-detect is unsuccessful the option has no effect. 11156 11157`-mcpu=NAME' 11158 This specifies the name of the target ARM processor. GCC uses 11159 this name to derive the name of the target ARM architecture (as if 11160 specified by `-march') and the ARM processor type for which to 11161 tune for performance (as if specified by `-mtune'). Where this 11162 option is used in conjunction with `-march' or `-mtune', those 11163 options take precedence over the appropriate part of this option. 11164 11165 Permissible names for this option are the same as those for 11166 `-mtune'. 11167 11168 `-mcpu=generic-ARCH' is also permissible, and is equivalent to 11169 `-march=ARCH -mtune=generic-ARCH'. See `-mtune' for more 11170 information. 11171 11172 `-mcpu=native' causes the compiler to auto-detect the CPU of the 11173 build computer. At present, this feature is only supported on 11174 GNU/Linux, and not all architectures are recognized. If the 11175 auto-detect is unsuccessful the option has no effect. 11176 11177`-mfpu=NAME' 11178 This specifies what floating-point hardware (or hardware 11179 emulation) is available on the target. Permissible names are: 11180 `vfp', `vfpv3', `vfpv3-fp16', `vfpv3-d16', `vfpv3-d16-fp16', 11181 `vfpv3xd', `vfpv3xd-fp16', `neon', `neon-fp16', `vfpv4', 11182 `vfpv4-d16', `fpv4-sp-d16', `neon-vfpv4', `fp-armv8', 11183 `neon-fp-armv8', and `crypto-neon-fp-armv8'. 11184 11185 If `-msoft-float' is specified this specifies the format of 11186 floating-point values. 11187 11188 If the selected floating-point hardware includes the NEON extension 11189 (e.g. `-mfpu'=`neon'), note that floating-point operations are not 11190 generated by GCC's auto-vectorization pass unless 11191 `-funsafe-math-optimizations' is also specified. This is because 11192 NEON hardware does not fully implement the IEEE 754 standard for 11193 floating-point arithmetic (in particular denormal values are 11194 treated as zero), so the use of NEON instructions may lead to a 11195 loss of precision. 11196 11197`-mfp16-format=NAME' 11198 Specify the format of the `__fp16' half-precision floating-point 11199 type. Permissible names are `none', `ieee', and `alternative'; 11200 the default is `none', in which case the `__fp16' type is not 11201 defined. *Note Half-Precision::, for more information. 11202 11203`-mstructure-size-boundary=N' 11204 The sizes of all structures and unions are rounded up to a multiple 11205 of the number of bits set by this option. Permissible values are 11206 8, 32 and 64. The default value varies for different toolchains. 11207 For the COFF targeted toolchain the default value is 8. A value 11208 of 64 is only allowed if the underlying ABI supports it. 11209 11210 Specifying a larger number can produce faster, more efficient 11211 code, but can also increase the size of the program. Different 11212 values are potentially incompatible. Code compiled with one value 11213 cannot necessarily expect to work with code or libraries compiled 11214 with another value, if they exchange information using structures 11215 or unions. 11216 11217`-mabort-on-noreturn' 11218 Generate a call to the function `abort' at the end of a `noreturn' 11219 function. It is executed if the function tries to return. 11220 11221`-mlong-calls' 11222`-mno-long-calls' 11223 Tells the compiler to perform function calls by first loading the 11224 address of the function into a register and then performing a 11225 subroutine call on this register. This switch is needed if the 11226 target function lies outside of the 64-megabyte addressing range 11227 of the offset-based version of subroutine call instruction. 11228 11229 Even if this switch is enabled, not all function calls are turned 11230 into long calls. The heuristic is that static functions, functions 11231 that have the `short-call' attribute, functions that are inside 11232 the scope of a `#pragma no_long_calls' directive, and functions 11233 whose definitions have already been compiled within the current 11234 compilation unit are not turned into long calls. The exceptions 11235 to this rule are that weak function definitions, functions with 11236 the `long-call' attribute or the `section' attribute, and 11237 functions that are within the scope of a `#pragma long_calls' 11238 directive are always turned into long calls. 11239 11240 This feature is not enabled by default. Specifying 11241 `-mno-long-calls' restores the default behavior, as does placing 11242 the function calls within the scope of a `#pragma long_calls_off' 11243 directive. Note these switches have no effect on how the compiler 11244 generates code to handle function calls via function pointers. 11245 11246`-msingle-pic-base' 11247 Treat the register used for PIC addressing as read-only, rather 11248 than loading it in the prologue for each function. The runtime 11249 system is responsible for initializing this register with an 11250 appropriate value before execution begins. 11251 11252`-mpic-register=REG' 11253 Specify the register to be used for PIC addressing. For standard 11254 PIC base case, the default will be any suitable register 11255 determined by compiler. For single PIC base case, the default is 11256 `R9' if target is EABI based or stack-checking is enabled, 11257 otherwise the default is `R10'. 11258 11259`-mpoke-function-name' 11260 Write the name of each function into the text section, directly 11261 preceding the function prologue. The generated code is similar to 11262 this: 11263 11264 t0 11265 .ascii "arm_poke_function_name", 0 11266 .align 11267 t1 11268 .word 0xff000000 + (t1 - t0) 11269 arm_poke_function_name 11270 mov ip, sp 11271 stmfd sp!, {fp, ip, lr, pc} 11272 sub fp, ip, #4 11273 11274 When performing a stack backtrace, code can inspect the value of 11275 `pc' stored at `fp + 0'. If the trace function then looks at 11276 location `pc - 12' and the top 8 bits are set, then we know that 11277 there is a function name embedded immediately preceding this 11278 location and has length `((pc[-3]) & 0xff000000)'. 11279 11280`-mthumb' 11281`-marm' 11282 Select between generating code that executes in ARM and Thumb 11283 states. The default for most configurations is to generate code 11284 that executes in ARM state, but the default can be changed by 11285 configuring GCC with the `--with-mode='STATE configure option. 11286 11287`-mtpcs-frame' 11288 Generate a stack frame that is compliant with the Thumb Procedure 11289 Call Standard for all non-leaf functions. (A leaf function is one 11290 that does not call any other functions.) The default is 11291 `-mno-tpcs-frame'. 11292 11293`-mtpcs-leaf-frame' 11294 Generate a stack frame that is compliant with the Thumb Procedure 11295 Call Standard for all leaf functions. (A leaf function is one 11296 that does not call any other functions.) The default is 11297 `-mno-apcs-leaf-frame'. 11298 11299`-mcallee-super-interworking' 11300 Gives all externally visible functions in the file being compiled 11301 an ARM instruction set header which switches to Thumb mode before 11302 executing the rest of the function. This allows these functions 11303 to be called from non-interworking code. This option is not valid 11304 in AAPCS configurations because interworking is enabled by default. 11305 11306`-mcaller-super-interworking' 11307 Allows calls via function pointers (including virtual functions) to 11308 execute correctly regardless of whether the target code has been 11309 compiled for interworking or not. There is a small overhead in 11310 the cost of executing a function pointer if this option is 11311 enabled. This option is not valid in AAPCS configurations because 11312 interworking is enabled by default. 11313 11314`-mtp=NAME' 11315 Specify the access model for the thread local storage pointer. 11316 The valid models are `soft', which generates calls to 11317 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 11318 `cp15' directly (supported in the arm6k architecture), and `auto', 11319 which uses the best available method for the selected processor. 11320 The default setting is `auto'. 11321 11322`-mtls-dialect=DIALECT' 11323 Specify the dialect to use for accessing thread local storage. Two 11324 DIALECTs are supported--`gnu' and `gnu2'. The `gnu' dialect 11325 selects the original GNU scheme for supporting local and global 11326 dynamic TLS models. The `gnu2' dialect selects the GNU descriptor 11327 scheme, which provides better performance for shared libraries. 11328 The GNU descriptor scheme is compatible with the original scheme, 11329 but does require new assembler, linker and library support. 11330 Initial and local exec TLS models are unaffected by this option 11331 and always use the original scheme. 11332 11333`-mword-relocations' 11334 Only generate absolute relocations on word-sized values (i.e. 11335 R_ARM_ABS32). This is enabled by default on targets (uClinux, 11336 SymbianOS) where the runtime loader imposes this restriction, and 11337 when `-fpic' or `-fPIC' is specified. 11338 11339`-mfix-cortex-m3-ldrd' 11340 Some Cortex-M3 cores can cause data corruption when `ldrd' 11341 instructions with overlapping destination and base registers are 11342 used. This option avoids generating these instructions. This 11343 option is enabled by default when `-mcpu=cortex-m3' is specified. 11344 11345`-munaligned-access' 11346`-mno-unaligned-access' 11347 Enables (or disables) reading and writing of 16- and 32- bit values 11348 from addresses that are not 16- or 32- bit aligned. By default 11349 unaligned access is disabled for all pre-ARMv6 and all ARMv6-M 11350 architectures, and enabled for all other architectures. If 11351 unaligned access is not enabled then words in packed data 11352 structures will be accessed a byte at a time. 11353 11354 The ARM attribute `Tag_CPU_unaligned_access' will be set in the 11355 generated object file to either true or false, depending upon the 11356 setting of this option. If unaligned access is enabled then the 11357 preprocessor symbol `__ARM_FEATURE_UNALIGNED' will also be defined. 11358 11359 11360 11361File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 11362 113633.17.4 AVR Options 11364------------------ 11365 11366These options are defined for AVR implementations: 11367 11368`-mmcu=MCU' 11369 Specify Atmel AVR instruction set architectures (ISA) or MCU type. 11370 11371 The default for this option is `avr2'. 11372 11373 GCC supports the following AVR devices and ISAs: 11374 11375 `avr2' 11376 "Classic" devices with up to 8 KiB of program memory. 11377 MCU = `attiny22', `attiny26', `at90c8534', `at90s2313', 11378 `at90s2323', `at90s2333', `at90s2343', `at90s4414', 11379 `at90s4433', `at90s4434', `at90s8515', `at90s8535'. 11380 11381 `avr25' 11382 "Classic" devices with up to 8 KiB of program memory and with 11383 the `MOVW' instruction. 11384 MCU = `ata5272', `ata6289', `attiny13', `attiny13a', 11385 `attiny2313', `attiny2313a', `attiny24', `attiny24a', 11386 `attiny25', `attiny261', `attiny261a', `attiny43u', 11387 `attiny4313', `attiny44', `attiny44a', `attiny45', 11388 `attiny461', `attiny461a', `attiny48', `attiny84', 11389 `attiny84a', `attiny85', `attiny861', `attiny861a', 11390 `attiny87', `attiny88', `at86rf401'. 11391 11392 `avr3' 11393 "Classic" devices with 16 KiB up to 64 KiB of program memory. 11394 MCU = `at43usb355', `at76c711'. 11395 11396 `avr31' 11397 "Classic" devices with 128 KiB of program memory. 11398 MCU = `atmega103', `at43usb320'. 11399 11400 `avr35' 11401 "Classic" devices with 16 KiB up to 64 KiB of program memory 11402 and with the `MOVW' instruction. 11403 MCU = `ata5505', `atmega16u2', `atmega32u2', `atmega8u2', 11404 `attiny1634', `attiny167', `at90usb162', `at90usb82'. 11405 11406 `avr4' 11407 "Enhanced" devices with up to 8 KiB of program memory. 11408 MCU = `ata6285', `ata6286', `atmega48', `atmega48a', 11409 `atmega48p', `atmega48pa', `atmega8', `atmega8a', 11410 `atmega8hva', `atmega8515', `atmega8535', `atmega88', 11411 `atmega88a', `atmega88p', `atmega88pa', `at90pwm1', 11412 `at90pwm2', `at90pwm2b', `at90pwm3', `at90pwm3b', `at90pwm81'. 11413 11414 `avr5' 11415 "Enhanced" devices with 16 KiB up to 64 KiB of program memory. 11416 MCU = `ata5790', `ata5790n', `ata5795', `atmega16', 11417 `atmega16a', `atmega16hva', `atmega16hva2', `atmega16hvb', 11418 `atmega16hvbrevb', `atmega16m1', `atmega16u4', `atmega161', 11419 `atmega162', `atmega163', `atmega164a', `atmega164p', 11420 `atmega164pa', `atmega165', `atmega165a', `atmega165p', 11421 `atmega165pa', `atmega168', `atmega168a', `atmega168p', 11422 `atmega168pa', `atmega169', `atmega169a', `atmega169p', 11423 `atmega169pa', `atmega26hvg', `atmega32', `atmega32a', 11424 `atmega32c1', `atmega32hvb', `atmega32hvbrevb', `atmega32m1', 11425 `atmega32u4', `atmega32u6', `atmega323', `atmega324a', 11426 `atmega324p', `atmega324pa', `atmega325', `atmega325a', 11427 `atmega325p', `atmega3250', `atmega3250a', `atmega3250p', 11428 `atmega3250pa', `atmega328', `atmega328p', `atmega329', 11429 `atmega329a', `atmega329p', `atmega329pa', `atmega3290', 11430 `atmega3290a', `atmega3290p', `atmega3290pa', `atmega406', 11431 `atmega48hvf', `atmega64', `atmega64a', `atmega64c1', 11432 `atmega64hve', `atmega64m1', `atmega64rfa2', `atmega64rfr2', 11433 `atmega640', `atmega644', `atmega644a', `atmega644p', 11434 `atmega644pa', `atmega645', `atmega645a', `atmega645p', 11435 `atmega6450', `atmega6450a', `atmega6450p', `atmega649', 11436 `atmega649a', `atmega649p', `atmega6490', `atmega6490a', 11437 `atmega6490p', `at90can32', `at90can64', `at90pwm161', 11438 `at90pwm216', `at90pwm316', `at90scr100', `at90usb646', 11439 `at90usb647', `at94k', `m3000'. 11440 11441 `avr51' 11442 "Enhanced" devices with 128 KiB of program memory. 11443 MCU = `atmega128', `atmega128a', `atmega128rfa1', 11444 `atmega1280', `atmega1281', `atmega1284', `atmega1284p', 11445 `at90can128', `at90usb1286', `at90usb1287'. 11446 11447 `avr6' 11448 "Enhanced" devices with 3-byte PC, i.e. with more than 11449 128 KiB of program memory. 11450 MCU = `atmega2560', `atmega2561'. 11451 11452 `avrxmega2' 11453 "XMEGA" devices with more than 8 KiB and up to 64 KiB of 11454 program memory. 11455 MCU = `atmxt112sl', `atmxt224', `atmxt224e', `atmxt336s', 11456 `atxmega16a4', `atxmega16a4u', `atxmega16c4', `atxmega16d4', 11457 `atxmega16x1', `atxmega32a4', `atxmega32a4u', `atxmega32c4', 11458 `atxmega32d4', `atxmega32e5', `atxmega32x1'. 11459 11460 `avrxmega4' 11461 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 11462 program memory. 11463 MCU = `atxmega64a3', `atxmega64a3u', `atxmega64a4u', 11464 `atxmega64b1', `atxmega64b3', `atxmega64c3', `atxmega64d3', 11465 `atxmega64d4'. 11466 11467 `avrxmega5' 11468 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 11469 program memory and more than 64 KiB of RAM. 11470 MCU = `atxmega64a1', `atxmega64a1u'. 11471 11472 `avrxmega6' 11473 "XMEGA" devices with more than 128 KiB of program memory. 11474 MCU = `atmxt540s', `atmxt540sreva', `atxmega128a3', 11475 `atxmega128a3u', `atxmega128b1', `atxmega128b3', 11476 `atxmega128c3', `atxmega128d3', `atxmega128d4', 11477 `atxmega192a3', `atxmega192a3u', `atxmega192c3', 11478 `atxmega192d3', `atxmega256a3', `atxmega256a3b', 11479 `atxmega256a3bu', `atxmega256a3u', `atxmega256c3', 11480 `atxmega256d3', `atxmega384c3', `atxmega384d3'. 11481 11482 `avrxmega7' 11483 "XMEGA" devices with more than 128 KiB of program memory and 11484 more than 64 KiB of RAM. 11485 MCU = `atxmega128a1', `atxmega128a1u', `atxmega128a4u'. 11486 11487 `avr1' 11488 This ISA is implemented by the minimal AVR core and supported 11489 for assembler only. 11490 MCU = `attiny11', `attiny12', `attiny15', `attiny28', 11491 `at90s1200'. 11492 11493 11494`-maccumulate-args' 11495 Accumulate outgoing function arguments and acquire/release the 11496 needed stack space for outgoing function arguments once in function 11497 prologue/epilogue. Without this option, outgoing arguments are 11498 pushed before calling a function and popped afterwards. 11499 11500 Popping the arguments after the function call can be expensive on 11501 AVR so that accumulating the stack space might lead to smaller 11502 executables because arguments need not to be removed from the 11503 stack after such a function call. 11504 11505 This option can lead to reduced code size for functions that 11506 perform several calls to functions that get their arguments on the 11507 stack like calls to printf-like functions. 11508 11509`-mbranch-cost=COST' 11510 Set the branch costs for conditional branch instructions to COST. 11511 Reasonable values for COST are small, non-negative integers. The 11512 default branch cost is 0. 11513 11514`-mcall-prologues' 11515 Functions prologues/epilogues are expanded as calls to appropriate 11516 subroutines. Code size is smaller. 11517 11518`-mint8' 11519 Assume `int' to be 8-bit integer. This affects the sizes of all 11520 types: a `char' is 1 byte, an `int' is 1 byte, a `long' is 2 bytes, 11521 and `long long' is 4 bytes. Please note that this option does not 11522 conform to the C standards, but it results in smaller code size. 11523 11524`-mno-interrupts' 11525 Generated code is not compatible with hardware interrupts. Code 11526 size is smaller. 11527 11528`-mrelax' 11529 Try to replace `CALL' resp. `JMP' instruction by the shorter 11530 `RCALL' resp. `RJMP' instruction if applicable. Setting `-mrelax' 11531 just adds the `--relax' option to the linker command line when the 11532 linker is called. 11533 11534 Jump relaxing is performed by the linker because jump offsets are 11535 not known before code is located. Therefore, the assembler code 11536 generated by the compiler is the same, but the instructions in the 11537 executable may differ from instructions in the assembler code. 11538 11539 Relaxing must be turned on if linker stubs are needed, see the 11540 section on `EIND' and linker stubs below. 11541 11542`-msp8' 11543 Treat the stack pointer register as an 8-bit register, i.e. assume 11544 the high byte of the stack pointer is zero. In general, you don't 11545 need to set this option by hand. 11546 11547 This option is used internally by the compiler to select and build 11548 multilibs for architectures `avr2' and `avr25'. These 11549 architectures mix devices with and without `SPH'. For any setting 11550 other than `-mmcu=avr2' or `-mmcu=avr25' the compiler driver will 11551 add or remove this option from the compiler proper's command line, 11552 because the compiler then knows if the device or architecture has 11553 an 8-bit stack pointer and thus no `SPH' register or not. 11554 11555`-mstrict-X' 11556 Use address register `X' in a way proposed by the hardware. This 11557 means that `X' is only used in indirect, post-increment or 11558 pre-decrement addressing. 11559 11560 Without this option, the `X' register may be used in the same way 11561 as `Y' or `Z' which then is emulated by additional instructions. 11562 For example, loading a value with `X+const' addressing with a 11563 small non-negative `const < 64' to a register RN is performed as 11564 11565 adiw r26, const ; X += const 11566 ld RN, X ; RN = *X 11567 sbiw r26, const ; X -= const 11568 11569`-mtiny-stack' 11570 Only change the lower 8 bits of the stack pointer. 11571 11572`-Waddr-space-convert' 11573 Warn about conversions between address spaces in the case where the 11574 resulting address space is not contained in the incoming address 11575 space. 11576 115773.17.4.1 `EIND' and Devices with more than 128 Ki Bytes of Flash 11578................................................................ 11579 11580Pointers in the implementation are 16 bits wide. The address of a 11581function or label is represented as word address so that indirect jumps 11582and calls can target any code address in the range of 64 Ki words. 11583 11584 In order to facilitate indirect jump on devices with more than 128 Ki 11585bytes of program memory space, there is a special function register 11586called `EIND' that serves as most significant part of the target address 11587when `EICALL' or `EIJMP' instructions are used. 11588 11589 Indirect jumps and calls on these devices are handled as follows by 11590the compiler and are subject to some limitations: 11591 11592 * The compiler never sets `EIND'. 11593 11594 * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP' 11595 instructions or might read `EIND' directly in order to emulate an 11596 indirect call/jump by means of a `RET' instruction. 11597 11598 * The compiler assumes that `EIND' never changes during the startup 11599 code or during the application. In particular, `EIND' is not 11600 saved/restored in function or interrupt service routine 11601 prologue/epilogue. 11602 11603 * For indirect calls to functions and computed goto, the linker 11604 generates _stubs_. Stubs are jump pads sometimes also called 11605 _trampolines_. Thus, the indirect call/jump jumps to such a stub. 11606 The stub contains a direct jump to the desired address. 11607 11608 * Linker relaxation must be turned on so that the linker will 11609 generate the stubs correctly an all situaltion. See the compiler 11610 option `-mrelax' and the linler option `--relax'. There are 11611 corner cases where the linker is supposed to generate stubs but 11612 aborts without relaxation and without a helpful error message. 11613 11614 * The default linker script is arranged for code with `EIND = 0'. 11615 If code is supposed to work for a setup with `EIND != 0', a custom 11616 linker script has to be used in order to place the sections whose 11617 name start with `.trampolines' into the segment where `EIND' 11618 points to. 11619 11620 * The startup code from libgcc never sets `EIND'. Notice that 11621 startup code is a blend of code from libgcc and AVR-LibC. For the 11622 impact of AVR-LibC on `EIND', see the 11623 AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/). 11624 11625 * It is legitimate for user-specific startup code to set up `EIND' 11626 early, for example by means of initialization code located in 11627 section `.init3'. Such code runs prior to general startup code 11628 that initializes RAM and calls constructors, but after the bit of 11629 startup code from AVR-LibC that sets `EIND' to the segment where 11630 the vector table is located. 11631 #include <avr/io.h> 11632 11633 static void 11634 __attribute__((section(".init3"),naked,used,no_instrument_function)) 11635 init3_set_eind (void) 11636 { 11637 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t" 11638 "out %i0,r24" :: "n" (&EIND) : "r24","memory"); 11639 } 11640 11641 The `__trampolines_start' symbol is defined in the linker script. 11642 11643 * Stubs are generated automatically by the linker if the following 11644 two conditions are met: 11645 - The address of a label is taken by means of the `gs' modifier 11646 (short for _generate stubs_) like so: 11647 LDI r24, lo8(gs(FUNC)) 11648 LDI r25, hi8(gs(FUNC)) 11649 11650 - The final location of that label is in a code segment 11651 _outside_ the segment where the stubs are located. 11652 11653 * The compiler emits such `gs' modifiers for code labels in the 11654 following situations: 11655 - Taking address of a function or code label. 11656 11657 - Computed goto. 11658 11659 - If prologue-save function is used, see `-mcall-prologues' 11660 command-line option. 11661 11662 - Switch/case dispatch tables. If you do not want such dispatch 11663 tables you can specify the `-fno-jump-tables' command-line 11664 option. 11665 11666 - C and C++ constructors/destructors called during 11667 startup/shutdown. 11668 11669 - If the tools hit a `gs()' modifier explained above. 11670 11671 * Jumping to non-symbolic addresses like so is _not_ supported: 11672 11673 int main (void) 11674 { 11675 /* Call function at word address 0x2 */ 11676 return ((int(*)(void)) 0x2)(); 11677 } 11678 11679 Instead, a stub has to be set up, i.e. the function has to be 11680 called through a symbol (`func_4' in the example): 11681 11682 int main (void) 11683 { 11684 extern int func_4 (void); 11685 11686 /* Call function at byte address 0x4 */ 11687 return func_4(); 11688 } 11689 11690 and the application be linked with `-Wl,--defsym,func_4=0x4'. 11691 Alternatively, `func_4' can be defined in the linker script. 11692 116933.17.4.2 Handling of the `RAMPD', `RAMPX', `RAMPY' and `RAMPZ' Special Function Registers 11694......................................................................................... 11695 11696Some AVR devices support memories larger than the 64 KiB range that can 11697be accessed with 16-bit pointers. To access memory locations outside 11698this 64 KiB range, the contentent of a `RAMP' register is used as high 11699part of the address: The `X', `Y', `Z' address register is concatenated 11700with the `RAMPX', `RAMPY', `RAMPZ' special function register, 11701respectively, to get a wide address. Similarly, `RAMPD' is used 11702together with direct addressing. 11703 11704 * The startup code initializes the `RAMP' special function registers 11705 with zero. 11706 11707 * If a *note named address space: AVR Named Address Spaces. other 11708 than generic or `__flash' is used, then `RAMPZ' is set as needed 11709 before the operation. 11710 11711 * If the device supports RAM larger than 64 KiB and the compiler 11712 needs to change `RAMPZ' to accomplish an operation, `RAMPZ' is 11713 reset to zero after the operation. 11714 11715 * If the device comes with a specific `RAMP' register, the ISR 11716 prologue/epilogue saves/restores that SFR and initializes it with 11717 zero in case the ISR code might (implicitly) use it. 11718 11719 * RAM larger than 64 KiB is not supported by GCC for AVR targets. 11720 If you use inline assembler to read from locations outside the 11721 16-bit address range and change one of the `RAMP' registers, you 11722 must reset it to zero after the access. 11723 11724 117253.17.4.3 AVR Built-in Macros 11726............................ 11727 11728GCC defines several built-in macros so that the user code can test for 11729the presence or absence of features. Almost any of the following 11730built-in macros are deduced from device capabilities and thus triggered 11731by the `-mmcu=' command-line option. 11732 11733 For even more AVR-specific built-in macros see *note AVR Named Address 11734Spaces:: and *note AVR Built-in Functions::. 11735 11736`__AVR_ARCH__' 11737 Build-in macro that resolves to a decimal number that identifies 11738 the architecture and depends on the `-mmcu=MCU' option. Possible 11739 values are: 11740 11741 `2', `25', `3', `31', `35', `4', `5', `51', `6', `102', `104', 11742 `105', `106', `107' 11743 11744 for MCU=`avr2', `avr25', `avr3', `avr31', `avr35', `avr4', `avr5', 11745 `avr51', `avr6', `avrxmega2', `avrxmega4', `avrxmega5', 11746 `avrxmega6', `avrxmega7', respectively. If MCU specifies a 11747 device, this built-in macro is set accordingly. For example, with 11748 `-mmcu=atmega8' the macro will be defined to `4'. 11749 11750`__AVR_DEVICE__' 11751 Setting `-mmcu=DEVICE' defines this built-in macro which reflects 11752 the device's name. For example, `-mmcu=atmega8' defines the 11753 built-in macro `__AVR_ATmega8__', `-mmcu=attiny261a' defines 11754 `__AVR_ATtiny261A__', etc. 11755 11756 The built-in macros' names follow the scheme `__AVR_DEVICE__' 11757 where DEVICE is the device name as from the AVR user manual. The 11758 difference between DEVICE in the built-in macro and DEVICE in 11759 `-mmcu=DEVICE' is that the latter is always lowercase. 11760 11761 If DEVICE is not a device but only a core architecture like 11762 `avr51', this macro will not be defined. 11763 11764`__AVR_XMEGA__' 11765 The device / architecture belongs to the XMEGA family of devices. 11766 11767`__AVR_HAVE_ELPM__' 11768 The device has the the `ELPM' instruction. 11769 11770`__AVR_HAVE_ELPMX__' 11771 The device has the `ELPM RN,Z' and `ELPM RN,Z+' instructions. 11772 11773`__AVR_HAVE_MOVW__' 11774 The device has the `MOVW' instruction to perform 16-bit 11775 register-register moves. 11776 11777`__AVR_HAVE_LPMX__' 11778 The device has the `LPM RN,Z' and `LPM RN,Z+' instructions. 11779 11780`__AVR_HAVE_MUL__' 11781 The device has a hardware multiplier. 11782 11783`__AVR_HAVE_JMP_CALL__' 11784 The device has the `JMP' and `CALL' instructions. This is the 11785 case for devices with at least 16 KiB of program memory. 11786 11787`__AVR_HAVE_EIJMP_EICALL__' 11788`__AVR_3_BYTE_PC__' 11789 The device has the `EIJMP' and `EICALL' instructions. This is the 11790 case for devices with more than 128 KiB of program memory. This 11791 also means that the program counter (PC) is 3 bytes wide. 11792 11793`__AVR_2_BYTE_PC__' 11794 The program counter (PC) is 2 bytes wide. This is the case for 11795 devices with up to 128 KiB of program memory. 11796 11797`__AVR_HAVE_8BIT_SP__' 11798`__AVR_HAVE_16BIT_SP__' 11799 The stack pointer (SP) register is treated as 8-bit respectively 11800 16-bit register by the compiler. The definition of these macros 11801 is affected by `-mtiny-stack'. 11802 11803`__AVR_HAVE_SPH__' 11804`__AVR_SP8__' 11805 The device has the SPH (high part of stack pointer) special 11806 function register or has an 8-bit stack pointer, respectively. 11807 The definition of these macros is affected by `-mmcu=' and in the 11808 cases of `-mmcu=avr2' and `-mmcu=avr25' also by `-msp8'. 11809 11810`__AVR_HAVE_RAMPD__' 11811`__AVR_HAVE_RAMPX__' 11812`__AVR_HAVE_RAMPY__' 11813`__AVR_HAVE_RAMPZ__' 11814 The device has the `RAMPD', `RAMPX', `RAMPY', `RAMPZ' special 11815 function register, respectively. 11816 11817`__NO_INTERRUPTS__' 11818 This macro reflects the `-mno-interrupts' command line option. 11819 11820`__AVR_ERRATA_SKIP__' 11821`__AVR_ERRATA_SKIP_JMP_CALL__' 11822 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit 11823 instructions because of a hardware erratum. Skip instructions are 11824 `SBRS', `SBRC', `SBIS', `SBIC' and `CPSE'. The second macro is 11825 only defined if `__AVR_HAVE_JMP_CALL__' is also set. 11826 11827`__AVR_SFR_OFFSET__=OFFSET' 11828 Instructions that can address I/O special function registers 11829 directly like `IN', `OUT', `SBI', etc. may use a different address 11830 as if addressed by an instruction to access RAM like `LD' or 11831 `STS'. This offset depends on the device architecture and has to 11832 be subtracted from the RAM address in order to get the respective 11833 I/O address. 11834 11835`__WITH_AVRLIBC__' 11836 The compiler is configured to be used together with AVR-Libc. See 11837 the `--with-avrlibc' configure option. 11838 11839 11840 11841File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options, Up: Submodel Options 11842 118433.17.5 Blackfin Options 11844----------------------- 11845 11846`-mcpu=CPU[-SIREVISION]' 11847 Specifies the name of the target Blackfin processor. Currently, 11848 CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522', 11849 `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532', 11850 `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542', 11851 `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m', 11852 `bf548m', `bf549m', `bf561', `bf592'. 11853 11854 The optional SIREVISION specifies the silicon revision of the 11855 target Blackfin processor. Any workarounds available for the 11856 targeted silicon revision are enabled. If SIREVISION is `none', 11857 no workarounds are enabled. If SIREVISION is `any', all 11858 workarounds for the targeted processor are enabled. The 11859 `__SILICON_REVISION__' macro is defined to two hexadecimal digits 11860 representing the major and minor numbers in the silicon revision. 11861 If SIREVISION is `none', the `__SILICON_REVISION__' is not 11862 defined. If SIREVISION is `any', the `__SILICON_REVISION__' is 11863 defined to be `0xffff'. If this optional SIREVISION is not used, 11864 GCC assumes the latest known silicon revision of the targeted 11865 Blackfin processor. 11866 11867 GCC defines a preprocessor macro for the specified CPU. For the 11868 `bfin-elf' toolchain, this option causes the hardware BSP provided 11869 by libgloss to be linked in if `-msim' is not given. 11870 11871 Without this option, `bf532' is used as the processor by default. 11872 11873 Note that support for `bf561' is incomplete. For `bf561', only 11874 the preprocessor macro is defined. 11875 11876`-msim' 11877 Specifies that the program will be run on the simulator. This 11878 causes the simulator BSP provided by libgloss to be linked in. 11879 This option has effect only for `bfin-elf' toolchain. Certain 11880 other options, such as `-mid-shared-library' and `-mfdpic', imply 11881 `-msim'. 11882 11883`-momit-leaf-frame-pointer' 11884 Don't keep the frame pointer in a register for leaf functions. 11885 This avoids the instructions to save, set up and restore frame 11886 pointers and makes an extra register available in leaf functions. 11887 The option `-fomit-frame-pointer' removes the frame pointer for 11888 all functions, which might make debugging harder. 11889 11890`-mspecld-anomaly' 11891 When enabled, the compiler ensures that the generated code does not 11892 contain speculative loads after jump instructions. If this option 11893 is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined. 11894 11895`-mno-specld-anomaly' 11896 Don't generate extra code to prevent speculative loads from 11897 occurring. 11898 11899`-mcsync-anomaly' 11900 When enabled, the compiler ensures that the generated code does not 11901 contain CSYNC or SSYNC instructions too soon after conditional 11902 branches. If this option is used, 11903 `__WORKAROUND_SPECULATIVE_SYNCS' is defined. 11904 11905`-mno-csync-anomaly' 11906 Don't generate extra code to prevent CSYNC or SSYNC instructions 11907 from occurring too soon after a conditional branch. 11908 11909`-mlow-64k' 11910 When enabled, the compiler is free to take advantage of the 11911 knowledge that the entire program fits into the low 64k of memory. 11912 11913`-mno-low-64k' 11914 Assume that the program is arbitrarily large. This is the default. 11915 11916`-mstack-check-l1' 11917 Do stack checking using information placed into L1 scratchpad 11918 memory by the uClinux kernel. 11919 11920`-mid-shared-library' 11921 Generate code that supports shared libraries via the library ID 11922 method. This allows for execute in place and shared libraries in 11923 an environment without virtual memory management. This option 11924 implies `-fPIC'. With a `bfin-elf' target, this option implies 11925 `-msim'. 11926 11927`-mno-id-shared-library' 11928 Generate code that doesn't assume ID-based shared libraries are 11929 being used. This is the default. 11930 11931`-mleaf-id-shared-library' 11932 Generate code that supports shared libraries via the library ID 11933 method, but assumes that this library or executable won't link 11934 against any other ID shared libraries. That allows the compiler 11935 to use faster code for jumps and calls. 11936 11937`-mno-leaf-id-shared-library' 11938 Do not assume that the code being compiled won't link against any 11939 ID shared libraries. Slower code is generated for jump and call 11940 insns. 11941 11942`-mshared-library-id=n' 11943 Specifies the identification number of the ID-based shared library 11944 being compiled. Specifying a value of 0 generates more compact 11945 code; specifying other values forces the allocation of that number 11946 to the current library but is no more space- or time-efficient 11947 than omitting this option. 11948 11949`-msep-data' 11950 Generate code that allows the data segment to be located in a 11951 different area of memory from the text segment. This allows for 11952 execute in place in an environment without virtual memory 11953 management by eliminating relocations against the text section. 11954 11955`-mno-sep-data' 11956 Generate code that assumes that the data segment follows the text 11957 segment. This is the default. 11958 11959`-mlong-calls' 11960`-mno-long-calls' 11961 Tells the compiler to perform function calls by first loading the 11962 address of the function into a register and then performing a 11963 subroutine call on this register. This switch is needed if the 11964 target function lies outside of the 24-bit addressing range of the 11965 offset-based version of subroutine call instruction. 11966 11967 This feature is not enabled by default. Specifying 11968 `-mno-long-calls' restores the default behavior. Note these 11969 switches have no effect on how the compiler generates code to 11970 handle function calls via function pointers. 11971 11972`-mfast-fp' 11973 Link with the fast floating-point library. This library relaxes 11974 some of the IEEE floating-point standard's rules for checking 11975 inputs against Not-a-Number (NAN), in the interest of performance. 11976 11977`-minline-plt' 11978 Enable inlining of PLT entries in function calls to functions that 11979 are not known to bind locally. It has no effect without `-mfdpic'. 11980 11981`-mmulticore' 11982 Build a standalone application for multicore Blackfin processors. 11983 This option causes proper start files and link scripts supporting 11984 multicore to be used, and defines the macro `__BFIN_MULTICORE'. 11985 It can only be used with `-mcpu=bf561[-SIREVISION]'. 11986 11987 This option can be used with `-mcorea' or `-mcoreb', which selects 11988 the one-application-per-core programming model. Without `-mcorea' 11989 or `-mcoreb', the single-application/dual-core programming model 11990 is used. In this model, the main function of Core B should be 11991 named as `coreb_main'. 11992 11993 If this option is not used, the single-core application programming 11994 model is used. 11995 11996`-mcorea' 11997 Build a standalone application for Core A of BF561 when using the 11998 one-application-per-core programming model. Proper start files and 11999 link scripts are used to support Core A, and the macro 12000 `__BFIN_COREA' is defined. This option can only be used in 12001 conjunction with `-mmulticore'. 12002 12003`-mcoreb' 12004 Build a standalone application for Core B of BF561 when using the 12005 one-application-per-core programming model. Proper start files and 12006 link scripts are used to support Core B, and the macro 12007 `__BFIN_COREB' is defined. When this option is used, `coreb_main' 12008 should be used instead of `main'. This option can only be used in 12009 conjunction with `-mmulticore'. 12010 12011`-msdram' 12012 Build a standalone application for SDRAM. Proper start files and 12013 link scripts are used to put the application into SDRAM, and the 12014 macro `__BFIN_SDRAM' is defined. The loader should initialize 12015 SDRAM before loading the application. 12016 12017`-micplb' 12018 Assume that ICPLBs are enabled at run time. This has an effect on 12019 certain anomaly workarounds. For Linux targets, the default is to 12020 assume ICPLBs are enabled; for standalone applications the default 12021 is off. 12022 12023 12024File: gcc.info, Node: C6X Options, Next: CRIS Options, Prev: Blackfin Options, Up: Submodel Options 12025 120263.17.6 C6X Options 12027------------------ 12028 12029`-march=NAME' 12030 This specifies the name of the target architecture. GCC uses this 12031 name to determine what kind of instructions it can emit when 12032 generating assembly code. Permissible names are: `c62x', `c64x', 12033 `c64x+', `c67x', `c67x+', `c674x'. 12034 12035`-mbig-endian' 12036 Generate code for a big-endian target. 12037 12038`-mlittle-endian' 12039 Generate code for a little-endian target. This is the default. 12040 12041`-msim' 12042 Choose startup files and linker script suitable for the simulator. 12043 12044`-msdata=default' 12045 Put small global and static data in the `.neardata' section, which 12046 is pointed to by register `B14'. Put small uninitialized global 12047 and static data in the `.bss' section, which is adjacent to the 12048 `.neardata' section. Put small read-only data into the `.rodata' 12049 section. The corresponding sections used for large pieces of data 12050 are `.fardata', `.far' and `.const'. 12051 12052`-msdata=all' 12053 Put all data, not just small objects, into the sections reserved 12054 for small data, and use addressing relative to the `B14' register 12055 to access them. 12056 12057`-msdata=none' 12058 Make no use of the sections reserved for small data, and use 12059 absolute addresses to access all data. Put all initialized global 12060 and static data in the `.fardata' section, and all uninitialized 12061 data in the `.far' section. Put all constant data into the 12062 `.const' section. 12063 12064 12065File: gcc.info, Node: CRIS Options, Next: CR16 Options, Prev: C6X Options, Up: Submodel Options 12066 120673.17.7 CRIS Options 12068------------------- 12069 12070These options are defined specifically for the CRIS ports. 12071 12072`-march=ARCHITECTURE-TYPE' 12073`-mcpu=ARCHITECTURE-TYPE' 12074 Generate code for the specified architecture. The choices for 12075 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 12076 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 12077 cris-axis-linux-gnu, where the default is `v10'. 12078 12079`-mtune=ARCHITECTURE-TYPE' 12080 Tune to ARCHITECTURE-TYPE everything applicable about the generated 12081 code, except for the ABI and the set of available instructions. 12082 The choices for ARCHITECTURE-TYPE are the same as for 12083 `-march=ARCHITECTURE-TYPE'. 12084 12085`-mmax-stack-frame=N' 12086 Warn when the stack frame of a function exceeds N bytes. 12087 12088`-metrax4' 12089`-metrax100' 12090 The options `-metrax4' and `-metrax100' are synonyms for 12091 `-march=v3' and `-march=v8' respectively. 12092 12093`-mmul-bug-workaround' 12094`-mno-mul-bug-workaround' 12095 Work around a bug in the `muls' and `mulu' instructions for CPU 12096 models where it applies. This option is active by default. 12097 12098`-mpdebug' 12099 Enable CRIS-specific verbose debug-related information in the 12100 assembly code. This option also has the effect of turning off the 12101 `#NO_APP' formatted-code indicator to the assembler at the 12102 beginning of the assembly file. 12103 12104`-mcc-init' 12105 Do not use condition-code results from previous instruction; 12106 always emit compare and test instructions before use of condition 12107 codes. 12108 12109`-mno-side-effects' 12110 Do not emit instructions with side effects in addressing modes 12111 other than post-increment. 12112 12113`-mstack-align' 12114`-mno-stack-align' 12115`-mdata-align' 12116`-mno-data-align' 12117`-mconst-align' 12118`-mno-const-align' 12119 These options (`no-' options) arrange (eliminate arrangements) for 12120 the stack frame, individual data and constants to be aligned for 12121 the maximum single data access size for the chosen CPU model. The 12122 default is to arrange for 32-bit alignment. ABI details such as 12123 structure layout are not affected by these options. 12124 12125`-m32-bit' 12126`-m16-bit' 12127`-m8-bit' 12128 Similar to the stack- data- and const-align options above, these 12129 options arrange for stack frame, writable data and constants to 12130 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 12131 alignment. 12132 12133`-mno-prologue-epilogue' 12134`-mprologue-epilogue' 12135 With `-mno-prologue-epilogue', the normal function prologue and 12136 epilogue which set up the stack frame are omitted and no return 12137 instructions or return sequences are generated in the code. Use 12138 this option only together with visual inspection of the compiled 12139 code: no warnings or errors are generated when call-saved 12140 registers must be saved, or storage for local variables needs to 12141 be allocated. 12142 12143`-mno-gotplt' 12144`-mgotplt' 12145 With `-fpic' and `-fPIC', don't generate (do generate) instruction 12146 sequences that load addresses for functions from the PLT part of 12147 the GOT rather than (traditional on other architectures) calls to 12148 the PLT. The default is `-mgotplt'. 12149 12150`-melf' 12151 Legacy no-op option only recognized with the cris-axis-elf and 12152 cris-axis-linux-gnu targets. 12153 12154`-mlinux' 12155 Legacy no-op option only recognized with the cris-axis-linux-gnu 12156 target. 12157 12158`-sim' 12159 This option, recognized for the cris-axis-elf, arranges to link 12160 with input-output functions from a simulator library. Code, 12161 initialized data and zero-initialized data are allocated 12162 consecutively. 12163 12164`-sim2' 12165 Like `-sim', but pass linker options to locate initialized data at 12166 0x40000000 and zero-initialized data at 0x80000000. 12167 12168 12169File: gcc.info, Node: CR16 Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 12170 121713.17.8 CR16 Options 12172------------------- 12173 12174These options are defined specifically for the CR16 ports. 12175 12176`-mmac' 12177 Enable the use of multiply-accumulate instructions. Disabled by 12178 default. 12179 12180`-mcr16cplus' 12181`-mcr16c' 12182 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 12183 is default. 12184 12185`-msim' 12186 Links the library libsim.a which is in compatible with simulator. 12187 Applicable to ELF compiler only. 12188 12189`-mint32' 12190 Choose integer type as 32-bit wide. 12191 12192`-mbit-ops' 12193 Generates `sbit'/`cbit' instructions for bit manipulations. 12194 12195`-mdata-model=MODEL' 12196 Choose a data model. The choices for MODEL are `near', `far' or 12197 `medium'. `medium' is default. However, `far' is not valid with 12198 `-mcr16c', as the CR16C architecture does not support the far data 12199 model. 12200 12201 12202File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CR16 Options, Up: Submodel Options 12203 122043.17.9 Darwin Options 12205--------------------- 12206 12207These options are defined for all architectures running the Darwin 12208operating system. 12209 12210 FSF GCC on Darwin does not create "fat" object files; it creates an 12211object file for the single architecture that GCC was built to target. 12212Apple's GCC on Darwin does create "fat" files if multiple `-arch' 12213options are used; it does so by running the compiler or linker multiple 12214times and joining the results together with `lipo'. 12215 12216 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 12217is determined by the flags that specify the ISA that GCC is targeting, 12218like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 12219used to override this. 12220 12221 The Darwin tools vary in their behavior when presented with an ISA 12222mismatch. The assembler, `as', only permits instructions to be used 12223that are valid for the subtype of the file it is generating, so you 12224cannot put 64-bit instructions in a `ppc750' object file. The linker 12225for shared libraries, `/usr/bin/libtool', fails and prints an error if 12226asked to create a shared library with a less restrictive subtype than 12227its input files (for instance, trying to put a `ppc970' object file in 12228a `ppc7400' library). The linker for executables, `ld', quietly gives 12229the executable the most restrictive subtype of any of its input files. 12230 12231`-FDIR' 12232 Add the framework directory DIR to the head of the list of 12233 directories to be searched for header files. These directories are 12234 interleaved with those specified by `-I' options and are scanned 12235 in a left-to-right order. 12236 12237 A framework directory is a directory with frameworks in it. A 12238 framework is a directory with a `Headers' and/or `PrivateHeaders' 12239 directory contained directly in it that ends in `.framework'. The 12240 name of a framework is the name of this directory excluding the 12241 `.framework'. Headers associated with the framework are found in 12242 one of those two directories, with `Headers' being searched first. 12243 A subframework is a framework directory that is in a framework's 12244 `Frameworks' directory. Includes of subframework headers can only 12245 appear in a header of a framework that contains the subframework, 12246 or in a sibling subframework header. Two subframeworks are 12247 siblings if they occur in the same framework. A subframework 12248 should not have the same name as a framework; a warning is issued 12249 if this is violated. Currently a subframework cannot have 12250 subframeworks; in the future, the mechanism may be extended to 12251 support this. The standard frameworks can be found in 12252 `/System/Library/Frameworks' and `/Library/Frameworks'. An 12253 example include looks like `#include <Framework/header.h>', where 12254 `Framework' denotes the name of the framework and `header.h' is 12255 found in the `PrivateHeaders' or `Headers' directory. 12256 12257`-iframeworkDIR' 12258 Like `-F' except the directory is a treated as a system directory. 12259 The main difference between this `-iframework' and `-F' is that 12260 with `-iframework' the compiler does not warn about constructs 12261 contained within header files found via DIR. This option is valid 12262 only for the C family of languages. 12263 12264`-gused' 12265 Emit debugging information for symbols that are used. For stabs 12266 debugging format, this enables `-feliminate-unused-debug-symbols'. 12267 This is by default ON. 12268 12269`-gfull' 12270 Emit debugging information for all symbols and types. 12271 12272`-mmacosx-version-min=VERSION' 12273 The earliest version of MacOS X that this executable will run on 12274 is VERSION. Typical values of VERSION include `10.1', `10.2', and 12275 `10.3.9'. 12276 12277 If the compiler was built to use the system's headers by default, 12278 then the default for this option is the system version on which the 12279 compiler is running, otherwise the default is to make choices that 12280 are compatible with as many systems and code bases as possible. 12281 12282`-mkernel' 12283 Enable kernel development mode. The `-mkernel' option sets 12284 `-static', `-fno-common', `-fno-use-cxa-atexit', 12285 `-fno-exceptions', `-fno-non-call-exceptions', `-fapple-kext', 12286 `-fno-weak' and `-fno-rtti' where applicable. This mode also sets 12287 `-mno-altivec', `-msoft-float', `-fno-builtin' and `-mlong-branch' 12288 for PowerPC targets. 12289 12290`-mone-byte-bool' 12291 Override the defaults for `bool' so that `sizeof(bool)==1'. By 12292 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 12293 and `1' when compiling for Darwin/x86, so this option has no 12294 effect on x86. 12295 12296 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 12297 code that is not binary compatible with code generated without 12298 that switch. Using this switch may require recompiling all other 12299 modules in a program, including system libraries. Use this switch 12300 to conform to a non-default data model. 12301 12302`-mfix-and-continue' 12303`-ffix-and-continue' 12304`-findirect-data' 12305 Generate code suitable for fast turnaround development, such as to 12306 allow GDB to dynamically load `.o' files into already-running 12307 programs. `-findirect-data' and `-ffix-and-continue' are provided 12308 for backwards compatibility. 12309 12310`-all_load' 12311 Loads all members of static archive libraries. See man ld(1) for 12312 more information. 12313 12314`-arch_errors_fatal' 12315 Cause the errors having to do with files that have the wrong 12316 architecture to be fatal. 12317 12318`-bind_at_load' 12319 Causes the output file to be marked such that the dynamic linker 12320 will bind all undefined references when the file is loaded or 12321 launched. 12322 12323`-bundle' 12324 Produce a Mach-o bundle format file. See man ld(1) for more 12325 information. 12326 12327`-bundle_loader EXECUTABLE' 12328 This option specifies the EXECUTABLE that will load the build 12329 output file being linked. See man ld(1) for more information. 12330 12331`-dynamiclib' 12332 When passed this option, GCC produces a dynamic library instead of 12333 an executable when linking, using the Darwin `libtool' command. 12334 12335`-force_cpusubtype_ALL' 12336 This causes GCC's output file to have the ALL subtype, instead of 12337 one controlled by the `-mcpu' or `-march' option. 12338 12339`-allowable_client CLIENT_NAME' 12340`-client_name' 12341`-compatibility_version' 12342`-current_version' 12343`-dead_strip' 12344`-dependency-file' 12345`-dylib_file' 12346`-dylinker_install_name' 12347`-dynamic' 12348`-exported_symbols_list' 12349`-filelist' 12350`-flat_namespace' 12351`-force_flat_namespace' 12352`-headerpad_max_install_names' 12353`-image_base' 12354`-init' 12355`-install_name' 12356`-keep_private_externs' 12357`-multi_module' 12358`-multiply_defined' 12359`-multiply_defined_unused' 12360`-noall_load' 12361`-no_dead_strip_inits_and_terms' 12362`-nofixprebinding' 12363`-nomultidefs' 12364`-noprebind' 12365`-noseglinkedit' 12366`-pagezero_size' 12367`-prebind' 12368`-prebind_all_twolevel_modules' 12369`-private_bundle' 12370`-read_only_relocs' 12371`-sectalign' 12372`-sectobjectsymbols' 12373`-whyload' 12374`-seg1addr' 12375`-sectcreate' 12376`-sectobjectsymbols' 12377`-sectorder' 12378`-segaddr' 12379`-segs_read_only_addr' 12380`-segs_read_write_addr' 12381`-seg_addr_table' 12382`-seg_addr_table_filename' 12383`-seglinkedit' 12384`-segprot' 12385`-segs_read_only_addr' 12386`-segs_read_write_addr' 12387`-single_module' 12388`-static' 12389`-sub_library' 12390`-sub_umbrella' 12391`-twolevel_namespace' 12392`-umbrella' 12393`-undefined' 12394`-unexported_symbols_list' 12395`-weak_reference_mismatches' 12396`-whatsloaded' 12397 These options are passed to the Darwin linker. The Darwin linker 12398 man page describes them in detail. 12399 12400 12401File: gcc.info, Node: DEC Alpha Options, Next: FR30 Options, Prev: Darwin Options, Up: Submodel Options 12402 124033.17.10 DEC Alpha Options 12404------------------------- 12405 12406These `-m' options are defined for the DEC Alpha implementations: 12407 12408`-mno-soft-float' 12409`-msoft-float' 12410 Use (do not use) the hardware floating-point instructions for 12411 floating-point operations. When `-msoft-float' is specified, 12412 functions in `libgcc.a' are used to perform floating-point 12413 operations. Unless they are replaced by routines that emulate the 12414 floating-point operations, or compiled in such a way as to call 12415 such emulations routines, these routines issue floating-point 12416 operations. If you are compiling for an Alpha without 12417 floating-point operations, you must ensure that the library is 12418 built so as not to call them. 12419 12420 Note that Alpha implementations without floating-point operations 12421 are required to have floating-point registers. 12422 12423`-mfp-reg' 12424`-mno-fp-regs' 12425 Generate code that uses (does not use) the floating-point register 12426 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 12427 register set is not used, floating-point operands are passed in 12428 integer registers as if they were integers and floating-point 12429 results are passed in `$0' instead of `$f0'. This is a 12430 non-standard calling sequence, so any function with a 12431 floating-point argument or return value called by code compiled 12432 with `-mno-fp-regs' must also be compiled with that option. 12433 12434 A typical use of this option is building a kernel that does not 12435 use, and hence need not save and restore, any floating-point 12436 registers. 12437 12438`-mieee' 12439 The Alpha architecture implements floating-point hardware 12440 optimized for maximum performance. It is mostly compliant with 12441 the IEEE floating-point standard. However, for full compliance, 12442 software assistance is required. This option generates code fully 12443 IEEE-compliant code _except_ that the INEXACT-FLAG is not 12444 maintained (see below). If this option is turned on, the 12445 preprocessor macro `_IEEE_FP' is defined during compilation. The 12446 resulting code is less efficient but is able to correctly support 12447 denormalized numbers and exceptional IEEE values such as 12448 not-a-number and plus/minus infinity. Other Alpha compilers call 12449 this option `-ieee_with_no_inexact'. 12450 12451`-mieee-with-inexact' 12452 This is like `-mieee' except the generated code also maintains the 12453 IEEE INEXACT-FLAG. Turning on this option causes the generated 12454 code to implement fully-compliant IEEE math. In addition to 12455 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 12456 On some Alpha implementations the resulting code may execute 12457 significantly slower than the code generated by default. Since 12458 there is very little code that depends on the INEXACT-FLAG, you 12459 should normally not specify this option. Other Alpha compilers 12460 call this option `-ieee_with_inexact'. 12461 12462`-mfp-trap-mode=TRAP-MODE' 12463 This option controls what floating-point related traps are enabled. 12464 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 12465 trap mode can be set to one of four values: 12466 12467 `n' 12468 This is the default (normal) setting. The only traps that 12469 are enabled are the ones that cannot be disabled in software 12470 (e.g., division by zero trap). 12471 12472 `u' 12473 In addition to the traps enabled by `n', underflow traps are 12474 enabled as well. 12475 12476 `su' 12477 Like `u', but the instructions are marked to be safe for 12478 software completion (see Alpha architecture manual for 12479 details). 12480 12481 `sui' 12482 Like `su', but inexact traps are enabled as well. 12483 12484`-mfp-rounding-mode=ROUNDING-MODE' 12485 Selects the IEEE rounding mode. Other Alpha compilers call this 12486 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 12487 12488 `n' 12489 Normal IEEE rounding mode. Floating-point numbers are 12490 rounded towards the nearest machine number or towards the 12491 even machine number in case of a tie. 12492 12493 `m' 12494 Round towards minus infinity. 12495 12496 `c' 12497 Chopped rounding mode. Floating-point numbers are rounded 12498 towards zero. 12499 12500 `d' 12501 Dynamic rounding mode. A field in the floating-point control 12502 register (FPCR, see Alpha architecture reference manual) 12503 controls the rounding mode in effect. The C library 12504 initializes this register for rounding towards plus infinity. 12505 Thus, unless your program modifies the FPCR, `d' corresponds 12506 to round towards plus infinity. 12507 12508`-mtrap-precision=TRAP-PRECISION' 12509 In the Alpha architecture, floating-point traps are imprecise. 12510 This means without software assistance it is impossible to recover 12511 from a floating trap and program execution normally needs to be 12512 terminated. GCC can generate code that can assist operating 12513 system trap handlers in determining the exact location that caused 12514 a floating-point trap. Depending on the requirements of an 12515 application, different levels of precisions can be selected: 12516 12517 `p' 12518 Program precision. This option is the default and means a 12519 trap handler can only identify which program caused a 12520 floating-point exception. 12521 12522 `f' 12523 Function precision. The trap handler can determine the 12524 function that caused a floating-point exception. 12525 12526 `i' 12527 Instruction precision. The trap handler can determine the 12528 exact instruction that caused a floating-point exception. 12529 12530 Other Alpha compilers provide the equivalent options called 12531 `-scope_safe' and `-resumption_safe'. 12532 12533`-mieee-conformant' 12534 This option marks the generated code as IEEE conformant. You must 12535 not use this option unless you also specify `-mtrap-precision=i' 12536 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 12537 effect is to emit the line `.eflag 48' in the function prologue of 12538 the generated assembly file. 12539 12540`-mbuild-constants' 12541 Normally GCC examines a 32- or 64-bit integer constant to see if 12542 it can construct it from smaller constants in two or three 12543 instructions. If it cannot, it outputs the constant as a literal 12544 and generates code to load it from the data segment at run time. 12545 12546 Use this option to require GCC to construct _all_ integer constants 12547 using code, even if it takes more instructions (the maximum is 12548 six). 12549 12550 You typically use this option to build a shared library dynamic 12551 loader. Itself a shared library, it must relocate itself in memory 12552 before it can find the variables and constants in its own data 12553 segment. 12554 12555`-mbwx' 12556`-mno-bwx' 12557`-mcix' 12558`-mno-cix' 12559`-mfix' 12560`-mno-fix' 12561`-mmax' 12562`-mno-max' 12563 Indicate whether GCC should generate code to use the optional BWX, 12564 CIX, FIX and MAX instruction sets. The default is to use the 12565 instruction sets supported by the CPU type specified via `-mcpu=' 12566 option or that of the CPU on which GCC was built if none is 12567 specified. 12568 12569`-mfloat-vax' 12570`-mfloat-ieee' 12571 Generate code that uses (does not use) VAX F and G floating-point 12572 arithmetic instead of IEEE single and double precision. 12573 12574`-mexplicit-relocs' 12575`-mno-explicit-relocs' 12576 Older Alpha assemblers provided no way to generate symbol 12577 relocations except via assembler macros. Use of these macros does 12578 not allow optimal instruction scheduling. GNU binutils as of 12579 version 2.12 supports a new syntax that allows the compiler to 12580 explicitly mark which relocations should apply to which 12581 instructions. This option is mostly useful for debugging, as GCC 12582 detects the capabilities of the assembler when it is built and 12583 sets the default accordingly. 12584 12585`-msmall-data' 12586`-mlarge-data' 12587 When `-mexplicit-relocs' is in effect, static data is accessed via 12588 "gp-relative" relocations. When `-msmall-data' is used, objects 8 12589 bytes long or smaller are placed in a "small data area" (the 12590 `.sdata' and `.sbss' sections) and are accessed via 16-bit 12591 relocations off of the `$gp' register. This limits the size of 12592 the small data area to 64KB, but allows the variables to be 12593 directly accessed via a single instruction. 12594 12595 The default is `-mlarge-data'. With this option the data area is 12596 limited to just below 2GB. Programs that require more than 2GB of 12597 data must use `malloc' or `mmap' to allocate the data in the heap 12598 instead of in the program's data segment. 12599 12600 When generating code for shared libraries, `-fpic' implies 12601 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 12602 12603`-msmall-text' 12604`-mlarge-text' 12605 When `-msmall-text' is used, the compiler assumes that the code of 12606 the entire program (or shared library) fits in 4MB, and is thus 12607 reachable with a branch instruction. When `-msmall-data' is used, 12608 the compiler can assume that all local symbols share the same 12609 `$gp' value, and thus reduce the number of instructions required 12610 for a function call from 4 to 1. 12611 12612 The default is `-mlarge-text'. 12613 12614`-mcpu=CPU_TYPE' 12615 Set the instruction set and instruction scheduling parameters for 12616 machine type CPU_TYPE. You can specify either the `EV' style name 12617 or the corresponding chip number. GCC supports scheduling 12618 parameters for the EV4, EV5 and EV6 family of processors and 12619 chooses the default values for the instruction set from the 12620 processor you specify. If you do not specify a processor type, 12621 GCC defaults to the processor on which the compiler was built. 12622 12623 Supported values for CPU_TYPE are 12624 12625 `ev4' 12626 `ev45' 12627 `21064' 12628 Schedules as an EV4 and has no instruction set extensions. 12629 12630 `ev5' 12631 `21164' 12632 Schedules as an EV5 and has no instruction set extensions. 12633 12634 `ev56' 12635 `21164a' 12636 Schedules as an EV5 and supports the BWX extension. 12637 12638 `pca56' 12639 `21164pc' 12640 `21164PC' 12641 Schedules as an EV5 and supports the BWX and MAX extensions. 12642 12643 `ev6' 12644 `21264' 12645 Schedules as an EV6 and supports the BWX, FIX, and MAX 12646 extensions. 12647 12648 `ev67' 12649 `21264a' 12650 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 12651 extensions. 12652 12653 Native toolchains also support the value `native', which selects 12654 the best architecture option for the host processor. 12655 `-mcpu=native' has no effect if GCC does not recognize the 12656 processor. 12657 12658`-mtune=CPU_TYPE' 12659 Set only the instruction scheduling parameters for machine type 12660 CPU_TYPE. The instruction set is not changed. 12661 12662 Native toolchains also support the value `native', which selects 12663 the best architecture option for the host processor. 12664 `-mtune=native' has no effect if GCC does not recognize the 12665 processor. 12666 12667`-mmemory-latency=TIME' 12668 Sets the latency the scheduler should assume for typical memory 12669 references as seen by the application. This number is highly 12670 dependent on the memory access patterns used by the application 12671 and the size of the external cache on the machine. 12672 12673 Valid options for TIME are 12674 12675 `NUMBER' 12676 A decimal number representing clock cycles. 12677 12678 `L1' 12679 `L2' 12680 `L3' 12681 `main' 12682 The compiler contains estimates of the number of clock cycles 12683 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 12684 (also called Dcache, Scache, and Bcache), as well as to main 12685 memory. Note that L3 is only valid for EV5. 12686 12687 12688 12689File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options 12690 126913.17.11 FR30 Options 12692-------------------- 12693 12694These options are defined specifically for the FR30 port. 12695 12696`-msmall-model' 12697 Use the small address space model. This can produce smaller code, 12698 but it does assume that all symbolic values and addresses fit into 12699 a 20-bit range. 12700 12701`-mno-lsim' 12702 Assume that runtime support has been provided and so there is no 12703 need to include the simulator library (`libsim.a') on the linker 12704 command line. 12705 12706 12707 12708File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 12709 127103.17.12 FRV Options 12711------------------- 12712 12713`-mgpr-32' 12714 Only use the first 32 general-purpose registers. 12715 12716`-mgpr-64' 12717 Use all 64 general-purpose registers. 12718 12719`-mfpr-32' 12720 Use only the first 32 floating-point registers. 12721 12722`-mfpr-64' 12723 Use all 64 floating-point registers. 12724 12725`-mhard-float' 12726 Use hardware instructions for floating-point operations. 12727 12728`-msoft-float' 12729 Use library routines for floating-point operations. 12730 12731`-malloc-cc' 12732 Dynamically allocate condition code registers. 12733 12734`-mfixed-cc' 12735 Do not try to dynamically allocate condition code registers, only 12736 use `icc0' and `fcc0'. 12737 12738`-mdword' 12739 Change ABI to use double word insns. 12740 12741`-mno-dword' 12742 Do not use double word instructions. 12743 12744`-mdouble' 12745 Use floating-point double instructions. 12746 12747`-mno-double' 12748 Do not use floating-point double instructions. 12749 12750`-mmedia' 12751 Use media instructions. 12752 12753`-mno-media' 12754 Do not use media instructions. 12755 12756`-mmuladd' 12757 Use multiply and add/subtract instructions. 12758 12759`-mno-muladd' 12760 Do not use multiply and add/subtract instructions. 12761 12762`-mfdpic' 12763 Select the FDPIC ABI, which uses function descriptors to represent 12764 pointers to functions. Without any PIC/PIE-related options, it 12765 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 12766 and small data are within a 12-bit range from the GOT base 12767 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 12768 bits. With a `bfin-elf' target, this option implies `-msim'. 12769 12770`-minline-plt' 12771 Enable inlining of PLT entries in function calls to functions that 12772 are not known to bind locally. It has no effect without `-mfdpic'. 12773 It's enabled by default if optimizing for speed and compiling for 12774 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 12775 optimization option such as `-O3' or above is present in the 12776 command line. 12777 12778`-mTLS' 12779 Assume a large TLS segment when generating thread-local code. 12780 12781`-mtls' 12782 Do not assume a large TLS segment when generating thread-local 12783 code. 12784 12785`-mgprel-ro' 12786 Enable the use of `GPREL' relocations in the FDPIC ABI for data 12787 that is known to be in read-only sections. It's enabled by 12788 default, except for `-fpic' or `-fpie': even though it may help 12789 make the global offset table smaller, it trades 1 instruction for 12790 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 12791 of which may be shared by multiple symbols, and it avoids the need 12792 for a GOT entry for the referenced symbol, so it's more likely to 12793 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 12794 12795`-multilib-library-pic' 12796 Link with the (library, not FD) pic libraries. It's implied by 12797 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 12798 `-mfdpic'. You should never have to use it explicitly. 12799 12800`-mlinked-fp' 12801 Follow the EABI requirement of always creating a frame pointer 12802 whenever a stack frame is allocated. This option is enabled by 12803 default and can be disabled with `-mno-linked-fp'. 12804 12805`-mlong-calls' 12806 Use indirect addressing to call functions outside the current 12807 compilation unit. This allows the functions to be placed anywhere 12808 within the 32-bit address space. 12809 12810`-malign-labels' 12811 Try to align labels to an 8-byte boundary by inserting NOPs into 12812 the previous packet. This option only has an effect when VLIW 12813 packing is enabled. It doesn't create new packets; it merely adds 12814 NOPs to existing ones. 12815 12816`-mlibrary-pic' 12817 Generate position-independent EABI code. 12818 12819`-macc-4' 12820 Use only the first four media accumulator registers. 12821 12822`-macc-8' 12823 Use all eight media accumulator registers. 12824 12825`-mpack' 12826 Pack VLIW instructions. 12827 12828`-mno-pack' 12829 Do not pack VLIW instructions. 12830 12831`-mno-eflags' 12832 Do not mark ABI switches in e_flags. 12833 12834`-mcond-move' 12835 Enable the use of conditional-move instructions (default). 12836 12837 This switch is mainly for debugging the compiler and will likely 12838 be removed in a future version. 12839 12840`-mno-cond-move' 12841 Disable the use of conditional-move instructions. 12842 12843 This switch is mainly for debugging the compiler and will likely 12844 be removed in a future version. 12845 12846`-mscc' 12847 Enable the use of conditional set instructions (default). 12848 12849 This switch is mainly for debugging the compiler and will likely 12850 be removed in a future version. 12851 12852`-mno-scc' 12853 Disable the use of conditional set instructions. 12854 12855 This switch is mainly for debugging the compiler and will likely 12856 be removed in a future version. 12857 12858`-mcond-exec' 12859 Enable the use of conditional execution (default). 12860 12861 This switch is mainly for debugging the compiler and will likely 12862 be removed in a future version. 12863 12864`-mno-cond-exec' 12865 Disable the use of conditional execution. 12866 12867 This switch is mainly for debugging the compiler and will likely 12868 be removed in a future version. 12869 12870`-mvliw-branch' 12871 Run a pass to pack branches into VLIW instructions (default). 12872 12873 This switch is mainly for debugging the compiler and will likely 12874 be removed in a future version. 12875 12876`-mno-vliw-branch' 12877 Do not run a pass to pack branches into VLIW instructions. 12878 12879 This switch is mainly for debugging the compiler and will likely 12880 be removed in a future version. 12881 12882`-mmulti-cond-exec' 12883 Enable optimization of `&&' and `||' in conditional execution 12884 (default). 12885 12886 This switch is mainly for debugging the compiler and will likely 12887 be removed in a future version. 12888 12889`-mno-multi-cond-exec' 12890 Disable optimization of `&&' and `||' in conditional execution. 12891 12892 This switch is mainly for debugging the compiler and will likely 12893 be removed in a future version. 12894 12895`-mnested-cond-exec' 12896 Enable nested conditional execution optimizations (default). 12897 12898 This switch is mainly for debugging the compiler and will likely 12899 be removed in a future version. 12900 12901`-mno-nested-cond-exec' 12902 Disable nested conditional execution optimizations. 12903 12904 This switch is mainly for debugging the compiler and will likely 12905 be removed in a future version. 12906 12907`-moptimize-membar' 12908 This switch removes redundant `membar' instructions from the 12909 compiler-generated code. It is enabled by default. 12910 12911`-mno-optimize-membar' 12912 This switch disables the automatic removal of redundant `membar' 12913 instructions from the generated code. 12914 12915`-mtomcat-stats' 12916 Cause gas to print out tomcat statistics. 12917 12918`-mcpu=CPU' 12919 Select the processor type for which to generate code. Possible 12920 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 12921 `fr400', `fr300' and `simple'. 12922 12923 12924 12925File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 12926 129273.17.13 GNU/Linux Options 12928------------------------- 12929 12930These `-m' options are defined for GNU/Linux targets: 12931 12932`-mglibc' 12933 Use the GNU C library. This is the default except on 12934 `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets. 12935 12936`-muclibc' 12937 Use uClibc C library. This is the default on `*-*-linux-*uclibc*' 12938 targets. 12939 12940`-mbionic' 12941 Use Bionic C library. This is the default on 12942 `*-*-linux-*android*' targets. 12943 12944`-mandroid' 12945 Compile code compatible with Android platform. This is the 12946 default on `*-*-linux-*android*' targets. 12947 12948 When compiling, this option enables `-mbionic', `-fPIC', 12949 `-fno-exceptions' and `-fno-rtti' by default. When linking, this 12950 option makes the GCC driver pass Android-specific options to the 12951 linker. Finally, this option causes the preprocessor macro 12952 `__ANDROID__' to be defined. 12953 12954`-tno-android-cc' 12955 Disable compilation effects of `-mandroid', i.e., do not enable 12956 `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default. 12957 12958`-tno-android-ld' 12959 Disable linking effects of `-mandroid', i.e., pass standard Linux 12960 linking options to the linker. 12961 12962 12963 12964File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 12965 129663.17.14 H8/300 Options 12967---------------------- 12968 12969These `-m' options are defined for the H8/300 implementations: 12970 12971`-mrelax' 12972 Shorten some address references at link time, when possible; uses 12973 the linker option `-relax'. *Note `ld' and the H8/300: 12974 (ld)H8/300, for a fuller description. 12975 12976`-mh' 12977 Generate code for the H8/300H. 12978 12979`-ms' 12980 Generate code for the H8S. 12981 12982`-mn' 12983 Generate code for the H8S and H8/300H in the normal mode. This 12984 switch must be used either with `-mh' or `-ms'. 12985 12986`-ms2600' 12987 Generate code for the H8S/2600. This switch must be used with 12988 `-ms'. 12989 12990`-mexr' 12991 Extended registers are stored on stack before execution of function 12992 with monitor attribute. Default option is `-mexr'. This option is 12993 valid only for H8S targets. 12994 12995`-mno-exr' 12996 Extended registers are not stored on stack before execution of 12997 function with monitor attribute. Default option is `-mno-exr'. 12998 This option is valid only for H8S targets. 12999 13000`-mint32' 13001 Make `int' data 32 bits by default. 13002 13003`-malign-300' 13004 On the H8/300H and H8S, use the same alignment rules as for the 13005 H8/300. The default for the H8/300H and H8S is to align longs and 13006 floats on 4-byte boundaries. `-malign-300' causes them to be 13007 aligned on 2-byte boundaries. This option has no effect on the 13008 H8/300. 13009 13010 13011File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 13012 130133.17.15 HPPA Options 13014-------------------- 13015 13016These `-m' options are defined for the HPPA family of computers: 13017 13018`-march=ARCHITECTURE-TYPE' 13019 Generate code for the specified architecture. The choices for 13020 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 13021 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 13022 an HP-UX system to determine the proper architecture option for 13023 your machine. Code compiled for lower numbered architectures runs 13024 on higher numbered architectures, but not the other way around. 13025 13026`-mpa-risc-1-0' 13027`-mpa-risc-1-1' 13028`-mpa-risc-2-0' 13029 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 13030 respectively. 13031 13032`-mbig-switch' 13033 Generate code suitable for big switch tables. Use this option 13034 only if the assembler/linker complain about out-of-range branches 13035 within a switch table. 13036 13037`-mjump-in-delay' 13038 Fill delay slots of function calls with unconditional jump 13039 instructions by modifying the return pointer for the function call 13040 to be the target of the conditional jump. 13041 13042`-mdisable-fpregs' 13043 Prevent floating-point registers from being used in any manner. 13044 This is necessary for compiling kernels that perform lazy context 13045 switching of floating-point registers. If you use this option and 13046 attempt to perform floating-point operations, the compiler aborts. 13047 13048`-mdisable-indexing' 13049 Prevent the compiler from using indexing address modes. This 13050 avoids some rather obscure problems when compiling MIG generated 13051 code under MACH. 13052 13053`-mno-space-regs' 13054 Generate code that assumes the target has no space registers. 13055 This allows GCC to generate faster indirect calls and use unscaled 13056 index address modes. 13057 13058 Such code is suitable for level 0 PA systems and kernels. 13059 13060`-mfast-indirect-calls' 13061 Generate code that assumes calls never cross space boundaries. 13062 This allows GCC to emit code that performs faster indirect calls. 13063 13064 This option does not work in the presence of shared libraries or 13065 nested functions. 13066 13067`-mfixed-range=REGISTER-RANGE' 13068 Generate code treating the given register range as fixed registers. 13069 A fixed register is one that the register allocator cannot use. 13070 This is useful when compiling kernel code. A register range is 13071 specified as two registers separated by a dash. Multiple register 13072 ranges can be specified separated by a comma. 13073 13074`-mlong-load-store' 13075 Generate 3-instruction load and store sequences as sometimes 13076 required by the HP-UX 10 linker. This is equivalent to the `+k' 13077 option to the HP compilers. 13078 13079`-mportable-runtime' 13080 Use the portable calling conventions proposed by HP for ELF 13081 systems. 13082 13083`-mgas' 13084 Enable the use of assembler directives only GAS understands. 13085 13086`-mschedule=CPU-TYPE' 13087 Schedule code according to the constraints for the machine type 13088 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 13089 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 13090 HP-UX system to determine the proper scheduling option for your 13091 machine. The default scheduling is `8000'. 13092 13093`-mlinker-opt' 13094 Enable the optimization pass in the HP-UX linker. Note this makes 13095 symbolic debugging impossible. It also triggers a bug in the 13096 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 13097 messages when linking some programs. 13098 13099`-msoft-float' 13100 Generate output containing library calls for floating point. 13101 *Warning:* the requisite libraries are not available for all HPPA 13102 targets. Normally the facilities of the machine's usual C 13103 compiler are used, but this cannot be done directly in 13104 cross-compilation. You must make your own arrangements to provide 13105 suitable library functions for cross-compilation. 13106 13107 `-msoft-float' changes the calling convention in the output file; 13108 therefore, it is only useful if you compile _all_ of a program with 13109 this option. In particular, you need to compile `libgcc.a', the 13110 library that comes with GCC, with `-msoft-float' in order for this 13111 to work. 13112 13113`-msio' 13114 Generate the predefine, `_SIO', for server IO. The default is 13115 `-mwsio'. This generates the predefines, `__hp9000s700', 13116 `__hp9000s700__' and `_WSIO', for workstation IO. These options 13117 are available under HP-UX and HI-UX. 13118 13119`-mgnu-ld' 13120 Use options specific to GNU `ld'. This passes `-shared' to `ld' 13121 when building a shared library. It is the default when GCC is 13122 configured, explicitly or implicitly, with the GNU linker. This 13123 option does not affect which `ld' is called; it only changes what 13124 parameters are passed to that `ld'. The `ld' that is called is 13125 determined by the `--with-ld' configure option, GCC's program 13126 search path, and finally by the user's `PATH'. The linker used by 13127 GCC can be printed using `which `gcc -print-prog-name=ld`'. This 13128 option is only available on the 64-bit HP-UX GCC, i.e. configured 13129 with `hppa*64*-*-hpux*'. 13130 13131`-mhp-ld' 13132 Use options specific to HP `ld'. This passes `-b' to `ld' when 13133 building a shared library and passes `+Accept TypeMismatch' to 13134 `ld' on all links. It is the default when GCC is configured, 13135 explicitly or implicitly, with the HP linker. This option does 13136 not affect which `ld' is called; it only changes what parameters 13137 are passed to that `ld'. The `ld' that is called is determined by 13138 the `--with-ld' configure option, GCC's program search path, and 13139 finally by the user's `PATH'. The linker used by GCC can be 13140 printed using `which `gcc -print-prog-name=ld`'. This option is 13141 only available on the 64-bit HP-UX GCC, i.e. configured with 13142 `hppa*64*-*-hpux*'. 13143 13144`-mlong-calls' 13145 Generate code that uses long call sequences. This ensures that a 13146 call is always able to reach linker generated stubs. The default 13147 is to generate long calls only when the distance from the call 13148 site to the beginning of the function or translation unit, as the 13149 case may be, exceeds a predefined limit set by the branch type 13150 being used. The limits for normal calls are 7,600,000 and 240,000 13151 bytes, respectively for the PA 2.0 and PA 1.X architectures. 13152 Sibcalls are always limited at 240,000 bytes. 13153 13154 Distances are measured from the beginning of functions when using 13155 the `-ffunction-sections' option, or when using the `-mgas' and 13156 `-mno-portable-runtime' options together under HP-UX with the SOM 13157 linker. 13158 13159 It is normally not desirable to use this option as it degrades 13160 performance. However, it may be useful in large applications, 13161 particularly when partial linking is used to build the application. 13162 13163 The types of long calls used depends on the capabilities of the 13164 assembler and linker, and the type of code being generated. The 13165 impact on systems that support long absolute calls, and long pic 13166 symbol-difference or pc-relative calls should be relatively small. 13167 However, an indirect call is used on 32-bit ELF systems in pic code 13168 and it is quite long. 13169 13170`-munix=UNIX-STD' 13171 Generate compiler predefines and select a startfile for the 13172 specified UNIX standard. The choices for UNIX-STD are `93', `95' 13173 and `98'. `93' is supported on all HP-UX versions. `95' is 13174 available on HP-UX 10.10 and later. `98' is available on HP-UX 13175 11.11 and later. The default values are `93' for HP-UX 10.00, 13176 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 13177 later. 13178 13179 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 13180 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 13181 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 13182 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 13183 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 13184 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 13185 13186 It is _important_ to note that this option changes the interfaces 13187 for various library routines. It also affects the operational 13188 behavior of the C library. Thus, _extreme_ care is needed in 13189 using this option. 13190 13191 Library code that is intended to operate with more than one UNIX 13192 standard must test, set and restore the variable 13193 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 13194 provide this capability. 13195 13196`-nolibdld' 13197 Suppress the generation of link options to search libdld.sl when 13198 the `-static' option is specified on HP-UX 10 and later. 13199 13200`-static' 13201 The HP-UX implementation of setlocale in libc has a dependency on 13202 libdld.sl. There isn't an archive version of libdld.sl. Thus, 13203 when the `-static' option is specified, special link options are 13204 needed to resolve this dependency. 13205 13206 On HP-UX 10 and later, the GCC driver adds the necessary options to 13207 link with libdld.sl when the `-static' option is specified. This 13208 causes the resulting binary to be dynamic. On the 64-bit port, 13209 the linkers generate dynamic binaries by default in any case. The 13210 `-nolibdld' option can be used to prevent the GCC driver from 13211 adding these link options. 13212 13213`-threads' 13214 Add support for multithreading with the "dce thread" library under 13215 HP-UX. This option sets flags for both the preprocessor and 13216 linker. 13217 13218 13219File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options 13220 132213.17.16 Intel 386 and AMD x86-64 Options 13222---------------------------------------- 13223 13224These `-m' options are defined for the i386 and x86-64 family of 13225computers: 13226 13227`-march=CPU-TYPE' 13228 Generate instructions for the machine type CPU-TYPE. In contrast 13229 to `-mtune=CPU-TYPE', which merely tunes the generated code for 13230 the specified CPU-TYPE, `-march=CPU-TYPE' allows GCC to generate 13231 code that may not run at all on processors other than the one 13232 indicated. Specifying `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 13233 13234 The choices for CPU-TYPE are: 13235 13236 `native' 13237 This selects the CPU to generate code for at compilation time 13238 by determining the processor type of the compiling machine. 13239 Using `-march=native' enables all instruction subsets 13240 supported by the local machine (hence the result might not 13241 run on different machines). Using `-mtune=native' produces 13242 code optimized for the local machine under the constraints of 13243 the selected instruction set. 13244 13245 `i386' 13246 Original Intel i386 CPU. 13247 13248 `i486' 13249 Intel i486 CPU. (No scheduling is implemented for this chip.) 13250 13251 `i586' 13252 `pentium' 13253 Intel Pentium CPU with no MMX support. 13254 13255 `pentium-mmx' 13256 Intel Pentium MMX CPU, based on Pentium core with MMX 13257 instruction set support. 13258 13259 `pentiumpro' 13260 Intel Pentium Pro CPU. 13261 13262 `i686' 13263 When used with `-march', the Pentium Pro instruction set is 13264 used, so the code runs on all i686 family chips. When used 13265 with `-mtune', it has the same meaning as `generic'. 13266 13267 `pentium2' 13268 Intel Pentium II CPU, based on Pentium Pro core with MMX 13269 instruction set support. 13270 13271 `pentium3' 13272 `pentium3m' 13273 Intel Pentium III CPU, based on Pentium Pro core with MMX and 13274 SSE instruction set support. 13275 13276 `pentium-m' 13277 Intel Pentium M; low-power version of Intel Pentium III CPU 13278 with MMX, SSE and SSE2 instruction set support. Used by 13279 Centrino notebooks. 13280 13281 `pentium4' 13282 `pentium4m' 13283 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set 13284 support. 13285 13286 `prescott' 13287 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 13288 and SSE3 instruction set support. 13289 13290 `nocona' 13291 Improved version of Intel Pentium 4 CPU with 64-bit 13292 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 13293 13294 `core2' 13295 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 13296 and SSSE3 instruction set support. 13297 13298 `corei7' 13299 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, 13300 SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support. 13301 13302 `corei7-avx' 13303 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, 13304 SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction 13305 set support. 13306 13307 `core-avx-i' 13308 Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, 13309 SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and 13310 F16C instruction set support. 13311 13312 `core-avx2' 13313 Intel Core CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, 13314 SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL, 13315 FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction set 13316 support. 13317 13318 `atom' 13319 Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, 13320 SSE3 and SSSE3 instruction set support. 13321 13322 `k6' 13323 AMD K6 CPU with MMX instruction set support. 13324 13325 `k6-2' 13326 `k6-3' 13327 Improved versions of AMD K6 CPU with MMX and 3DNow! 13328 instruction set support. 13329 13330 `athlon' 13331 `athlon-tbird' 13332 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE 13333 prefetch instructions support. 13334 13335 `athlon-4' 13336 `athlon-xp' 13337 `athlon-mp' 13338 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and 13339 full SSE instruction set support. 13340 13341 `k8' 13342 `opteron' 13343 `athlon64' 13344 `athlon-fx' 13345 Processors based on the AMD K8 core with x86-64 instruction 13346 set support, including the AMD Opteron, Athlon 64, and Athlon 13347 64 FX processors. (This supersets MMX, SSE, SSE2, 3DNow!, 13348 enhanced 3DNow! and 64-bit instruction set extensions.) 13349 13350 `k8-sse3' 13351 `opteron-sse3' 13352 `athlon64-sse3' 13353 Improved versions of AMD K8 cores with SSE3 instruction set 13354 support. 13355 13356 `amdfam10' 13357 `barcelona' 13358 CPUs based on AMD Family 10h cores with x86-64 instruction 13359 set support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 13360 3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set 13361 extensions.) 13362 13363 `bdver1' 13364 CPUs based on AMD Family 15h cores with x86-64 instruction 13365 set support. (This supersets FMA4, AVX, XOP, LWP, AES, 13366 PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, 13367 SSE4.2, ABM and 64-bit instruction set extensions.) 13368 13369 `bdver2' 13370 AMD Family 15h core based CPUs with x86-64 instruction set 13371 support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, 13372 AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, 13373 SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.) 13374 13375 `bdver3' 13376 AMD Family 15h core based CPUs with x86-64 instruction set 13377 support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, 13378 AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, 13379 SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions. 13380 13381 `btver1' 13382 CPUs based on AMD Family 14h cores with x86-64 instruction 13383 set support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, 13384 SSE4A, CX16, ABM and 64-bit instruction set extensions.) 13385 13386 `btver2' 13387 CPUs based on AMD Family 16h cores with x86-64 instruction 13388 set support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, 13389 AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, 13390 SSE, MMX and 64-bit instruction set extensions. 13391 13392 `winchip-c6' 13393 IDT WinChip C6 CPU, dealt in same way as i486 with additional 13394 MMX instruction set support. 13395 13396 `winchip2' 13397 IDT WinChip 2 CPU, dealt in same way as i486 with additional 13398 MMX and 3DNow! instruction set support. 13399 13400 `c3' 13401 VIA C3 CPU with MMX and 3DNow! instruction set support. (No 13402 scheduling is implemented for this chip.) 13403 13404 `c3-2' 13405 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set 13406 support. (No scheduling is implemented for this chip.) 13407 13408 `geode' 13409 AMD Geode embedded processor with MMX and 3DNow! instruction 13410 set support. 13411 13412`-mtune=CPU-TYPE' 13413 Tune to CPU-TYPE everything applicable about the generated code, 13414 except for the ABI and the set of available instructions. While 13415 picking a specific CPU-TYPE schedules things appropriately for 13416 that particular chip, the compiler does not generate any code that 13417 cannot run on the default machine type unless you use a 13418 `-march=CPU-TYPE' option. For example, if GCC is configured for 13419 i686-pc-linux-gnu then `-mtune=pentium4' generates code that is 13420 tuned for Pentium 4 but still runs on i686 machines. 13421 13422 The choices for CPU-TYPE are the same as for `-march'. In 13423 addition, `-mtune' supports an extra choice for CPU-TYPE: 13424 13425 `generic' 13426 Produce code optimized for the most common IA32/AMD64/EM64T 13427 processors. If you know the CPU on which your code will run, 13428 then you should use the corresponding `-mtune' or `-march' 13429 option instead of `-mtune=generic'. But, if you do not know 13430 exactly what CPU users of your application will have, then 13431 you should use this option. 13432 13433 As new processors are deployed in the marketplace, the 13434 behavior of this option will change. Therefore, if you 13435 upgrade to a newer version of GCC, code generation controlled 13436 by this option will change to reflect the processors that are 13437 most common at the time that version of GCC is released. 13438 13439 There is no `-march=generic' option because `-march' 13440 indicates the instruction set the compiler can use, and there 13441 is no generic instruction set applicable to all processors. 13442 In contrast, `-mtune' indicates the processor (or, in this 13443 case, collection of processors) for which the code is 13444 optimized. 13445 13446`-mcpu=CPU-TYPE' 13447 A deprecated synonym for `-mtune'. 13448 13449`-mfpmath=UNIT' 13450 Generate floating-point arithmetic for selected unit UNIT. The 13451 choices for UNIT are: 13452 13453 `387' 13454 Use the standard 387 floating-point coprocessor present on 13455 the majority of chips and emulated otherwise. Code compiled 13456 with this option runs almost everywhere. The temporary 13457 results are computed in 80-bit precision instead of the 13458 precision specified by the type, resulting in slightly 13459 different results compared to most of other chips. See 13460 `-ffloat-store' for more detailed description. 13461 13462 This is the default choice for i386 compiler. 13463 13464 `sse' 13465 Use scalar floating-point instructions present in the SSE 13466 instruction set. This instruction set is supported by 13467 Pentium III and newer chips, and in the AMD line by Athlon-4, 13468 Athlon XP and Athlon MP chips. The earlier version of the SSE 13469 instruction set supports only single-precision arithmetic, 13470 thus the double and extended-precision arithmetic are still 13471 done using 387. A later version, present only in Pentium 4 13472 and AMD x86-64 chips, supports double-precision arithmetic 13473 too. 13474 13475 For the i386 compiler, you must use `-march=CPU-TYPE', `-msse' 13476 or `-msse2' switches to enable SSE extensions and make this 13477 option effective. For the x86-64 compiler, these extensions 13478 are enabled by default. 13479 13480 The resulting code should be considerably faster in the 13481 majority of cases and avoid the numerical instability 13482 problems of 387 code, but may break some existing code that 13483 expects temporaries to be 80 bits. 13484 13485 This is the default choice for the x86-64 compiler. 13486 13487 `sse,387' 13488 `sse+387' 13489 `both' 13490 Attempt to utilize both instruction sets at once. This 13491 effectively doubles the amount of available registers, and on 13492 chips with separate execution units for 387 and SSE the 13493 execution resources too. Use this option with care, as it is 13494 still experimental, because the GCC register allocator does 13495 not model separate functional units well, resulting in 13496 unstable performance. 13497 13498`-masm=DIALECT' 13499 Output assembly instructions using selected DIALECT. Supported 13500 choices are `intel' or `att' (the default). Darwin does not 13501 support `intel'. 13502 13503`-mieee-fp' 13504`-mno-ieee-fp' 13505 Control whether or not the compiler uses IEEE floating-point 13506 comparisons. These correctly handle the case where the result of a 13507 comparison is unordered. 13508 13509`-msoft-float' 13510 Generate output containing library calls for floating point. 13511 13512 *Warning:* the requisite libraries are not part of GCC. Normally 13513 the facilities of the machine's usual C compiler are used, but 13514 this can't be done directly in cross-compilation. You must make 13515 your own arrangements to provide suitable library functions for 13516 cross-compilation. 13517 13518 On machines where a function returns floating-point results in the 13519 80387 register stack, some floating-point opcodes may be emitted 13520 even if `-msoft-float' is used. 13521 13522`-mno-fp-ret-in-387' 13523 Do not use the FPU registers for return values of functions. 13524 13525 The usual calling convention has functions return values of types 13526 `float' and `double' in an FPU register, even if there is no FPU. 13527 The idea is that the operating system should emulate an FPU. 13528 13529 The option `-mno-fp-ret-in-387' causes such values to be returned 13530 in ordinary CPU registers instead. 13531 13532`-mno-fancy-math-387' 13533 Some 387 emulators do not support the `sin', `cos' and `sqrt' 13534 instructions for the 387. Specify this option to avoid generating 13535 those instructions. This option is the default on FreeBSD, 13536 OpenBSD and NetBSD. This option is overridden when `-march' 13537 indicates that the target CPU always has an FPU and so the 13538 instruction does not need emulation. These instructions are not 13539 generated unless you also use the `-funsafe-math-optimizations' 13540 switch. 13541 13542`-malign-double' 13543`-mno-align-double' 13544 Control whether GCC aligns `double', `long double', and `long 13545 long' variables on a two-word boundary or a one-word boundary. 13546 Aligning `double' variables on a two-word boundary produces code 13547 that runs somewhat faster on a Pentium at the expense of more 13548 memory. 13549 13550 On x86-64, `-malign-double' is enabled by default. 13551 13552 *Warning:* if you use the `-malign-double' switch, structures 13553 containing the above types are aligned differently than the 13554 published application binary interface specifications for the 386 13555 and are not binary compatible with structures in code compiled 13556 without that switch. 13557 13558`-m96bit-long-double' 13559`-m128bit-long-double' 13560 These switches control the size of `long double' type. The i386 13561 application binary interface specifies the size to be 96 bits, so 13562 `-m96bit-long-double' is the default in 32-bit mode. 13563 13564 Modern architectures (Pentium and newer) prefer `long double' to 13565 be aligned to an 8- or 16-byte boundary. In arrays or structures 13566 conforming to the ABI, this is not possible. So specifying 13567 `-m128bit-long-double' aligns `long double' to a 16-byte boundary 13568 by padding the `long double' with an additional 32-bit zero. 13569 13570 In the x86-64 compiler, `-m128bit-long-double' is the default 13571 choice as its ABI specifies that `long double' is aligned on 13572 16-byte boundary. 13573 13574 Notice that neither of these options enable any extra precision 13575 over the x87 standard of 80 bits for a `long double'. 13576 13577 *Warning:* if you override the default value for your target ABI, 13578 this changes the size of structures and arrays containing `long 13579 double' variables, as well as modifying the function calling 13580 convention for functions taking `long double'. Hence they are not 13581 binary-compatible with code compiled without that switch. 13582 13583`-mlong-double-64' 13584`-mlong-double-80' 13585 These switches control the size of `long double' type. A size of 13586 64 bits makes the `long double' type equivalent to the `double' 13587 type. This is the default for Bionic C library. 13588 13589 *Warning:* if you override the default value for your target ABI, 13590 this changes the size of structures and arrays containing `long 13591 double' variables, as well as modifying the function calling 13592 convention for functions taking `long double'. Hence they are not 13593 binary-compatible with code compiled without that switch. 13594 13595`-mlarge-data-threshold=THRESHOLD' 13596 When `-mcmodel=medium' is specified, data objects larger than 13597 THRESHOLD are placed in the large data section. This value must 13598 be the same across all objects linked into the binary, and 13599 defaults to 65535. 13600 13601`-mrtd' 13602 Use a different function-calling convention, in which functions 13603 that take a fixed number of arguments return with the `ret NUM' 13604 instruction, which pops their arguments while returning. This 13605 saves one instruction in the caller since there is no need to pop 13606 the arguments there. 13607 13608 You can specify that an individual function is called with this 13609 calling sequence with the function attribute `stdcall'. You can 13610 also override the `-mrtd' option by using the function attribute 13611 `cdecl'. *Note Function Attributes::. 13612 13613 *Warning:* this calling convention is incompatible with the one 13614 normally used on Unix, so you cannot use it if you need to call 13615 libraries compiled with the Unix compiler. 13616 13617 Also, you must provide function prototypes for all functions that 13618 take variable numbers of arguments (including `printf'); otherwise 13619 incorrect code is generated for calls to those functions. 13620 13621 In addition, seriously incorrect code results if you call a 13622 function with too many arguments. (Normally, extra arguments are 13623 harmlessly ignored.) 13624 13625`-mregparm=NUM' 13626 Control how many registers are used to pass integer arguments. By 13627 default, no registers are used to pass arguments, and at most 3 13628 registers can be used. You can control this behavior for a 13629 specific function by using the function attribute `regparm'. 13630 *Note Function Attributes::. 13631 13632 *Warning:* if you use this switch, and NUM is nonzero, then you 13633 must build all modules with the same value, including any 13634 libraries. This includes the system libraries and startup modules. 13635 13636`-msseregparm' 13637 Use SSE register passing conventions for float and double arguments 13638 and return values. You can control this behavior for a specific 13639 function by using the function attribute `sseregparm'. *Note 13640 Function Attributes::. 13641 13642 *Warning:* if you use this switch then you must build all modules 13643 with the same value, including any libraries. This includes the 13644 system libraries and startup modules. 13645 13646`-mvect8-ret-in-mem' 13647 Return 8-byte vectors in memory instead of MMX registers. This is 13648 the default on Solaris 8 and 9 and VxWorks to match the ABI of the 13649 Sun Studio compilers until version 12. Later compiler versions 13650 (starting with Studio 12 Update 1) follow the ABI used by other 13651 x86 targets, which is the default on Solaris 10 and later. _Only_ 13652 use this option if you need to remain compatible with existing 13653 code produced by those previous compiler versions or older 13654 versions of GCC. 13655 13656`-mpc32' 13657`-mpc64' 13658`-mpc80' 13659 Set 80387 floating-point precision to 32, 64 or 80 bits. When 13660 `-mpc32' is specified, the significands of results of 13661 floating-point operations are rounded to 24 bits (single 13662 precision); `-mpc64' rounds the significands of results of 13663 floating-point operations to 53 bits (double precision) and 13664 `-mpc80' rounds the significands of results of floating-point 13665 operations to 64 bits (extended double precision), which is the 13666 default. When this option is used, floating-point operations in 13667 higher precisions are not available to the programmer without 13668 setting the FPU control word explicitly. 13669 13670 Setting the rounding of floating-point operations to less than the 13671 default 80 bits can speed some programs by 2% or more. Note that 13672 some mathematical libraries assume that extended-precision 13673 (80-bit) floating-point operations are enabled by default; 13674 routines in such libraries could suffer significant loss of 13675 accuracy, typically through so-called "catastrophic cancellation", 13676 when this option is used to set the precision to less than 13677 extended precision. 13678 13679`-mstackrealign' 13680 Realign the stack at entry. On the Intel x86, the `-mstackrealign' 13681 option generates an alternate prologue and epilogue that realigns 13682 the run-time stack if necessary. This supports mixing legacy 13683 codes that keep 4-byte stack alignment with modern codes that keep 13684 16-byte stack alignment for SSE compatibility. See also the 13685 attribute `force_align_arg_pointer', applicable to individual 13686 functions. 13687 13688`-mpreferred-stack-boundary=NUM' 13689 Attempt to keep the stack boundary aligned to a 2 raised to NUM 13690 byte boundary. If `-mpreferred-stack-boundary' is not specified, 13691 the default is 4 (16 bytes or 128 bits). 13692 13693 *Warning:* When generating code for the x86-64 architecture with 13694 SSE extensions disabled, `-mpreferred-stack-boundary=3' can be 13695 used to keep the stack boundary aligned to 8 byte boundary. Since 13696 x86-64 ABI require 16 byte stack alignment, this is ABI 13697 incompatible and intended to be used in controlled environment 13698 where stack space is important limitation. This option will lead 13699 to wrong code when functions compiled with 16 byte stack alignment 13700 (such as functions from a standard library) are called with 13701 misaligned stack. In this case, SSE instructions may lead to 13702 misaligned memory access traps. In addition, variable arguments 13703 will be handled incorrectly for 16 byte aligned objects (including 13704 x87 long double and __int128), leading to wrong results. You must 13705 build all modules with `-mpreferred-stack-boundary=3', including 13706 any libraries. This includes the system libraries and startup 13707 modules. 13708 13709`-mincoming-stack-boundary=NUM' 13710 Assume the incoming stack is aligned to a 2 raised to NUM byte 13711 boundary. If `-mincoming-stack-boundary' is not specified, the 13712 one specified by `-mpreferred-stack-boundary' is used. 13713 13714 On Pentium and Pentium Pro, `double' and `long double' values 13715 should be aligned to an 8-byte boundary (see `-malign-double') or 13716 suffer significant run time performance penalties. On Pentium 13717 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 13718 work properly if it is not 16-byte aligned. 13719 13720 To ensure proper alignment of this values on the stack, the stack 13721 boundary must be as aligned as that required by any value stored 13722 on the stack. Further, every function must be generated such that 13723 it keeps the stack aligned. Thus calling a function compiled with 13724 a higher preferred stack boundary from a function compiled with a 13725 lower preferred stack boundary most likely misaligns the stack. 13726 It is recommended that libraries that use callbacks always use the 13727 default setting. 13728 13729 This extra alignment does consume extra stack space, and generally 13730 increases code size. Code that is sensitive to stack space usage, 13731 such as embedded systems and operating system kernels, may want to 13732 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 13733 13734`-mmmx' 13735`-mno-mmx' 13736`-msse' 13737`-mno-sse' 13738`-msse2' 13739`-mno-sse2' 13740`-msse3' 13741`-mno-sse3' 13742`-mssse3' 13743`-mno-ssse3' 13744`-msse4.1' 13745`-mno-sse4.1' 13746`-msse4.2' 13747`-mno-sse4.2' 13748`-msse4' 13749`-mno-sse4' 13750`-mavx' 13751`-mno-avx' 13752`-mavx2' 13753`-mno-avx2' 13754`-maes' 13755`-mno-aes' 13756`-mpclmul' 13757`-mno-pclmul' 13758`-mfsgsbase' 13759`-mno-fsgsbase' 13760`-mrdrnd' 13761`-mno-rdrnd' 13762`-mf16c' 13763`-mno-f16c' 13764`-mfma' 13765`-mno-fma' 13766`-msse4a' 13767`-mno-sse4a' 13768`-mfma4' 13769`-mno-fma4' 13770`-mxop' 13771`-mno-xop' 13772`-mlwp' 13773`-mno-lwp' 13774`-m3dnow' 13775`-mno-3dnow' 13776`-mpopcnt' 13777`-mno-popcnt' 13778`-mabm' 13779`-mno-abm' 13780`-mbmi' 13781`-mbmi2' 13782`-mno-bmi' 13783`-mno-bmi2' 13784`-mlzcnt' 13785`-mno-lzcnt' 13786`-mrtm' 13787`-mtbm' 13788`-mno-tbm' 13789 These switches enable or disable the use of instructions in the 13790 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, 13791 FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, 13792 LZCNT, RTM or 3DNow! extended instruction sets. These extensions 13793 are also available as built-in functions: see *note X86 Built-in 13794 Functions::, for details of the functions enabled and disabled by 13795 these switches. 13796 13797 To generate SSE/SSE2 instructions automatically from floating-point 13798 code (as opposed to 387 instructions), see `-mfpmath=sse'. 13799 13800 GCC depresses SSEx instructions when `-mavx' is used. Instead, it 13801 generates new AVX instructions or AVX equivalence for all SSEx 13802 instructions when needed. 13803 13804 These options enable GCC to use these extended instructions in 13805 generated code, even without `-mfpmath=sse'. Applications that 13806 perform run-time CPU detection must compile separate files for each 13807 supported architecture, using the appropriate flags. In 13808 particular, the file containing the CPU detection code should be 13809 compiled without these options. 13810 13811`-mcld' 13812 This option instructs GCC to emit a `cld' instruction in the 13813 prologue of functions that use string instructions. String 13814 instructions depend on the DF flag to select between autoincrement 13815 or autodecrement mode. While the ABI specifies the DF flag to be 13816 cleared on function entry, some operating systems violate this 13817 specification by not clearing the DF flag in their exception 13818 dispatchers. The exception handler can be invoked with the DF flag 13819 set, which leads to wrong direction mode when string instructions 13820 are used. This option can be enabled by default on 32-bit x86 13821 targets by configuring GCC with the `--enable-cld' configure 13822 option. Generation of `cld' instructions can be suppressed with 13823 the `-mno-cld' compiler option in this case. 13824 13825`-mvzeroupper' 13826 This option instructs GCC to emit a `vzeroupper' instruction 13827 before a transfer of control flow out of the function to minimize 13828 the AVX to SSE transition penalty as well as remove unnecessary 13829 `zeroupper' intrinsics. 13830 13831`-mprefer-avx128' 13832 This option instructs GCC to use 128-bit AVX instructions instead 13833 of 256-bit AVX instructions in the auto-vectorizer. 13834 13835`-mcx16' 13836 This option enables GCC to generate `CMPXCHG16B' instructions. 13837 `CMPXCHG16B' allows for atomic operations on 128-bit double 13838 quadword (or oword) data types. This is useful for 13839 high-resolution counters that can be updated by multiple 13840 processors (or cores). This instruction is generated as part of 13841 atomic built-in functions: see *note __sync Builtins:: or *note 13842 __atomic Builtins:: for details. 13843 13844`-msahf' 13845 This option enables generation of `SAHF' instructions in 64-bit 13846 code. Early Intel Pentium 4 CPUs with Intel 64 support, prior to 13847 the introduction of Pentium 4 G1 step in December 2005, lacked the 13848 `LAHF' and `SAHF' instructions which were supported by AMD64. 13849 These are load and store instructions, respectively, for certain 13850 status flags. In 64-bit mode, the `SAHF' instruction is used to 13851 optimize `fmod', `drem', and `remainder' built-in functions; see 13852 *note Other Builtins:: for details. 13853 13854`-mmovbe' 13855 This option enables use of the `movbe' instruction to implement 13856 `__builtin_bswap32' and `__builtin_bswap64'. 13857 13858`-mcrc32' 13859 This option enables built-in functions `__builtin_ia32_crc32qi', 13860 `__builtin_ia32_crc32hi', `__builtin_ia32_crc32si' and 13861 `__builtin_ia32_crc32di' to generate the `crc32' machine 13862 instruction. 13863 13864`-mrecip' 13865 This option enables use of `RCPSS' and `RSQRTSS' instructions (and 13866 their vectorized variants `RCPPS' and `RSQRTPS') with an 13867 additional Newton-Raphson step to increase precision instead of 13868 `DIVSS' and `SQRTSS' (and their vectorized variants) for 13869 single-precision floating-point arguments. These instructions are 13870 generated only when `-funsafe-math-optimizations' is enabled 13871 together with `-finite-math-only' and `-fno-trapping-math'. Note 13872 that while the throughput of the sequence is higher than the 13873 throughput of the non-reciprocal instruction, the precision of the 13874 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 13875 equals 0.99999994). 13876 13877 Note that GCC implements `1.0f/sqrtf(X)' in terms of `RSQRTSS' (or 13878 `RSQRTPS') already with `-ffast-math' (or the above option 13879 combination), and doesn't need `-mrecip'. 13880 13881 Also note that GCC emits the above sequence with additional 13882 Newton-Raphson step for vectorized single-float division and 13883 vectorized `sqrtf(X)' already with `-ffast-math' (or the above 13884 option combination), and doesn't need `-mrecip'. 13885 13886`-mrecip=OPT' 13887 This option controls which reciprocal estimate instructions may be 13888 used. OPT is a comma-separated list of options, which may be 13889 preceded by a `!' to invert the option: 13890 13891 `all' 13892 Enable all estimate instructions. 13893 13894 `default' 13895 Enable the default instructions, equivalent to `-mrecip'. 13896 13897 `none' 13898 Disable all estimate instructions, equivalent to `-mno-recip'. 13899 13900 `div' 13901 Enable the approximation for scalar division. 13902 13903 `vec-div' 13904 Enable the approximation for vectorized division. 13905 13906 `sqrt' 13907 Enable the approximation for scalar square root. 13908 13909 `vec-sqrt' 13910 Enable the approximation for vectorized square root. 13911 13912 So, for example, `-mrecip=all,!sqrt' enables all of the reciprocal 13913 approximations, except for square root. 13914 13915`-mveclibabi=TYPE' 13916 Specifies the ABI type to use for vectorizing intrinsics using an 13917 external library. Supported values for TYPE are `svml' for the 13918 Intel short vector math library and `acml' for the AMD math core 13919 library. To use this option, both `-ftree-vectorize' and 13920 `-funsafe-math-optimizations' have to be enabled, and an SVML or 13921 ACML ABI-compatible library must be specified at link time. 13922 13923 GCC currently emits calls to `vmldExp2', `vmldLn2', `vmldLog102', 13924 `vmldLog102', `vmldPow2', `vmldTanh2', `vmldTan2', `vmldAtan2', 13925 `vmldAtanh2', `vmldCbrt2', `vmldSinh2', `vmldSin2', `vmldAsinh2', 13926 `vmldAsin2', `vmldCosh2', `vmldCos2', `vmldAcosh2', `vmldAcos2', 13927 `vmlsExp4', `vmlsLn4', `vmlsLog104', `vmlsLog104', `vmlsPow4', 13928 `vmlsTanh4', `vmlsTan4', `vmlsAtan4', `vmlsAtanh4', `vmlsCbrt4', 13929 `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', `vmlsAsin4', `vmlsCosh4', 13930 `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' for corresponding 13931 function type when `-mveclibabi=svml' is used, and `__vrd2_sin', 13932 `__vrd2_cos', `__vrd2_exp', `__vrd2_log', `__vrd2_log2', 13933 `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', `__vrs4_expf', 13934 `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and `__vrs4_powf' 13935 for the corresponding function type when `-mveclibabi=acml' is 13936 used. 13937 13938`-mabi=NAME' 13939 Generate code for the specified calling convention. Permissible 13940 values are `sysv' for the ABI used on GNU/Linux and other systems, 13941 and `ms' for the Microsoft ABI. The default is to use the 13942 Microsoft ABI when targeting Microsoft Windows and the SysV ABI on 13943 all other systems. You can control this behavior for a specific 13944 function by using the function attribute `ms_abi'/`sysv_abi'. 13945 *Note Function Attributes::. 13946 13947`-mtls-dialect=TYPE' 13948 Generate code to access thread-local storage using the `gnu' or 13949 `gnu2' conventions. `gnu' is the conservative default; `gnu2' is 13950 more efficient, but it may add compile- and run-time requirements 13951 that cannot be satisfied on all systems. 13952 13953`-mpush-args' 13954`-mno-push-args' 13955 Use PUSH operations to store outgoing parameters. This method is 13956 shorter and usually equally fast as method using SUB/MOV 13957 operations and is enabled by default. In some cases disabling it 13958 may improve performance because of improved scheduling and reduced 13959 dependencies. 13960 13961`-maccumulate-outgoing-args' 13962 If enabled, the maximum amount of space required for outgoing 13963 arguments is computed in the function prologue. This is faster on 13964 most modern CPUs because of reduced dependencies, improved 13965 scheduling and reduced stack usage when the preferred stack 13966 boundary is not equal to 2. The drawback is a notable increase in 13967 code size. This switch implies `-mno-push-args'. 13968 13969`-mthreads' 13970 Support thread-safe exception handling on MinGW. Programs that 13971 rely on thread-safe exception handling must compile and link all 13972 code with the `-mthreads' option. When compiling, `-mthreads' 13973 defines `-D_MT'; when linking, it links in a special thread helper 13974 library `-lmingwthrd' which cleans up per-thread 13975 exception-handling data. 13976 13977`-mno-align-stringops' 13978 Do not align the destination of inlined string operations. This 13979 switch reduces code size and improves performance in case the 13980 destination is already aligned, but GCC doesn't know about it. 13981 13982`-minline-all-stringops' 13983 By default GCC inlines string operations only when the destination 13984 is known to be aligned to least a 4-byte boundary. This enables 13985 more inlining and increases code size, but may improve performance 13986 of code that depends on fast `memcpy', `strlen', and `memset' for 13987 short lengths. 13988 13989`-minline-stringops-dynamically' 13990 For string operations of unknown size, use run-time checks with 13991 inline code for small blocks and a library call for large blocks. 13992 13993`-mstringop-strategy=ALG' 13994 Override the internal decision heuristic for the particular 13995 algorithm to use for inlining string operations. The allowed 13996 values for ALG are: 13997 13998 `rep_byte' 13999 `rep_4byte' 14000 `rep_8byte' 14001 Expand using i386 `rep' prefix of the specified size. 14002 14003 `byte_loop' 14004 `loop' 14005 `unrolled_loop' 14006 Expand into an inline loop. 14007 14008 `libcall' 14009 Always use a library call. 14010 14011`-momit-leaf-frame-pointer' 14012 Don't keep the frame pointer in a register for leaf functions. 14013 This avoids the instructions to save, set up, and restore frame 14014 pointers and makes an extra register available in leaf functions. 14015 The option `-fomit-leaf-frame-pointer' removes the frame pointer 14016 for leaf functions, which might make debugging harder. 14017 14018`-mtls-direct-seg-refs' 14019`-mno-tls-direct-seg-refs' 14020 Controls whether TLS variables may be accessed with offsets from 14021 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 14022 whether the thread base pointer must be added. Whether or not this 14023 is valid depends on the operating system, and whether it maps the 14024 segment to cover the entire TLS area. 14025 14026 For systems that use the GNU C Library, the default is on. 14027 14028`-msse2avx' 14029`-mno-sse2avx' 14030 Specify that the assembler should encode SSE instructions with VEX 14031 prefix. The option `-mavx' turns this on by default. 14032 14033`-mfentry' 14034`-mno-fentry' 14035 If profiling is active (`-pg'), put the profiling counter call 14036 before the prologue. Note: On x86 architectures the attribute 14037 `ms_hook_prologue' isn't possible at the moment for `-mfentry' and 14038 `-pg'. 14039 14040`-m8bit-idiv' 14041`-mno-8bit-idiv' 14042 On some processors, like Intel Atom, 8-bit unsigned integer divide 14043 is much faster than 32-bit/64-bit integer divide. This option 14044 generates a run-time check. If both dividend and divisor are 14045 within range of 0 to 255, 8-bit unsigned integer divide is used 14046 instead of 32-bit/64-bit integer divide. 14047 14048`-mavx256-split-unaligned-load' 14049`-mavx256-split-unaligned-store' 14050 Split 32-byte AVX unaligned load and store. 14051 14052 14053 These `-m' switches are supported in addition to the above on x86-64 14054processors in 64-bit environments. 14055 14056`-m32' 14057`-m64' 14058`-mx32' 14059 Generate code for a 32-bit or 64-bit environment. The `-m32' 14060 option sets `int', `long', and pointer types to 32 bits, and 14061 generates code that runs on any i386 system. 14062 14063 The `-m64' option sets `int' to 32 bits and `long' and pointer 14064 types to 64 bits, and generates code for the x86-64 architecture. 14065 For Darwin only the `-m64' option also turns off the `-fno-pic' 14066 and `-mdynamic-no-pic' options. 14067 14068 The `-mx32' option sets `int', `long', and pointer types to 32 14069 bits, and generates code for the x86-64 architecture. 14070 14071`-mno-red-zone' 14072 Do not use a so-called "red zone" for x86-64 code. The red zone 14073 is mandated by the x86-64 ABI; it is a 128-byte area beyond the 14074 location of the stack pointer that is not modified by signal or 14075 interrupt handlers and therefore can be used for temporary data 14076 without adjusting the stack pointer. The flag `-mno-red-zone' 14077 disables this red zone. 14078 14079`-mcmodel=small' 14080 Generate code for the small code model: the program and its 14081 symbols must be linked in the lower 2 GB of the address space. 14082 Pointers are 64 bits. Programs can be statically or dynamically 14083 linked. This is the default code model. 14084 14085`-mcmodel=kernel' 14086 Generate code for the kernel code model. The kernel runs in the 14087 negative 2 GB of the address space. This model has to be used for 14088 Linux kernel code. 14089 14090`-mcmodel=medium' 14091 Generate code for the medium model: the program is linked in the 14092 lower 2 GB of the address space. Small symbols are also placed 14093 there. Symbols with sizes larger than `-mlarge-data-threshold' 14094 are put into large data or BSS sections and can be located above 14095 2GB. Programs can be statically or dynamically linked. 14096 14097`-mcmodel=large' 14098 Generate code for the large model. This model makes no assumptions 14099 about addresses and sizes of sections. 14100 14101`-maddress-mode=long' 14102 Generate code for long address mode. This is only supported for 14103 64-bit and x32 environments. It is the default address mode for 14104 64-bit environments. 14105 14106`-maddress-mode=short' 14107 Generate code for short address mode. This is only supported for 14108 32-bit and x32 environments. It is the default address mode for 14109 32-bit and x32 environments. 14110 14111 14112File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options 14113 141143.17.17 i386 and x86-64 Windows Options 14115--------------------------------------- 14116 14117These additional options are available for Microsoft Windows targets: 14118 14119`-mconsole' 14120 This option specifies that a console application is to be 14121 generated, by instructing the linker to set the PE header 14122 subsystem type required for console applications. This option is 14123 available for Cygwin and MinGW targets and is enabled by default 14124 on those targets. 14125 14126`-mdll' 14127 This option is available for Cygwin and MinGW targets. It 14128 specifies that a DLL--a dynamic link library--is to be generated, 14129 enabling the selection of the required runtime startup object and 14130 entry point. 14131 14132`-mnop-fun-dllimport' 14133 This option is available for Cygwin and MinGW targets. It 14134 specifies that the `dllimport' attribute should be ignored. 14135 14136`-mthread' 14137 This option is available for MinGW targets. It specifies that 14138 MinGW-specific thread support is to be used. 14139 14140`-municode' 14141 This option is available for MinGW-w64 targets. It causes the 14142 `UNICODE' preprocessor macro to be predefined, and chooses 14143 Unicode-capable runtime startup code. 14144 14145`-mwin32' 14146 This option is available for Cygwin and MinGW targets. It 14147 specifies that the typical Microsoft Windows predefined macros are 14148 to be set in the pre-processor, but does not influence the choice 14149 of runtime library/startup code. 14150 14151`-mwindows' 14152 This option is available for Cygwin and MinGW targets. It 14153 specifies that a GUI application is to be generated by instructing 14154 the linker to set the PE header subsystem type appropriately. 14155 14156`-fno-set-stack-executable' 14157 This option is available for MinGW targets. It specifies that the 14158 executable flag for the stack used by nested functions isn't set. 14159 This is necessary for binaries running in kernel mode of Microsoft 14160 Windows, as there the User32 API, which is used to set executable 14161 privileges, isn't available. 14162 14163`-fwritable-relocated-rdata' 14164 This option is available for MinGW and Cygwin targets. It 14165 specifies that relocated-data in read-only section is put into 14166 .data section. This is a necessary for older runtimes not 14167 supporting modification of .rdata sections for pseudo-relocation. 14168 14169`-mpe-aligned-commons' 14170 This option is available for Cygwin and MinGW targets. It 14171 specifies that the GNU extension to the PE file format that 14172 permits the correct alignment of COMMON variables should be used 14173 when generating code. It is enabled by default if GCC detects 14174 that the target assembler found during configuration supports the 14175 feature. 14176 14177 See also under *note i386 and x86-64 Options:: for standard options. 14178 14179 14180File: gcc.info, Node: IA-64 Options, Next: LM32 Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options 14181 141823.17.18 IA-64 Options 14183--------------------- 14184 14185These are the `-m' options defined for the Intel IA-64 architecture. 14186 14187`-mbig-endian' 14188 Generate code for a big-endian target. This is the default for 14189 HP-UX. 14190 14191`-mlittle-endian' 14192 Generate code for a little-endian target. This is the default for 14193 AIX5 and GNU/Linux. 14194 14195`-mgnu-as' 14196`-mno-gnu-as' 14197 Generate (or don't) code for the GNU assembler. This is the 14198 default. 14199 14200`-mgnu-ld' 14201`-mno-gnu-ld' 14202 Generate (or don't) code for the GNU linker. This is the default. 14203 14204`-mno-pic' 14205 Generate code that does not use a global pointer register. The 14206 result is not position independent code, and violates the IA-64 14207 ABI. 14208 14209`-mvolatile-asm-stop' 14210`-mno-volatile-asm-stop' 14211 Generate (or don't) a stop bit immediately before and after 14212 volatile asm statements. 14213 14214`-mregister-names' 14215`-mno-register-names' 14216 Generate (or don't) `in', `loc', and `out' register names for the 14217 stacked registers. This may make assembler output more readable. 14218 14219`-mno-sdata' 14220`-msdata' 14221 Disable (or enable) optimizations that use the small data section. 14222 This may be useful for working around optimizer bugs. 14223 14224`-mconstant-gp' 14225 Generate code that uses a single constant global pointer value. 14226 This is useful when compiling kernel code. 14227 14228`-mauto-pic' 14229 Generate code that is self-relocatable. This implies 14230 `-mconstant-gp'. This is useful when compiling firmware code. 14231 14232`-minline-float-divide-min-latency' 14233 Generate code for inline divides of floating-point values using 14234 the minimum latency algorithm. 14235 14236`-minline-float-divide-max-throughput' 14237 Generate code for inline divides of floating-point values using 14238 the maximum throughput algorithm. 14239 14240`-mno-inline-float-divide' 14241 Do not generate inline code for divides of floating-point values. 14242 14243`-minline-int-divide-min-latency' 14244 Generate code for inline divides of integer values using the 14245 minimum latency algorithm. 14246 14247`-minline-int-divide-max-throughput' 14248 Generate code for inline divides of integer values using the 14249 maximum throughput algorithm. 14250 14251`-mno-inline-int-divide' 14252 Do not generate inline code for divides of integer values. 14253 14254`-minline-sqrt-min-latency' 14255 Generate code for inline square roots using the minimum latency 14256 algorithm. 14257 14258`-minline-sqrt-max-throughput' 14259 Generate code for inline square roots using the maximum throughput 14260 algorithm. 14261 14262`-mno-inline-sqrt' 14263 Do not generate inline code for `sqrt'. 14264 14265`-mfused-madd' 14266`-mno-fused-madd' 14267 Do (don't) generate code that uses the fused multiply/add or 14268 multiply/subtract instructions. The default is to use these 14269 instructions. 14270 14271`-mno-dwarf2-asm' 14272`-mdwarf2-asm' 14273 Don't (or do) generate assembler code for the DWARF 2 line number 14274 debugging info. This may be useful when not using the GNU 14275 assembler. 14276 14277`-mearly-stop-bits' 14278`-mno-early-stop-bits' 14279 Allow stop bits to be placed earlier than immediately preceding the 14280 instruction that triggered the stop bit. This can improve 14281 instruction scheduling, but does not always do so. 14282 14283`-mfixed-range=REGISTER-RANGE' 14284 Generate code treating the given register range as fixed registers. 14285 A fixed register is one that the register allocator cannot use. 14286 This is useful when compiling kernel code. A register range is 14287 specified as two registers separated by a dash. Multiple register 14288 ranges can be specified separated by a comma. 14289 14290`-mtls-size=TLS-SIZE' 14291 Specify bit size of immediate TLS offsets. Valid values are 14, 14292 22, and 64. 14293 14294`-mtune=CPU-TYPE' 14295 Tune the instruction scheduling for a particular CPU, Valid values 14296 are `itanium', `itanium1', `merced', `itanium2', and `mckinley'. 14297 14298`-milp32' 14299`-mlp64' 14300 Generate code for a 32-bit or 64-bit environment. The 32-bit 14301 environment sets int, long and pointer to 32 bits. The 64-bit 14302 environment sets int to 32 bits and long and pointer to 64 bits. 14303 These are HP-UX specific flags. 14304 14305`-mno-sched-br-data-spec' 14306`-msched-br-data-spec' 14307 (Dis/En)able data speculative scheduling before reload. This 14308 results in generation of `ld.a' instructions and the corresponding 14309 check instructions (`ld.c' / `chk.a'). The default is 'disable'. 14310 14311`-msched-ar-data-spec' 14312`-mno-sched-ar-data-spec' 14313 (En/Dis)able data speculative scheduling after reload. This 14314 results in generation of `ld.a' instructions and the corresponding 14315 check instructions (`ld.c' / `chk.a'). The default is 'enable'. 14316 14317`-mno-sched-control-spec' 14318`-msched-control-spec' 14319 (Dis/En)able control speculative scheduling. This feature is 14320 available only during region scheduling (i.e. before reload). 14321 This results in generation of the `ld.s' instructions and the 14322 corresponding check instructions `chk.s'. The default is 14323 'disable'. 14324 14325`-msched-br-in-data-spec' 14326`-mno-sched-br-in-data-spec' 14327 (En/Dis)able speculative scheduling of the instructions that are 14328 dependent on the data speculative loads before reload. This is 14329 effective only with `-msched-br-data-spec' enabled. The default 14330 is 'enable'. 14331 14332`-msched-ar-in-data-spec' 14333`-mno-sched-ar-in-data-spec' 14334 (En/Dis)able speculative scheduling of the instructions that are 14335 dependent on the data speculative loads after reload. This is 14336 effective only with `-msched-ar-data-spec' enabled. The default 14337 is 'enable'. 14338 14339`-msched-in-control-spec' 14340`-mno-sched-in-control-spec' 14341 (En/Dis)able speculative scheduling of the instructions that are 14342 dependent on the control speculative loads. This is effective 14343 only with `-msched-control-spec' enabled. The default is 'enable'. 14344 14345`-mno-sched-prefer-non-data-spec-insns' 14346`-msched-prefer-non-data-spec-insns' 14347 If enabled, data-speculative instructions are chosen for schedule 14348 only if there are no other choices at the moment. This makes the 14349 use of the data speculation much more conservative. The default 14350 is 'disable'. 14351 14352`-mno-sched-prefer-non-control-spec-insns' 14353`-msched-prefer-non-control-spec-insns' 14354 If enabled, control-speculative instructions are chosen for 14355 schedule only if there are no other choices at the moment. This 14356 makes the use of the control speculation much more conservative. 14357 The default is 'disable'. 14358 14359`-mno-sched-count-spec-in-critical-path' 14360`-msched-count-spec-in-critical-path' 14361 If enabled, speculative dependencies are considered during 14362 computation of the instructions priorities. This makes the use of 14363 the speculation a bit more conservative. The default is 'disable'. 14364 14365`-msched-spec-ldc' 14366 Use a simple data speculation check. This option is on by default. 14367 14368`-msched-control-spec-ldc' 14369 Use a simple check for control speculation. This option is on by 14370 default. 14371 14372`-msched-stop-bits-after-every-cycle' 14373 Place a stop bit after every cycle when scheduling. This option 14374 is on by default. 14375 14376`-msched-fp-mem-deps-zero-cost' 14377 Assume that floating-point stores and loads are not likely to 14378 cause a conflict when placed into the same instruction group. 14379 This option is disabled by default. 14380 14381`-msel-sched-dont-check-control-spec' 14382 Generate checks for control speculation in selective scheduling. 14383 This flag is disabled by default. 14384 14385`-msched-max-memory-insns=MAX-INSNS' 14386 Limit on the number of memory insns per instruction group, giving 14387 lower priority to subsequent memory insns attempting to schedule 14388 in the same instruction group. Frequently useful to prevent cache 14389 bank conflicts. The default value is 1. 14390 14391`-msched-max-memory-insns-hard-limit' 14392 Makes the limit specified by `msched-max-memory-insns' a hard 14393 limit, disallowing more than that number in an instruction group. 14394 Otherwise, the limit is "soft", meaning that non-memory operations 14395 are preferred when the limit is reached, but memory operations may 14396 still be scheduled. 14397 14398 14399 14400File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64 Options, Up: Submodel Options 14401 144023.17.19 LM32 Options 14403-------------------- 14404 14405These `-m' options are defined for the LatticeMico32 architecture: 14406 14407`-mbarrel-shift-enabled' 14408 Enable barrel-shift instructions. 14409 14410`-mdivide-enabled' 14411 Enable divide and modulus instructions. 14412 14413`-mmultiply-enabled' 14414 Enable multiply instructions. 14415 14416`-msign-extend-enabled' 14417 Enable sign extend instructions. 14418 14419`-muser-enabled' 14420 Enable user-defined instructions. 14421 14422 14423 14424File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options 14425 144263.17.20 M32C Options 14427-------------------- 14428 14429`-mcpu=NAME' 14430 Select the CPU for which code is generated. NAME may be one of 14431 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 14432 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 14433 series. 14434 14435`-msim' 14436 Specifies that the program will be run on the simulator. This 14437 causes an alternate runtime library to be linked in which 14438 supports, for example, file I/O. You must not use this option 14439 when generating programs that will run on real hardware; you must 14440 provide your own runtime library for whatever I/O functions are 14441 needed. 14442 14443`-memregs=NUMBER' 14444 Specifies the number of memory-based pseudo-registers GCC uses 14445 during code generation. These pseudo-registers are used like real 14446 registers, so there is a tradeoff between GCC's ability to fit the 14447 code into available registers, and the performance penalty of using 14448 memory instead of registers. Note that all modules in a program 14449 must be compiled with the same value for this option. Because of 14450 that, you must not use this option with GCC's default runtime 14451 libraries. 14452 14453 14454 14455File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 14456 144573.17.21 M32R/D Options 14458---------------------- 14459 14460These `-m' options are defined for Renesas M32R/D architectures: 14461 14462`-m32r2' 14463 Generate code for the M32R/2. 14464 14465`-m32rx' 14466 Generate code for the M32R/X. 14467 14468`-m32r' 14469 Generate code for the M32R. This is the default. 14470 14471`-mmodel=small' 14472 Assume all objects live in the lower 16MB of memory (so that their 14473 addresses can be loaded with the `ld24' instruction), and assume 14474 all subroutines are reachable with the `bl' instruction. This is 14475 the default. 14476 14477 The addressability of a particular object can be set with the 14478 `model' attribute. 14479 14480`-mmodel=medium' 14481 Assume objects may be anywhere in the 32-bit address space (the 14482 compiler generates `seth/add3' instructions to load their 14483 addresses), and assume all subroutines are reachable with the `bl' 14484 instruction. 14485 14486`-mmodel=large' 14487 Assume objects may be anywhere in the 32-bit address space (the 14488 compiler generates `seth/add3' instructions to load their 14489 addresses), and assume subroutines may not be reachable with the 14490 `bl' instruction (the compiler generates the much slower 14491 `seth/add3/jl' instruction sequence). 14492 14493`-msdata=none' 14494 Disable use of the small data area. Variables are put into one of 14495 `.data', `.bss', or `.rodata' (unless the `section' attribute has 14496 been specified). This is the default. 14497 14498 The small data area consists of sections `.sdata' and `.sbss'. 14499 Objects may be explicitly put in the small data area with the 14500 `section' attribute using one of these sections. 14501 14502`-msdata=sdata' 14503 Put small global and static data in the small data area, but do not 14504 generate special code to reference them. 14505 14506`-msdata=use' 14507 Put small global and static data in the small data area, and 14508 generate special instructions to reference them. 14509 14510`-G NUM' 14511 Put global and static objects less than or equal to NUM bytes into 14512 the small data or BSS sections instead of the normal data or BSS 14513 sections. The default value of NUM is 8. The `-msdata' option 14514 must be set to one of `sdata' or `use' for this option to have any 14515 effect. 14516 14517 All modules should be compiled with the same `-G NUM' value. 14518 Compiling with different values of NUM may or may not work; if it 14519 doesn't the linker gives an error message--incorrect code is not 14520 generated. 14521 14522`-mdebug' 14523 Makes the M32R-specific code in the compiler display some 14524 statistics that might help in debugging programs. 14525 14526`-malign-loops' 14527 Align all loops to a 32-byte boundary. 14528 14529`-mno-align-loops' 14530 Do not enforce a 32-byte alignment for loops. This is the default. 14531 14532`-missue-rate=NUMBER' 14533 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 14534 14535`-mbranch-cost=NUMBER' 14536 NUMBER can only be 1 or 2. If it is 1 then branches are preferred 14537 over conditional code, if it is 2, then the opposite applies. 14538 14539`-mflush-trap=NUMBER' 14540 Specifies the trap number to use to flush the cache. The default 14541 is 12. Valid numbers are between 0 and 15 inclusive. 14542 14543`-mno-flush-trap' 14544 Specifies that the cache cannot be flushed by using a trap. 14545 14546`-mflush-func=NAME' 14547 Specifies the name of the operating system function to call to 14548 flush the cache. The default is __flush_cache_, but a function 14549 call is only used if a trap is not available. 14550 14551`-mno-flush-func' 14552 Indicates that there is no OS function for flushing the cache. 14553 14554 14555 14556File: gcc.info, Node: M680x0 Options, Next: MCore Options, Prev: M32R/D Options, Up: Submodel Options 14557 145583.17.22 M680x0 Options 14559---------------------- 14560 14561These are the `-m' options defined for M680x0 and ColdFire processors. 14562The default settings depend on which architecture was selected when the 14563compiler was configured; the defaults for the most common choices are 14564given below. 14565 14566`-march=ARCH' 14567 Generate code for a specific M680x0 or ColdFire instruction set 14568 architecture. Permissible values of ARCH for M680x0 architectures 14569 are: `68000', `68010', `68020', `68030', `68040', `68060' and 14570 `cpu32'. ColdFire architectures are selected according to 14571 Freescale's ISA classification and the permissible values are: 14572 `isaa', `isaaplus', `isab' and `isac'. 14573 14574 GCC defines a macro `__mcfARCH__' whenever it is generating code 14575 for a ColdFire target. The ARCH in this macro is one of the 14576 `-march' arguments given above. 14577 14578 When used together, `-march' and `-mtune' select code that runs on 14579 a family of similar processors but that is optimized for a 14580 particular microarchitecture. 14581 14582`-mcpu=CPU' 14583 Generate code for a specific M680x0 or ColdFire processor. The 14584 M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040', 14585 `68060', `68302', `68332' and `cpu32'. The ColdFire CPUs are 14586 given by the table below, which also classifies the CPUs into 14587 families: 14588 14589 *Family* *`-mcpu' arguments* 14590 `51' `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg' 14591 `51jm' `51mm' `51qe' `51qm' 14592 `5206' `5202' `5204' `5206' 14593 `5206e' `5206e' 14594 `5208' `5207' `5208' 14595 `5211a' `5210a' `5211a' 14596 `5213' `5211' `5212' `5213' 14597 `5216' `5214' `5216' 14598 `52235' `52230' `52231' `52232' `52233' `52234' `52235' 14599 `5225' `5224' `5225' 14600 `52259' `52252' `52254' `52255' `52256' `52258' `52259' 14601 `5235' `5232' `5233' `5234' `5235' `523x' 14602 `5249' `5249' 14603 `5250' `5250' 14604 `5271' `5270' `5271' 14605 `5272' `5272' 14606 `5275' `5274' `5275' 14607 `5282' `5280' `5281' `5282' `528x' 14608 `53017' `53011' `53012' `53013' `53014' `53015' `53016' 14609 `53017' 14610 `5307' `5307' 14611 `5329' `5327' `5328' `5329' `532x' 14612 `5373' `5372' `5373' `537x' 14613 `5407' `5407' 14614 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x' 14615 `5480' `5481' `5482' `5483' `5484' `5485' 14616 14617 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with 14618 CPU. Other combinations of `-mcpu' and `-march' are rejected. 14619 14620 GCC defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is 14621 selected. It also defines `__mcf_family_FAMILY', where the value 14622 of FAMILY is given by the table above. 14623 14624`-mtune=TUNE' 14625 Tune the code for a particular microarchitecture within the 14626 constraints set by `-march' and `-mcpu'. The M680x0 14627 microarchitectures are: `68000', `68010', `68020', `68030', 14628 `68040', `68060' and `cpu32'. The ColdFire microarchitectures 14629 are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'. 14630 14631 You can also use `-mtune=68020-40' for code that needs to run 14632 relatively well on 68020, 68030 and 68040 targets. 14633 `-mtune=68020-60' is similar but includes 68060 targets as well. 14634 These two options select the same tuning decisions as `-m68020-40' 14635 and `-m68020-60' respectively. 14636 14637 GCC defines the macros `__mcARCH' and `__mcARCH__' when tuning for 14638 680x0 architecture ARCH. It also defines `mcARCH' unless either 14639 `-ansi' or a non-GNU `-std' option is used. If GCC is tuning for 14640 a range of architectures, as selected by `-mtune=68020-40' or 14641 `-mtune=68020-60', it defines the macros for every architecture in 14642 the range. 14643 14644 GCC also defines the macro `__mUARCH__' when tuning for ColdFire 14645 microarchitecture UARCH, where UARCH is one of the arguments given 14646 above. 14647 14648`-m68000' 14649`-mc68000' 14650 Generate output for a 68000. This is the default when the 14651 compiler is configured for 68000-based systems. It is equivalent 14652 to `-march=68000'. 14653 14654 Use this option for microcontrollers with a 68000 or EC000 core, 14655 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 14656 14657`-m68010' 14658 Generate output for a 68010. This is the default when the 14659 compiler is configured for 68010-based systems. It is equivalent 14660 to `-march=68010'. 14661 14662`-m68020' 14663`-mc68020' 14664 Generate output for a 68020. This is the default when the 14665 compiler is configured for 68020-based systems. It is equivalent 14666 to `-march=68020'. 14667 14668`-m68030' 14669 Generate output for a 68030. This is the default when the 14670 compiler is configured for 68030-based systems. It is equivalent 14671 to `-march=68030'. 14672 14673`-m68040' 14674 Generate output for a 68040. This is the default when the 14675 compiler is configured for 68040-based systems. It is equivalent 14676 to `-march=68040'. 14677 14678 This option inhibits the use of 68881/68882 instructions that have 14679 to be emulated by software on the 68040. Use this option if your 14680 68040 does not have code to emulate those instructions. 14681 14682`-m68060' 14683 Generate output for a 68060. This is the default when the 14684 compiler is configured for 68060-based systems. It is equivalent 14685 to `-march=68060'. 14686 14687 This option inhibits the use of 68020 and 68881/68882 instructions 14688 that have to be emulated by software on the 68060. Use this 14689 option if your 68060 does not have code to emulate those 14690 instructions. 14691 14692`-mcpu32' 14693 Generate output for a CPU32. This is the default when the 14694 compiler is configured for CPU32-based systems. It is equivalent 14695 to `-march=cpu32'. 14696 14697 Use this option for microcontrollers with a CPU32 or CPU32+ core, 14698 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 14699 68341, 68349 and 68360. 14700 14701`-m5200' 14702 Generate output for a 520X ColdFire CPU. This is the default when 14703 the compiler is configured for 520X-based systems. It is 14704 equivalent to `-mcpu=5206', and is now deprecated in favor of that 14705 option. 14706 14707 Use this option for microcontroller with a 5200 core, including 14708 the MCF5202, MCF5203, MCF5204 and MCF5206. 14709 14710`-m5206e' 14711 Generate output for a 5206e ColdFire CPU. The option is now 14712 deprecated in favor of the equivalent `-mcpu=5206e'. 14713 14714`-m528x' 14715 Generate output for a member of the ColdFire 528X family. The 14716 option is now deprecated in favor of the equivalent `-mcpu=528x'. 14717 14718`-m5307' 14719 Generate output for a ColdFire 5307 CPU. The option is now 14720 deprecated in favor of the equivalent `-mcpu=5307'. 14721 14722`-m5407' 14723 Generate output for a ColdFire 5407 CPU. The option is now 14724 deprecated in favor of the equivalent `-mcpu=5407'. 14725 14726`-mcfv4e' 14727 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 14728 This includes use of hardware floating-point instructions. The 14729 option is equivalent to `-mcpu=547x', and is now deprecated in 14730 favor of that option. 14731 14732`-m68020-40' 14733 Generate output for a 68040, without using any of the new 14734 instructions. This results in code that can run relatively 14735 efficiently on either a 68020/68881 or a 68030 or a 68040. The 14736 generated code does use the 68881 instructions that are emulated 14737 on the 68040. 14738 14739 The option is equivalent to `-march=68020' `-mtune=68020-40'. 14740 14741`-m68020-60' 14742 Generate output for a 68060, without using any of the new 14743 instructions. This results in code that can run relatively 14744 efficiently on either a 68020/68881 or a 68030 or a 68040. The 14745 generated code does use the 68881 instructions that are emulated 14746 on the 68060. 14747 14748 The option is equivalent to `-march=68020' `-mtune=68020-60'. 14749 14750`-mhard-float' 14751`-m68881' 14752 Generate floating-point instructions. This is the default for 14753 68020 and above, and for ColdFire devices that have an FPU. It 14754 defines the macro `__HAVE_68881__' on M680x0 targets and 14755 `__mcffpu__' on ColdFire targets. 14756 14757`-msoft-float' 14758 Do not generate floating-point instructions; use library calls 14759 instead. This is the default for 68000, 68010, and 68832 targets. 14760 It is also the default for ColdFire devices that have no FPU. 14761 14762`-mdiv' 14763`-mno-div' 14764 Generate (do not generate) ColdFire hardware divide and remainder 14765 instructions. If `-march' is used without `-mcpu', the default is 14766 "on" for ColdFire architectures and "off" for M680x0 14767 architectures. Otherwise, the default is taken from the target CPU 14768 (either the default CPU, or the one specified by `-mcpu'). For 14769 example, the default is "off" for `-mcpu=5206' and "on" for 14770 `-mcpu=5206e'. 14771 14772 GCC defines the macro `__mcfhwdiv__' when this option is enabled. 14773 14774`-mshort' 14775 Consider type `int' to be 16 bits wide, like `short int'. 14776 Additionally, parameters passed on the stack are also aligned to a 14777 16-bit boundary even on targets whose API mandates promotion to 14778 32-bit. 14779 14780`-mno-short' 14781 Do not consider type `int' to be 16 bits wide. This is the 14782 default. 14783 14784`-mnobitfield' 14785`-mno-bitfield' 14786 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 14787 and `-m5200' options imply `-mnobitfield'. 14788 14789`-mbitfield' 14790 Do use the bit-field instructions. The `-m68020' option implies 14791 `-mbitfield'. This is the default if you use a configuration 14792 designed for a 68020. 14793 14794`-mrtd' 14795 Use a different function-calling convention, in which functions 14796 that take a fixed number of arguments return with the `rtd' 14797 instruction, which pops their arguments while returning. This 14798 saves one instruction in the caller since there is no need to pop 14799 the arguments there. 14800 14801 This calling convention is incompatible with the one normally used 14802 on Unix, so you cannot use it if you need to call libraries 14803 compiled with the Unix compiler. 14804 14805 Also, you must provide function prototypes for all functions that 14806 take variable numbers of arguments (including `printf'); otherwise 14807 incorrect code is generated for calls to those functions. 14808 14809 In addition, seriously incorrect code results if you call a 14810 function with too many arguments. (Normally, extra arguments are 14811 harmlessly ignored.) 14812 14813 The `rtd' instruction is supported by the 68010, 68020, 68030, 14814 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 14815 14816`-mno-rtd' 14817 Do not use the calling conventions selected by `-mrtd'. This is 14818 the default. 14819 14820`-malign-int' 14821`-mno-align-int' 14822 Control whether GCC aligns `int', `long', `long long', `float', 14823 `double', and `long double' variables on a 32-bit boundary 14824 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 14825 variables on 32-bit boundaries produces code that runs somewhat 14826 faster on processors with 32-bit busses at the expense of more 14827 memory. 14828 14829 *Warning:* if you use the `-malign-int' switch, GCC aligns 14830 structures containing the above types differently than most 14831 published application binary interface specifications for the m68k. 14832 14833`-mpcrel' 14834 Use the pc-relative addressing mode of the 68000 directly, instead 14835 of using a global offset table. At present, this option implies 14836 `-fpic', allowing at most a 16-bit offset for pc-relative 14837 addressing. `-fPIC' is not presently supported with `-mpcrel', 14838 though this could be supported for 68020 and higher processors. 14839 14840`-mno-strict-align' 14841`-mstrict-align' 14842 Do not (do) assume that unaligned memory references are handled by 14843 the system. 14844 14845`-msep-data' 14846 Generate code that allows the data segment to be located in a 14847 different area of memory from the text segment. This allows for 14848 execute-in-place in an environment without virtual memory 14849 management. This option implies `-fPIC'. 14850 14851`-mno-sep-data' 14852 Generate code that assumes that the data segment follows the text 14853 segment. This is the default. 14854 14855`-mid-shared-library' 14856 Generate code that supports shared libraries via the library ID 14857 method. This allows for execute-in-place and shared libraries in 14858 an environment without virtual memory management. This option 14859 implies `-fPIC'. 14860 14861`-mno-id-shared-library' 14862 Generate code that doesn't assume ID-based shared libraries are 14863 being used. This is the default. 14864 14865`-mshared-library-id=n' 14866 Specifies the identification number of the ID-based shared library 14867 being compiled. Specifying a value of 0 generates more compact 14868 code; specifying other values forces the allocation of that number 14869 to the current library, but is no more space- or time-efficient 14870 than omitting this option. 14871 14872`-mxgot' 14873`-mno-xgot' 14874 When generating position-independent code for ColdFire, generate 14875 code that works if the GOT has more than 8192 entries. This code 14876 is larger and slower than code generated without this option. On 14877 M680x0 processors, this option is not needed; `-fPIC' suffices. 14878 14879 GCC normally uses a single instruction to load values from the GOT. 14880 While this is relatively efficient, it only works if the GOT is 14881 smaller than about 64k. Anything larger causes the linker to 14882 report an error such as: 14883 14884 relocation truncated to fit: R_68K_GOT16O foobar 14885 14886 If this happens, you should recompile your code with `-mxgot'. It 14887 should then work with very large GOTs. However, code generated 14888 with `-mxgot' is less efficient, since it takes 4 instructions to 14889 fetch the value of a global symbol. 14890 14891 Note that some linkers, including newer versions of the GNU linker, 14892 can create multiple GOTs and sort GOT entries. If you have such a 14893 linker, you should only need to use `-mxgot' when compiling a 14894 single object file that accesses more than 8192 GOT entries. Very 14895 few do. 14896 14897 These options have no effect unless GCC is generating 14898 position-independent code. 14899 14900 14901 14902File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M680x0 Options, Up: Submodel Options 14903 149043.17.23 MCore Options 14905--------------------- 14906 14907These are the `-m' options defined for the Motorola M*Core processors. 14908 14909`-mhardlit' 14910`-mno-hardlit' 14911 Inline constants into the code stream if it can be done in two 14912 instructions or less. 14913 14914`-mdiv' 14915`-mno-div' 14916 Use the divide instruction. (Enabled by default). 14917 14918`-mrelax-immediate' 14919`-mno-relax-immediate' 14920 Allow arbitrary-sized immediates in bit operations. 14921 14922`-mwide-bitfields' 14923`-mno-wide-bitfields' 14924 Always treat bit-fields as `int'-sized. 14925 14926`-m4byte-functions' 14927`-mno-4byte-functions' 14928 Force all functions to be aligned to a 4-byte boundary. 14929 14930`-mcallgraph-data' 14931`-mno-callgraph-data' 14932 Emit callgraph information. 14933 14934`-mslow-bytes' 14935`-mno-slow-bytes' 14936 Prefer word access when reading byte quantities. 14937 14938`-mlittle-endian' 14939`-mbig-endian' 14940 Generate code for a little-endian target. 14941 14942`-m210' 14943`-m340' 14944 Generate code for the 210 processor. 14945 14946`-mno-lsim' 14947 Assume that runtime support has been provided and so omit the 14948 simulator library (`libsim.a)' from the linker command line. 14949 14950`-mstack-increment=SIZE' 14951 Set the maximum amount for a single stack increment operation. 14952 Large values can increase the speed of programs that contain 14953 functions that need a large amount of stack space, but they can 14954 also trigger a segmentation fault if the stack is extended too 14955 much. The default value is 0x1000. 14956 14957 14958 14959File: gcc.info, Node: MeP Options, Next: MicroBlaze Options, Prev: MCore Options, Up: Submodel Options 14960 149613.17.24 MeP Options 14962------------------- 14963 14964`-mabsdiff' 14965 Enables the `abs' instruction, which is the absolute difference 14966 between two registers. 14967 14968`-mall-opts' 14969 Enables all the optional instructions--average, multiply, divide, 14970 bit operations, leading zero, absolute difference, min/max, clip, 14971 and saturation. 14972 14973`-maverage' 14974 Enables the `ave' instruction, which computes the average of two 14975 registers. 14976 14977`-mbased=N' 14978 Variables of size N bytes or smaller are placed in the `.based' 14979 section by default. Based variables use the `$tp' register as a 14980 base register, and there is a 128-byte limit to the `.based' 14981 section. 14982 14983`-mbitops' 14984 Enables the bit operation instructions--bit test (`btstm'), set 14985 (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set 14986 (`tas'). 14987 14988`-mc=NAME' 14989 Selects which section constant data is placed in. NAME may be 14990 `tiny', `near', or `far'. 14991 14992`-mclip' 14993 Enables the `clip' instruction. Note that `-mclip' is not useful 14994 unless you also provide `-mminmax'. 14995 14996`-mconfig=NAME' 14997 Selects one of the built-in core configurations. Each MeP chip has 14998 one or more modules in it; each module has a core CPU and a 14999 variety of coprocessors, optional instructions, and peripherals. 15000 The `MeP-Integrator' tool, not part of GCC, provides these 15001 configurations through this option; using this option is the same 15002 as using all the corresponding command-line options. The default 15003 configuration is `default'. 15004 15005`-mcop' 15006 Enables the coprocessor instructions. By default, this is a 32-bit 15007 coprocessor. Note that the coprocessor is normally enabled via the 15008 `-mconfig=' option. 15009 15010`-mcop32' 15011 Enables the 32-bit coprocessor's instructions. 15012 15013`-mcop64' 15014 Enables the 64-bit coprocessor's instructions. 15015 15016`-mivc2' 15017 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. 15018 15019`-mdc' 15020 Causes constant variables to be placed in the `.near' section. 15021 15022`-mdiv' 15023 Enables the `div' and `divu' instructions. 15024 15025`-meb' 15026 Generate big-endian code. 15027 15028`-mel' 15029 Generate little-endian code. 15030 15031`-mio-volatile' 15032 Tells the compiler that any variable marked with the `io' 15033 attribute is to be considered volatile. 15034 15035`-ml' 15036 Causes variables to be assigned to the `.far' section by default. 15037 15038`-mleadz' 15039 Enables the `leadz' (leading zero) instruction. 15040 15041`-mm' 15042 Causes variables to be assigned to the `.near' section by default. 15043 15044`-mminmax' 15045 Enables the `min' and `max' instructions. 15046 15047`-mmult' 15048 Enables the multiplication and multiply-accumulate instructions. 15049 15050`-mno-opts' 15051 Disables all the optional instructions enabled by `-mall-opts'. 15052 15053`-mrepeat' 15054 Enables the `repeat' and `erepeat' instructions, used for 15055 low-overhead looping. 15056 15057`-ms' 15058 Causes all variables to default to the `.tiny' section. Note that 15059 there is a 65536-byte limit to this section. Accesses to these 15060 variables use the `%gp' base register. 15061 15062`-msatur' 15063 Enables the saturation instructions. Note that the compiler does 15064 not currently generate these itself, but this option is included 15065 for compatibility with other tools, like `as'. 15066 15067`-msdram' 15068 Link the SDRAM-based runtime instead of the default ROM-based 15069 runtime. 15070 15071`-msim' 15072 Link the simulator runtime libraries. 15073 15074`-msimnovec' 15075 Link the simulator runtime libraries, excluding built-in support 15076 for reset and exception vectors and tables. 15077 15078`-mtf' 15079 Causes all functions to default to the `.far' section. Without 15080 this option, functions default to the `.near' section. 15081 15082`-mtiny=N' 15083 Variables that are N bytes or smaller are allocated to the `.tiny' 15084 section. These variables use the `$gp' base register. The 15085 default for this option is 4, but note that there's a 65536-byte 15086 limit to the `.tiny' section. 15087 15088 15089 15090File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Options, Up: Submodel Options 15091 150923.17.25 MicroBlaze Options 15093-------------------------- 15094 15095`-msoft-float' 15096 Use software emulation for floating point (default). 15097 15098`-mhard-float' 15099 Use hardware floating-point instructions. 15100 15101`-mmemcpy' 15102 Do not optimize block moves, use `memcpy'. 15103 15104`-mno-clearbss' 15105 This option is deprecated. Use `-fno-zero-initialized-in-bss' 15106 instead. 15107 15108`-mcpu=CPU-TYPE' 15109 Use features of, and schedule code for, the given CPU. Supported 15110 values are in the format `vX.YY.Z', where X is a major version, YY 15111 is the minor version, and Z is compatibility code. Example values 15112 are `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b', 15113 `v6.00.a'. 15114 15115`-mxl-soft-mul' 15116 Use software multiply emulation (default). 15117 15118`-mxl-soft-div' 15119 Use software emulation for divides (default). 15120 15121`-mxl-barrel-shift' 15122 Use the hardware barrel shifter. 15123 15124`-mxl-pattern-compare' 15125 Use pattern compare instructions. 15126 15127`-msmall-divides' 15128 Use table lookup optimization for small signed integer divisions. 15129 15130`-mxl-stack-check' 15131 This option is deprecated. Use `-fstack-check' instead. 15132 15133`-mxl-gp-opt' 15134 Use GP-relative `.sdata'/`.sbss' sections. 15135 15136`-mxl-multiply-high' 15137 Use multiply high instructions for high part of 32x32 multiply. 15138 15139`-mxl-float-convert' 15140 Use hardware floating-point conversion instructions. 15141 15142`-mxl-float-sqrt' 15143 Use hardware floating-point square root instruction. 15144 15145`-mbig-endian' 15146 Generate code for a big-endian target. 15147 15148`-mlittle-endian' 15149 Generate code for a little-endian target. 15150 15151`-mxl-reorder' 15152 Use reorder instructions (swap and byte reversed load/store). 15153 15154`-mxl-mode-APP-MODEL' 15155 Select application model APP-MODEL. Valid models are 15156 `executable' 15157 normal executable (default), uses startup code `crt0.o'. 15158 15159 `xmdstub' 15160 for use with Xilinx Microprocessor Debugger (XMD) based 15161 software intrusive debug agent called xmdstub. This uses 15162 startup file `crt1.o' and sets the start address of the 15163 program to 0x800. 15164 15165 `bootstrap' 15166 for applications that are loaded using a bootloader. This 15167 model uses startup file `crt2.o' which does not contain a 15168 processor reset vector handler. This is suitable for 15169 transferring control on a processor reset to the bootloader 15170 rather than the application. 15171 15172 `novectors' 15173 for applications that do not require any of the MicroBlaze 15174 vectors. This option may be useful for applications running 15175 within a monitoring application. This model uses `crt3.o' as 15176 a startup file. 15177 15178 Option `-xl-mode-APP-MODEL' is a deprecated alias for 15179 `-mxl-mode-APP-MODEL'. 15180 15181 15182 15183File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MicroBlaze Options, Up: Submodel Options 15184 151853.17.26 MIPS Options 15186-------------------- 15187 15188`-EB' 15189 Generate big-endian code. 15190 15191`-EL' 15192 Generate little-endian code. This is the default for `mips*el-*-*' 15193 configurations. 15194 15195`-march=ARCH' 15196 Generate code that runs on ARCH, which can be the name of a 15197 generic MIPS ISA, or the name of a particular processor. The ISA 15198 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 15199 `mips32r2', `mips64' and `mips64r2'. The processor names are: 15200 `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd', 15201 `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec', 15202 `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `34kn', 15203 `74kc', `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1', 15204 `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', `m4k', 15205 `octeon', `octeon+', `octeon2', `orion', `r2000', `r3000', 15206 `r3900', `r4000', `r4400', `r4600', `r4650', `r4700', `r6000', 15207 `r8000', `rm7000', `rm9000', `r10000', `r12000', `r14000', 15208 `r16000', `sb1', `sr71000', `vr4100', `vr4111', `vr4120', 15209 `vr4130', `vr4300', `vr5000', `vr5400', `vr5500', `xlr' and `xlp'. 15210 The special value `from-abi' selects the most compatible 15211 architecture for the selected ABI (that is, `mips1' for 32-bit 15212 ABIs and `mips3' for 64-bit ABIs). 15213 15214 The native Linux/GNU toolchain also supports the value `native', 15215 which selects the best architecture option for the host processor. 15216 `-march=native' has no effect if GCC does not recognize the 15217 processor. 15218 15219 In processor names, a final `000' can be abbreviated as `k' (for 15220 example, `-march=r2k'). Prefixes are optional, and `vr' may be 15221 written `r'. 15222 15223 Names of the form `Nf2_1' refer to processors with FPUs clocked at 15224 half the rate of the core, names of the form `Nf1_1' refer to 15225 processors with FPUs clocked at the same rate as the core, and 15226 names of the form `Nf3_2' refer to processors with FPUs clocked a 15227 ratio of 3:2 with respect to the core. For compatibility reasons, 15228 `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are 15229 accepted as synonyms for `Nf1_1'. 15230 15231 GCC defines two macros based on the value of this option. The 15232 first is `_MIPS_ARCH', which gives the name of target 15233 architecture, as a string. The second has the form 15234 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 15235 `_MIPS_ARCH'. For example, `-march=r2000' sets `_MIPS_ARCH' to 15236 `"r2000"' and defines the macro `_MIPS_ARCH_R2000'. 15237 15238 Note that the `_MIPS_ARCH' macro uses the processor names given 15239 above. In other words, it has the full prefix and does not 15240 abbreviate `000' as `k'. In the case of `from-abi', the macro 15241 names the resolved architecture (either `"mips1"' or `"mips3"'). 15242 It names the default architecture when no `-march' option is given. 15243 15244`-mtune=ARCH' 15245 Optimize for ARCH. Among other things, this option controls the 15246 way instructions are scheduled, and the perceived cost of 15247 arithmetic operations. The list of ARCH values is the same as for 15248 `-march'. 15249 15250 When this option is not used, GCC optimizes for the processor 15251 specified by `-march'. By using `-march' and `-mtune' together, 15252 it is possible to generate code that runs on a family of 15253 processors, but optimize the code for one particular member of 15254 that family. 15255 15256 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 15257 which work in the same way as the `-march' ones described above. 15258 15259`-mips1' 15260 Equivalent to `-march=mips1'. 15261 15262`-mips2' 15263 Equivalent to `-march=mips2'. 15264 15265`-mips3' 15266 Equivalent to `-march=mips3'. 15267 15268`-mips4' 15269 Equivalent to `-march=mips4'. 15270 15271`-mips32' 15272 Equivalent to `-march=mips32'. 15273 15274`-mips32r2' 15275 Equivalent to `-march=mips32r2'. 15276 15277`-mips64' 15278 Equivalent to `-march=mips64'. 15279 15280`-mips64r2' 15281 Equivalent to `-march=mips64r2'. 15282 15283`-mips16' 15284`-mno-mips16' 15285 Generate (do not generate) MIPS16 code. If GCC is targeting a 15286 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE. 15287 15288 MIPS16 code generation can also be controlled on a per-function 15289 basis by means of `mips16' and `nomips16' attributes. *Note 15290 Function Attributes::, for more information. 15291 15292`-mflip-mips16' 15293 Generate MIPS16 code on alternating functions. This option is 15294 provided for regression testing of mixed MIPS16/non-MIPS16 code 15295 generation, and is not intended for ordinary use in compiling user 15296 code. 15297 15298`-minterlink-mips16' 15299`-mno-interlink-mips16' 15300 Require (do not require) that non-MIPS16 code be link-compatible 15301 with MIPS16 code. 15302 15303 For example, non-MIPS16 code cannot jump directly to MIPS16 code; 15304 it must either use a call or an indirect jump. 15305 `-minterlink-mips16' therefore disables direct jumps unless GCC 15306 knows that the target of the jump is not MIPS16. 15307 15308`-mabi=32' 15309`-mabi=o64' 15310`-mabi=n32' 15311`-mabi=64' 15312`-mabi=eabi' 15313 Generate code for the given ABI. 15314 15315 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 15316 generates 64-bit code when you select a 64-bit architecture, but 15317 you can use `-mgp32' to get 32-bit code instead. 15318 15319 For information about the O64 ABI, see 15320 `http://gcc.gnu.org/projects/mipso64-abi.html'. 15321 15322 GCC supports a variant of the o32 ABI in which floating-point 15323 registers are 64 rather than 32 bits wide. You can select this 15324 combination with `-mabi=32' `-mfp64'. This ABI relies on the 15325 `mthc1' and `mfhc1' instructions and is therefore only supported 15326 for MIPS32R2 processors. 15327 15328 The register assignments for arguments and return values remain the 15329 same, but each scalar value is passed in a single 64-bit register 15330 rather than a pair of 32-bit registers. For example, scalar 15331 floating-point values are returned in `$f0' only, not a 15332 `$f0'/`$f1' pair. The set of call-saved registers also remains 15333 the same, but all 64 bits are saved. 15334 15335`-mabicalls' 15336`-mno-abicalls' 15337 Generate (do not generate) code that is suitable for SVR4-style 15338 dynamic objects. `-mabicalls' is the default for SVR4-based 15339 systems. 15340 15341`-mshared' 15342`-mno-shared' 15343 Generate (do not generate) code that is fully position-independent, 15344 and that can therefore be linked into shared libraries. This 15345 option only affects `-mabicalls'. 15346 15347 All `-mabicalls' code has traditionally been position-independent, 15348 regardless of options like `-fPIC' and `-fpic'. However, as an 15349 extension, the GNU toolchain allows executables to use absolute 15350 accesses for locally-binding symbols. It can also use shorter GP 15351 initialization sequences and generate direct calls to 15352 locally-defined functions. This mode is selected by `-mno-shared'. 15353 15354 `-mno-shared' depends on binutils 2.16 or higher and generates 15355 objects that can only be linked by the GNU linker. However, the 15356 option does not affect the ABI of the final executable; it only 15357 affects the ABI of relocatable objects. Using `-mno-shared' 15358 generally makes executables both smaller and quicker. 15359 15360 `-mshared' is the default. 15361 15362`-mplt' 15363`-mno-plt' 15364 Assume (do not assume) that the static and dynamic linkers support 15365 PLTs and copy relocations. This option only affects `-mno-shared 15366 -mabicalls'. For the n64 ABI, this option has no effect without 15367 `-msym32'. 15368 15369 You can make `-mplt' the default by configuring GCC with 15370 `--with-mips-plt'. The default is `-mno-plt' otherwise. 15371 15372`-mxgot' 15373`-mno-xgot' 15374 Lift (do not lift) the usual restrictions on the size of the global 15375 offset table. 15376 15377 GCC normally uses a single instruction to load values from the GOT. 15378 While this is relatively efficient, it only works if the GOT is 15379 smaller than about 64k. Anything larger causes the linker to 15380 report an error such as: 15381 15382 relocation truncated to fit: R_MIPS_GOT16 foobar 15383 15384 If this happens, you should recompile your code with `-mxgot'. 15385 This works with very large GOTs, although the code is also less 15386 efficient, since it takes three instructions to fetch the value of 15387 a global symbol. 15388 15389 Note that some linkers can create multiple GOTs. If you have such 15390 a linker, you should only need to use `-mxgot' when a single object 15391 file accesses more than 64k's worth of GOT entries. Very few do. 15392 15393 These options have no effect unless GCC is generating position 15394 independent code. 15395 15396`-mgp32' 15397 Assume that general-purpose registers are 32 bits wide. 15398 15399`-mgp64' 15400 Assume that general-purpose registers are 64 bits wide. 15401 15402`-mfp32' 15403 Assume that floating-point registers are 32 bits wide. 15404 15405`-mfp64' 15406 Assume that floating-point registers are 64 bits wide. 15407 15408`-mhard-float' 15409 Use floating-point coprocessor instructions. 15410 15411`-msoft-float' 15412 Do not use floating-point coprocessor instructions. Implement 15413 floating-point calculations using library calls instead. 15414 15415`-mno-float' 15416 Equivalent to `-msoft-float', but additionally asserts that the 15417 program being compiled does not perform any floating-point 15418 operations. This option is presently supported only by some 15419 bare-metal MIPS configurations, where it may select a special set 15420 of libraries that lack all floating-point support (including, for 15421 example, the floating-point `printf' formats). If code compiled 15422 with `-mno-float' accidentally contains floating-point operations, 15423 it is likely to suffer a link-time or run-time failure. 15424 15425`-msingle-float' 15426 Assume that the floating-point coprocessor only supports 15427 single-precision operations. 15428 15429`-mdouble-float' 15430 Assume that the floating-point coprocessor supports 15431 double-precision operations. This is the default. 15432 15433`-mllsc' 15434`-mno-llsc' 15435 Use (do not use) `ll', `sc', and `sync' instructions to implement 15436 atomic memory built-in functions. When neither option is 15437 specified, GCC uses the instructions if the target architecture 15438 supports them. 15439 15440 `-mllsc' is useful if the runtime environment can emulate the 15441 instructions and `-mno-llsc' can be useful when compiling for 15442 nonstandard ISAs. You can make either option the default by 15443 configuring GCC with `--with-llsc' and `--without-llsc' 15444 respectively. `--with-llsc' is the default for some 15445 configurations; see the installation documentation for details. 15446 15447`-mdsp' 15448`-mno-dsp' 15449 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 15450 Built-in Functions::. This option defines the preprocessor macro 15451 `__mips_dsp'. It also defines `__mips_dsp_rev' to 1. 15452 15453`-mdspr2' 15454`-mno-dspr2' 15455 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 15456 Built-in Functions::. This option defines the preprocessor macros 15457 `__mips_dsp' and `__mips_dspr2'. It also defines `__mips_dsp_rev' 15458 to 2. 15459 15460`-msmartmips' 15461`-mno-smartmips' 15462 Use (do not use) the MIPS SmartMIPS ASE. 15463 15464`-mpaired-single' 15465`-mno-paired-single' 15466 Use (do not use) paired-single floating-point instructions. *Note 15467 MIPS Paired-Single Support::. This option requires hardware 15468 floating-point support to be enabled. 15469 15470`-mdmx' 15471`-mno-mdmx' 15472 Use (do not use) MIPS Digital Media Extension instructions. This 15473 option can only be used when generating 64-bit code and requires 15474 hardware floating-point support to be enabled. 15475 15476`-mips3d' 15477`-mno-mips3d' 15478 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 15479 Functions::. The option `-mips3d' implies `-mpaired-single'. 15480 15481`-mmt' 15482`-mno-mt' 15483 Use (do not use) MT Multithreading instructions. 15484 15485`-mmcu' 15486`-mno-mcu' 15487 Use (do not use) the MIPS MCU ASE instructions. 15488 15489`-mlong64' 15490 Force `long' types to be 64 bits wide. See `-mlong32' for an 15491 explanation of the default and the way that the pointer size is 15492 determined. 15493 15494`-mlong32' 15495 Force `long', `int', and pointer types to be 32 bits wide. 15496 15497 The default size of `int's, `long's and pointers depends on the 15498 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 15499 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 15500 `long's. Pointers are the same size as `long's, or the same size 15501 as integer registers, whichever is smaller. 15502 15503`-msym32' 15504`-mno-sym32' 15505 Assume (do not assume) that all symbols have 32-bit values, 15506 regardless of the selected ABI. This option is useful in 15507 combination with `-mabi=64' and `-mno-abicalls' because it allows 15508 GCC to generate shorter and faster references to symbolic 15509 addresses. 15510 15511`-G NUM' 15512 Put definitions of externally-visible data in a small data section 15513 if that data is no bigger than NUM bytes. GCC can then generate 15514 more efficient accesses to the data; see `-mgpopt' for details. 15515 15516 The default `-G' option depends on the configuration. 15517 15518`-mlocal-sdata' 15519`-mno-local-sdata' 15520 Extend (do not extend) the `-G' behavior to local data too, such 15521 as to static variables in C. `-mlocal-sdata' is the default for 15522 all configurations. 15523 15524 If the linker complains that an application is using too much 15525 small data, you might want to try rebuilding the less 15526 performance-critical parts with `-mno-local-sdata'. You might 15527 also want to build large libraries with `-mno-local-sdata', so 15528 that the libraries leave more room for the main program. 15529 15530`-mextern-sdata' 15531`-mno-extern-sdata' 15532 Assume (do not assume) that externally-defined data is in a small 15533 data section if the size of that data is within the `-G' limit. 15534 `-mextern-sdata' is the default for all configurations. 15535 15536 If you compile a module MOD with `-mextern-sdata' `-G NUM' 15537 `-mgpopt', and MOD references a variable VAR that is no bigger 15538 than NUM bytes, you must make sure that VAR is placed in a small 15539 data section. If VAR is defined by another module, you must 15540 either compile that module with a high-enough `-G' setting or 15541 attach a `section' attribute to VAR's definition. If VAR is 15542 common, you must link the application with a high-enough `-G' 15543 setting. 15544 15545 The easiest way of satisfying these restrictions is to compile and 15546 link every module with the same `-G' option. However, you may 15547 wish to build a library that supports several different small data 15548 limits. You can do this by compiling the library with the highest 15549 supported `-G' setting and additionally using `-mno-extern-sdata' 15550 to stop the library from making assumptions about 15551 externally-defined data. 15552 15553`-mgpopt' 15554`-mno-gpopt' 15555 Use (do not use) GP-relative accesses for symbols that are known 15556 to be in a small data section; see `-G', `-mlocal-sdata' and 15557 `-mextern-sdata'. `-mgpopt' is the default for all configurations. 15558 15559 `-mno-gpopt' is useful for cases where the `$gp' register might 15560 not hold the value of `_gp'. For example, if the code is part of 15561 a library that might be used in a boot monitor, programs that call 15562 boot monitor routines pass an unknown value in `$gp'. (In such 15563 situations, the boot monitor itself is usually compiled with 15564 `-G0'.) 15565 15566 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'. 15567 15568`-membedded-data' 15569`-mno-embedded-data' 15570 Allocate variables to the read-only data section first if 15571 possible, then next in the small data section if possible, 15572 otherwise in data. This gives slightly slower code than the 15573 default, but reduces the amount of RAM required when executing, 15574 and thus may be preferred for some embedded systems. 15575 15576`-muninit-const-in-rodata' 15577`-mno-uninit-const-in-rodata' 15578 Put uninitialized `const' variables in the read-only data section. 15579 This option is only meaningful in conjunction with 15580 `-membedded-data'. 15581 15582`-mcode-readable=SETTING' 15583 Specify whether GCC may generate code that reads from executable 15584 sections. There are three possible settings: 15585 15586 `-mcode-readable=yes' 15587 Instructions may freely access executable sections. This is 15588 the default setting. 15589 15590 `-mcode-readable=pcrel' 15591 MIPS16 PC-relative load instructions can access executable 15592 sections, but other instructions must not do so. This option 15593 is useful on 4KSc and 4KSd processors when the code TLBs have 15594 the Read Inhibit bit set. It is also useful on processors 15595 that can be configured to have a dual instruction/data SRAM 15596 interface and that, like the M4K, automatically redirect 15597 PC-relative loads to the instruction RAM. 15598 15599 `-mcode-readable=no' 15600 Instructions must not access executable sections. This 15601 option can be useful on targets that are configured to have a 15602 dual instruction/data SRAM interface but that (unlike the 15603 M4K) do not automatically redirect PC-relative loads to the 15604 instruction RAM. 15605 15606`-msplit-addresses' 15607`-mno-split-addresses' 15608 Enable (disable) use of the `%hi()' and `%lo()' assembler 15609 relocation operators. This option has been superseded by 15610 `-mexplicit-relocs' but is retained for backwards compatibility. 15611 15612`-mexplicit-relocs' 15613`-mno-explicit-relocs' 15614 Use (do not use) assembler relocation operators when dealing with 15615 symbolic addresses. The alternative, selected by 15616 `-mno-explicit-relocs', is to use assembler macros instead. 15617 15618 `-mexplicit-relocs' is the default if GCC was configured to use an 15619 assembler that supports relocation operators. 15620 15621`-mcheck-zero-division' 15622`-mno-check-zero-division' 15623 Trap (do not trap) on integer division by zero. 15624 15625 The default is `-mcheck-zero-division'. 15626 15627`-mdivide-traps' 15628`-mdivide-breaks' 15629 MIPS systems check for division by zero by generating either a 15630 conditional trap or a break instruction. Using traps results in 15631 smaller code, but is only supported on MIPS II and later. Also, 15632 some versions of the Linux kernel have a bug that prevents trap 15633 from generating the proper signal (`SIGFPE'). Use 15634 `-mdivide-traps' to allow conditional traps on architectures that 15635 support them and `-mdivide-breaks' to force the use of breaks. 15636 15637 The default is usually `-mdivide-traps', but this can be 15638 overridden at configure time using `--with-divide=breaks'. 15639 Divide-by-zero checks can be completely disabled using 15640 `-mno-check-zero-division'. 15641 15642`-mmemcpy' 15643`-mno-memcpy' 15644 Force (do not force) the use of `memcpy()' for non-trivial block 15645 moves. The default is `-mno-memcpy', which allows GCC to inline 15646 most constant-sized copies. 15647 15648`-mlong-calls' 15649`-mno-long-calls' 15650 Disable (do not disable) use of the `jal' instruction. Calling 15651 functions using `jal' is more efficient but requires the caller 15652 and callee to be in the same 256 megabyte segment. 15653 15654 This option has no effect on abicalls code. The default is 15655 `-mno-long-calls'. 15656 15657`-mmad' 15658`-mno-mad' 15659 Enable (disable) use of the `mad', `madu' and `mul' instructions, 15660 as provided by the R4650 ISA. 15661 15662`-mfused-madd' 15663`-mno-fused-madd' 15664 Enable (disable) use of the floating-point multiply-accumulate 15665 instructions, when they are available. The default is 15666 `-mfused-madd'. 15667 15668 On the R8000 CPU when multiply-accumulate instructions are used, 15669 the intermediate product is calculated to infinite precision and 15670 is not subject to the FCSR Flush to Zero bit. This may be 15671 undesirable in some circumstances. On other processors the result 15672 is numerically identical to the equivalent computation using 15673 separate multiply, add, subtract and negate instructions. 15674 15675`-nocpp' 15676 Tell the MIPS assembler to not run its preprocessor over user 15677 assembler files (with a `.s' suffix) when assembling them. 15678 15679`-mfix-24k' 15680 15681`-mno-fix-24k' 15682 Work around the 24K E48 (lost data on stores during refill) errata. 15683 The workarounds are implemented by the assembler rather than by 15684 GCC. 15685 15686`-mfix-r4000' 15687`-mno-fix-r4000' 15688 Work around certain R4000 CPU errata: 15689 - A double-word or a variable shift may give an incorrect 15690 result if executed immediately after starting an integer 15691 division. 15692 15693 - A double-word or a variable shift may give an incorrect 15694 result if executed while an integer multiplication is in 15695 progress. 15696 15697 - An integer division may give an incorrect result if started 15698 in a delay slot of a taken branch or a jump. 15699 15700`-mfix-r4400' 15701`-mno-fix-r4400' 15702 Work around certain R4400 CPU errata: 15703 - A double-word or a variable shift may give an incorrect 15704 result if executed immediately after starting an integer 15705 division. 15706 15707`-mfix-r10000' 15708`-mno-fix-r10000' 15709 Work around certain R10000 errata: 15710 - `ll'/`sc' sequences may not behave atomically on revisions 15711 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 15712 15713 This option can only be used if the target architecture supports 15714 branch-likely instructions. `-mfix-r10000' is the default when 15715 `-march=r10000' is used; `-mno-fix-r10000' is the default 15716 otherwise. 15717 15718`-mfix-vr4120' 15719`-mno-fix-vr4120' 15720 Work around certain VR4120 errata: 15721 - `dmultu' does not always produce the correct result. 15722 15723 - `div' and `ddiv' do not always produce the correct result if 15724 one of the operands is negative. 15725 The workarounds for the division errata rely on special functions 15726 in `libgcc.a'. At present, these functions are only provided by 15727 the `mips64vr*-elf' configurations. 15728 15729 Other VR4120 errata require a NOP to be inserted between certain 15730 pairs of instructions. These errata are handled by the assembler, 15731 not by GCC itself. 15732 15733`-mfix-vr4130' 15734 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 15735 implemented by the assembler rather than by GCC, although GCC 15736 avoids using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 15737 `dmacc' and `dmacchi' instructions are available instead. 15738 15739`-mfix-sb1' 15740`-mno-fix-sb1' 15741 Work around certain SB-1 CPU core errata. (This flag currently 15742 works around the SB-1 revision 2 "F1" and "F2" floating-point 15743 errata.) 15744 15745`-mr10k-cache-barrier=SETTING' 15746 Specify whether GCC should insert cache barriers to avoid the 15747 side-effects of speculation on R10K processors. 15748 15749 In common with many processors, the R10K tries to predict the 15750 outcome of a conditional branch and speculatively executes 15751 instructions from the "taken" branch. It later aborts these 15752 instructions if the predicted outcome is wrong. However, on the 15753 R10K, even aborted instructions can have side effects. 15754 15755 This problem only affects kernel stores and, depending on the 15756 system, kernel loads. As an example, a speculatively-executed 15757 store may load the target memory into cache and mark the cache 15758 line as dirty, even if the store itself is later aborted. If a 15759 DMA operation writes to the same area of memory before the "dirty" 15760 line is flushed, the cached data overwrites the DMA-ed data. See 15761 the R10K processor manual for a full description, including other 15762 potential problems. 15763 15764 One workaround is to insert cache barrier instructions before 15765 every memory access that might be speculatively executed and that 15766 might have side effects even if aborted. 15767 `-mr10k-cache-barrier=SETTING' controls GCC's implementation of 15768 this workaround. It assumes that aborted accesses to any byte in 15769 the following regions does not have side effects: 15770 15771 1. the memory occupied by the current function's stack frame; 15772 15773 2. the memory occupied by an incoming stack argument; 15774 15775 3. the memory occupied by an object with a link-time-constant 15776 address. 15777 15778 It is the kernel's responsibility to ensure that speculative 15779 accesses to these regions are indeed safe. 15780 15781 If the input program contains a function declaration such as: 15782 15783 void foo (void); 15784 15785 then the implementation of `foo' must allow `j foo' and `jal foo' 15786 to be executed speculatively. GCC honors this restriction for 15787 functions it compiles itself. It expects non-GCC functions (such 15788 as hand-written assembly code) to do the same. 15789 15790 The option has three forms: 15791 15792 `-mr10k-cache-barrier=load-store' 15793 Insert a cache barrier before a load or store that might be 15794 speculatively executed and that might have side effects even 15795 if aborted. 15796 15797 `-mr10k-cache-barrier=store' 15798 Insert a cache barrier before a store that might be 15799 speculatively executed and that might have side effects even 15800 if aborted. 15801 15802 `-mr10k-cache-barrier=none' 15803 Disable the insertion of cache barriers. This is the default 15804 setting. 15805 15806`-mflush-func=FUNC' 15807`-mno-flush-func' 15808 Specifies the function to call to flush the I and D caches, or to 15809 not call any such function. If called, the function must take the 15810 same arguments as the common `_flush_func()', that is, the address 15811 of the memory range for which the cache is being flushed, the size 15812 of the memory range, and the number 3 (to flush both caches). The 15813 default depends on the target GCC was configured for, but commonly 15814 is either `_flush_func' or `__cpu_flush'. 15815 15816`mbranch-cost=NUM' 15817 Set the cost of branches to roughly NUM "simple" instructions. 15818 This cost is only a heuristic and is not guaranteed to produce 15819 consistent results across releases. A zero cost redundantly 15820 selects the default, which is based on the `-mtune' setting. 15821 15822`-mbranch-likely' 15823`-mno-branch-likely' 15824 Enable or disable use of Branch Likely instructions, regardless of 15825 the default for the selected architecture. By default, Branch 15826 Likely instructions may be generated if they are supported by the 15827 selected architecture. An exception is for the MIPS32 and MIPS64 15828 architectures and processors that implement those architectures; 15829 for those, Branch Likely instructions are not be generated by 15830 default because the MIPS32 and MIPS64 architectures specifically 15831 deprecate their use. 15832 15833`-mfp-exceptions' 15834`-mno-fp-exceptions' 15835 Specifies whether FP exceptions are enabled. This affects how FP 15836 instructions are scheduled for some processors. The default is 15837 that FP exceptions are enabled. 15838 15839 For instance, on the SB-1, if FP exceptions are disabled, and we 15840 are emitting 64-bit code, then we can use both FP pipes. 15841 Otherwise, we can only use one FP pipe. 15842 15843`-mvr4130-align' 15844`-mno-vr4130-align' 15845 The VR4130 pipeline is two-way superscalar, but can only issue two 15846 instructions together if the first one is 8-byte aligned. When 15847 this option is enabled, GCC aligns pairs of instructions that it 15848 thinks should execute in parallel. 15849 15850 This option only has an effect when optimizing for the VR4130. It 15851 normally makes code faster, but at the expense of making it bigger. 15852 It is enabled by default at optimization level `-O3'. 15853 15854`-msynci' 15855`-mno-synci' 15856 Enable (disable) generation of `synci' instructions on 15857 architectures that support it. The `synci' instructions (if 15858 enabled) are generated when `__builtin___clear_cache()' is 15859 compiled. 15860 15861 This option defaults to `-mno-synci', but the default can be 15862 overridden by configuring with `--with-synci'. 15863 15864 When compiling code for single processor systems, it is generally 15865 safe to use `synci'. However, on many multi-core (SMP) systems, it 15866 does not invalidate the instruction caches on all cores and may 15867 lead to undefined behavior. 15868 15869`-mrelax-pic-calls' 15870`-mno-relax-pic-calls' 15871 Try to turn PIC calls that are normally dispatched via register 15872 `$25' into direct calls. This is only possible if the linker can 15873 resolve the destination at link-time and if the destination is 15874 within range for a direct call. 15875 15876 `-mrelax-pic-calls' is the default if GCC was configured to use an 15877 assembler and a linker that support the `.reloc' assembly 15878 directive and `-mexplicit-relocs' is in effect. With 15879 `-mno-explicit-relocs', this optimization can be performed by the 15880 assembler and the linker alone without help from the compiler. 15881 15882`-mmcount-ra-address' 15883`-mno-mcount-ra-address' 15884 Emit (do not emit) code that allows `_mcount' to modify the 15885 calling function's return address. When enabled, this option 15886 extends the usual `_mcount' interface with a new RA-ADDRESS 15887 parameter, which has type `intptr_t *' and is passed in register 15888 `$12'. `_mcount' can then modify the return address by doing both 15889 of the following: 15890 * Returning the new address in register `$31'. 15891 15892 * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is 15893 nonnull. 15894 15895 The default is `-mno-mcount-ra-address'. 15896 15897 15898 15899File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 15900 159013.17.27 MMIX Options 15902-------------------- 15903 15904These options are defined for the MMIX: 15905 15906`-mlibfuncs' 15907`-mno-libfuncs' 15908 Specify that intrinsic library functions are being compiled, 15909 passing all values in registers, no matter the size. 15910 15911`-mepsilon' 15912`-mno-epsilon' 15913 Generate floating-point comparison instructions that compare with 15914 respect to the `rE' epsilon register. 15915 15916`-mabi=mmixware' 15917`-mabi=gnu' 15918 Generate code that passes function parameters and return values 15919 that (in the called function) are seen as registers `$0' and up, 15920 as opposed to the GNU ABI which uses global registers `$231' and 15921 up. 15922 15923`-mzero-extend' 15924`-mno-zero-extend' 15925 When reading data from memory in sizes shorter than 64 bits, use 15926 (do not use) zero-extending load instructions by default, rather 15927 than sign-extending ones. 15928 15929`-mknuthdiv' 15930`-mno-knuthdiv' 15931 Make the result of a division yielding a remainder have the same 15932 sign as the divisor. With the default, `-mno-knuthdiv', the sign 15933 of the remainder follows the sign of the dividend. Both methods 15934 are arithmetically valid, the latter being almost exclusively used. 15935 15936`-mtoplevel-symbols' 15937`-mno-toplevel-symbols' 15938 Prepend (do not prepend) a `:' to all global symbols, so the 15939 assembly code can be used with the `PREFIX' assembly directive. 15940 15941`-melf' 15942 Generate an executable in the ELF format, rather than the default 15943 `mmo' format used by the `mmix' simulator. 15944 15945`-mbranch-predict' 15946`-mno-branch-predict' 15947 Use (do not use) the probable-branch instructions, when static 15948 branch prediction indicates a probable branch. 15949 15950`-mbase-addresses' 15951`-mno-base-addresses' 15952 Generate (do not generate) code that uses _base addresses_. Using 15953 a base address automatically generates a request (handled by the 15954 assembler and the linker) for a constant to be set up in a global 15955 register. The register is used for one or more base address 15956 requests within the range 0 to 255 from the value held in the 15957 register. The generally leads to short and fast code, but the 15958 number of different data items that can be addressed is limited. 15959 This means that a program that uses lots of static data may 15960 require `-mno-base-addresses'. 15961 15962`-msingle-exit' 15963`-mno-single-exit' 15964 Force (do not force) generated code to have a single exit point in 15965 each function. 15966 15967 15968File: gcc.info, Node: MN10300 Options, Next: Moxie Options, Prev: MMIX Options, Up: Submodel Options 15969 159703.17.28 MN10300 Options 15971----------------------- 15972 15973These `-m' options are defined for Matsushita MN10300 architectures: 15974 15975`-mmult-bug' 15976 Generate code to avoid bugs in the multiply instructions for the 15977 MN10300 processors. This is the default. 15978 15979`-mno-mult-bug' 15980 Do not generate code to avoid bugs in the multiply instructions 15981 for the MN10300 processors. 15982 15983`-mam33' 15984 Generate code using features specific to the AM33 processor. 15985 15986`-mno-am33' 15987 Do not generate code using features specific to the AM33 15988 processor. This is the default. 15989 15990`-mam33-2' 15991 Generate code using features specific to the AM33/2.0 processor. 15992 15993`-mam34' 15994 Generate code using features specific to the AM34 processor. 15995 15996`-mtune=CPU-TYPE' 15997 Use the timing characteristics of the indicated CPU type when 15998 scheduling instructions. This does not change the targeted 15999 processor type. The CPU type must be one of `mn10300', `am33', 16000 `am33-2' or `am34'. 16001 16002`-mreturn-pointer-on-d0' 16003 When generating a function that returns a pointer, return the 16004 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 16005 only in `a0', and attempts to call such functions without a 16006 prototype result in errors. Note that this option is on by 16007 default; use `-mno-return-pointer-on-d0' to disable it. 16008 16009`-mno-crt0' 16010 Do not link in the C run-time initialization object file. 16011 16012`-mrelax' 16013 Indicate to the linker that it should perform a relaxation 16014 optimization pass to shorten branches, calls and absolute memory 16015 addresses. This option only has an effect when used on the 16016 command line for the final link step. 16017 16018 This option makes symbolic debugging impossible. 16019 16020`-mliw' 16021 Allow the compiler to generate _Long Instruction Word_ 16022 instructions if the target is the `AM33' or later. This is the 16023 default. This option defines the preprocessor macro `__LIW__'. 16024 16025`-mnoliw' 16026 Do not allow the compiler to generate _Long Instruction Word_ 16027 instructions. This option defines the preprocessor macro 16028 `__NO_LIW__'. 16029 16030`-msetlb' 16031 Allow the compiler to generate the _SETLB_ and _Lcc_ instructions 16032 if the target is the `AM33' or later. This is the default. This 16033 option defines the preprocessor macro `__SETLB__'. 16034 16035`-mnosetlb' 16036 Do not allow the compiler to generate _SETLB_ or _Lcc_ 16037 instructions. This option defines the preprocessor macro 16038 `__NO_SETLB__'. 16039 16040 16041 16042File: gcc.info, Node: Moxie Options, Next: PDP-11 Options, Prev: MN10300 Options, Up: Submodel Options 16043 160443.17.29 Moxie Options 16045--------------------- 16046 16047`-meb' 16048 Generate big-endian code. This is the default for `moxie-*-*' 16049 configurations. 16050 16051`-mel' 16052 Generate little-endian code. 16053 16054`-mno-crt0' 16055 Do not link in the C run-time initialization object file. 16056 16057 16058 16059File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: Moxie Options, Up: Submodel Options 16060 160613.17.30 PDP-11 Options 16062---------------------- 16063 16064These options are defined for the PDP-11: 16065 16066`-mfpu' 16067 Use hardware FPP floating point. This is the default. (FIS 16068 floating point on the PDP-11/40 is not supported.) 16069 16070`-msoft-float' 16071 Do not use hardware floating point. 16072 16073`-mac0' 16074 Return floating-point results in ac0 (fr0 in Unix assembler 16075 syntax). 16076 16077`-mno-ac0' 16078 Return floating-point results in memory. This is the default. 16079 16080`-m40' 16081 Generate code for a PDP-11/40. 16082 16083`-m45' 16084 Generate code for a PDP-11/45. This is the default. 16085 16086`-m10' 16087 Generate code for a PDP-11/10. 16088 16089`-mbcopy-builtin' 16090 Use inline `movmemhi' patterns for copying memory. This is the 16091 default. 16092 16093`-mbcopy' 16094 Do not use inline `movmemhi' patterns for copying memory. 16095 16096`-mint16' 16097`-mno-int32' 16098 Use 16-bit `int'. This is the default. 16099 16100`-mint32' 16101`-mno-int16' 16102 Use 32-bit `int'. 16103 16104`-mfloat64' 16105`-mno-float32' 16106 Use 64-bit `float'. This is the default. 16107 16108`-mfloat32' 16109`-mno-float64' 16110 Use 32-bit `float'. 16111 16112`-mabshi' 16113 Use `abshi2' pattern. This is the default. 16114 16115`-mno-abshi' 16116 Do not use `abshi2' pattern. 16117 16118`-mbranch-expensive' 16119 Pretend that branches are expensive. This is for experimenting 16120 with code generation only. 16121 16122`-mbranch-cheap' 16123 Do not pretend that branches are expensive. This is the default. 16124 16125`-munix-asm' 16126 Use Unix assembler syntax. This is the default when configured for 16127 `pdp11-*-bsd'. 16128 16129`-mdec-asm' 16130 Use DEC assembler syntax. This is the default when configured for 16131 any PDP-11 target other than `pdp11-*-bsd'. 16132 16133 16134File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 16135 161363.17.31 picoChip Options 16137------------------------ 16138 16139These `-m' options are defined for picoChip implementations: 16140 16141`-mae=AE_TYPE' 16142 Set the instruction set, register set, and instruction scheduling 16143 parameters for array element type AE_TYPE. Supported values for 16144 AE_TYPE are `ANY', `MUL', and `MAC'. 16145 16146 `-mae=ANY' selects a completely generic AE type. Code generated 16147 with this option runs on any of the other AE types. The code is 16148 not as efficient as it would be if compiled for a specific AE 16149 type, and some types of operation (e.g., multiplication) do not 16150 work properly on all types of AE. 16151 16152 `-mae=MUL' selects a MUL AE type. This is the most useful AE type 16153 for compiled code, and is the default. 16154 16155 `-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 16156 option may suffer from poor performance of byte (char) 16157 manipulation, since the DSP AE does not provide hardware support 16158 for byte load/stores. 16159 16160`-msymbol-as-address' 16161 Enable the compiler to directly use a symbol name as an address in 16162 a load/store instruction, without first loading it into a 16163 register. Typically, the use of this option generates larger 16164 programs, which run faster than when the option isn't used. 16165 However, the results vary from program to program, so it is left 16166 as a user option, rather than being permanently enabled. 16167 16168`-mno-inefficient-warnings' 16169 Disables warnings about the generation of inefficient code. These 16170 warnings can be generated, for example, when compiling code that 16171 performs byte-level memory operations on the MAC AE type. The MAC 16172 AE has no hardware support for byte-level memory operations, so 16173 all byte load/stores must be synthesized from word load/store 16174 operations. This is inefficient and a warning is generated to 16175 indicate that you should rewrite the code to avoid byte 16176 operations, or to target an AE type that has the necessary 16177 hardware support. This option disables these warnings. 16178 16179 16180 16181File: gcc.info, Node: PowerPC Options, Next: RL78 Options, Prev: picoChip Options, Up: Submodel Options 16182 161833.17.32 PowerPC Options 16184----------------------- 16185 16186These are listed under *Note RS/6000 and PowerPC Options::. 16187 16188 16189File: gcc.info, Node: RL78 Options, Next: RS/6000 and PowerPC Options, Prev: PowerPC Options, Up: Submodel Options 16190 161913.17.33 RL78 Options 16192-------------------- 16193 16194`-msim' 16195 Links in additional target libraries to support operation within a 16196 simulator. 16197 16198`-mmul=none' 16199`-mmul=g13' 16200`-mmul=rl78' 16201 Specifies the type of hardware multiplication support to be used. 16202 The default is `none', which uses software multiplication 16203 functions. The `g13' option is for the hardware multiply/divide 16204 peripheral only on the RL78/G13 targets. The `rl78' option is for 16205 the standard hardware multiplication defined in the RL78 software 16206 manual. 16207 16208 16209 16210File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: RL78 Options, Up: Submodel Options 16211 162123.17.34 IBM RS/6000 and PowerPC Options 16213--------------------------------------- 16214 16215These `-m' options are defined for the IBM RS/6000 and PowerPC: 16216`-mpowerpc-gpopt' 16217`-mno-powerpc-gpopt' 16218`-mpowerpc-gfxopt' 16219`-mno-powerpc-gfxopt' 16220`-mpowerpc64' 16221`-mno-powerpc64' 16222`-mmfcrf' 16223`-mno-mfcrf' 16224`-mpopcntb' 16225`-mno-popcntb' 16226`-mpopcntd' 16227`-mno-popcntd' 16228`-mfprnd' 16229`-mno-fprnd' 16230`-mcmpb' 16231`-mno-cmpb' 16232`-mmfpgpr' 16233`-mno-mfpgpr' 16234`-mhard-dfp' 16235`-mno-hard-dfp' 16236 You use these options to specify which instructions are available 16237 on the processor you are using. The default value of these 16238 options is determined when configuring GCC. Specifying the 16239 `-mcpu=CPU_TYPE' overrides the specification of these options. We 16240 recommend you use the `-mcpu=CPU_TYPE' option rather than the 16241 options listed above. 16242 16243 Specifying `-mpowerpc-gpopt' allows GCC to use the optional 16244 PowerPC architecture instructions in the General Purpose group, 16245 including floating-point square root. Specifying 16246 `-mpowerpc-gfxopt' allows GCC to use the optional PowerPC 16247 architecture instructions in the Graphics group, including 16248 floating-point select. 16249 16250 The `-mmfcrf' option allows GCC to generate the move from 16251 condition register field instruction implemented on the POWER4 16252 processor and other processors that support the PowerPC V2.01 16253 architecture. The `-mpopcntb' option allows GCC to generate the 16254 popcount and double-precision FP reciprocal estimate instruction 16255 implemented on the POWER5 processor and other processors that 16256 support the PowerPC V2.02 architecture. The `-mpopcntd' option 16257 allows GCC to generate the popcount instruction implemented on the 16258 POWER7 processor and other processors that support the PowerPC 16259 V2.06 architecture. The `-mfprnd' option allows GCC to generate 16260 the FP round to integer instructions implemented on the POWER5+ 16261 processor and other processors that support the PowerPC V2.03 16262 architecture. The `-mcmpb' option allows GCC to generate the 16263 compare bytes instruction implemented on the POWER6 processor and 16264 other processors that support the PowerPC V2.05 architecture. The 16265 `-mmfpgpr' option allows GCC to generate the FP move to/from 16266 general-purpose register instructions implemented on the POWER6X 16267 processor and other processors that support the extended PowerPC 16268 V2.05 architecture. The `-mhard-dfp' option allows GCC to 16269 generate the decimal floating-point instructions implemented on 16270 some POWER processors. 16271 16272 The `-mpowerpc64' option allows GCC to generate the additional 16273 64-bit instructions that are found in the full PowerPC64 16274 architecture and to treat GPRs as 64-bit, doubleword quantities. 16275 GCC defaults to `-mno-powerpc64'. 16276 16277`-mcpu=CPU_TYPE' 16278 Set architecture type, register usage, and instruction scheduling 16279 parameters for machine type CPU_TYPE. Supported values for 16280 CPU_TYPE are `401', `403', `405', `405fp', `440', `440fp', `464', 16281 `464fp', `476', `476fp', `505', `601', `602', `603', `603e', 16282 `604', `604e', `620', `630', `740', `7400', `7450', `750', `801', 16283 `821', `823', `860', `970', `8540', `a2', `e300c2', `e300c3', 16284 `e500mc', `e500mc64', `e5500', `e6500', `ec603e', `G3', `G4', `G5', 16285 `titan', `power3', `power4', `power5', `power5+', `power6', 16286 `power6x', `power7', `power8', `powerpc', `powerpc64', 16287 `powerpc64le', and `rs64'. 16288 16289 `-mcpu=powerpc', `-mcpu=powerpc64', and `-mcpu=powerpc64le' 16290 specify pure 32-bit PowerPC (either endian), 64-bit big endian 16291 PowerPC and 64-bit little endian PowerPC architecture machine 16292 types, with an appropriate, generic processor model assumed for 16293 scheduling purposes. 16294 16295 The other options specify a specific processor. Code generated 16296 under those options runs best on that processor, and may not run 16297 at all on others. 16298 16299 The `-mcpu' options automatically enable or disable the following 16300 options: 16301 16302 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 16303 -mpopcntb -mpopcntd -mpowerpc64 16304 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 16305 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx 16306 -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector 16307 -mquad-memory -mquad-memory-atomic 16308 16309 The particular options set for any particular CPU varies between 16310 compiler versions, depending on what setting seems to produce 16311 optimal code for that CPU; it doesn't necessarily reflect the 16312 actual hardware's capabilities. If you wish to set an individual 16313 option to a particular value, you may specify it after the `-mcpu' 16314 option, like `-mcpu=970 -mno-altivec'. 16315 16316 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 16317 or disabled by the `-mcpu' option at present because AIX does not 16318 have full support for these options. You may still enable or 16319 disable them individually if you're sure it'll work in your 16320 environment. 16321 16322`-mtune=CPU_TYPE' 16323 Set the instruction scheduling parameters for machine type 16324 CPU_TYPE, but do not set the architecture type or register usage, 16325 as `-mcpu=CPU_TYPE' does. The same values for CPU_TYPE are used 16326 for `-mtune' as for `-mcpu'. If both are specified, the code 16327 generated uses the architecture and registers set by `-mcpu', but 16328 the scheduling parameters set by `-mtune'. 16329 16330`-mcmodel=small' 16331 Generate PowerPC64 code for the small model: The TOC is limited to 16332 64k. 16333 16334`-mcmodel=medium' 16335 Generate PowerPC64 code for the medium model: The TOC and other 16336 static data may be up to a total of 4G in size. 16337 16338`-mcmodel=large' 16339 Generate PowerPC64 code for the large model: The TOC may be up to 16340 4G in size. Other data and code is only limited by the 64-bit 16341 address space. 16342 16343`-maltivec' 16344`-mno-altivec' 16345 Generate code that uses (does not use) AltiVec instructions, and 16346 also enable the use of built-in functions that allow more direct 16347 access to the AltiVec instruction set. You may also need to set 16348 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 16349 enhancements. 16350 16351 When `-maltivec' is used, rather than `-maltivec=le' or 16352 `-maltivec=be', the element order for Altivec intrinsics such as 16353 `vec_splat', `vec_extract', and `vec_insert' will match array 16354 element order corresponding to the endianness of the target. That 16355 is, element zero identifies the leftmost element in a vector 16356 register when targeting a big-endian platform, and identifies the 16357 rightmost element in a vector register when targeting a 16358 little-endian platform. 16359 16360`-maltivec=be' 16361 Generate Altivec instructions using big-endian element order, 16362 regardless of whether the target is big- or little-endian. This is 16363 the default when targeting a big-endian platform. 16364 16365 The element order is used to interpret element numbers in Altivec 16366 intrinsics such as `vec_splat', `vec_extract', and `vec_insert'. 16367 By default, these will match array element order corresponding to 16368 the endianness for the target. 16369 16370`-maltivec=le' 16371 Generate Altivec instructions using little-endian element order, 16372 regardless of whether the target is big- or little-endian. This is 16373 the default when targeting a little-endian platform. This option 16374 is currently ignored when targeting a big-endian platform. 16375 16376 The element order is used to interpret element numbers in Altivec 16377 intrinsics such as `vec_splat', `vec_extract', and `vec_insert'. 16378 By default, these will match array element order corresponding to 16379 the endianness for the target. 16380 16381`-mvrsave' 16382`-mno-vrsave' 16383 Generate VRSAVE instructions when generating AltiVec code. 16384 16385`-mgen-cell-microcode' 16386 Generate Cell microcode instructions. 16387 16388`-mwarn-cell-microcode' 16389 Warn when a Cell microcode instruction is emitted. An example of 16390 a Cell microcode instruction is a variable shift. 16391 16392`-msecure-plt' 16393 Generate code that allows `ld' and `ld.so' to build executables 16394 and shared libraries with non-executable `.plt' and `.got' 16395 sections. This is a PowerPC 32-bit SYSV ABI option. 16396 16397`-mbss-plt' 16398 Generate code that uses a BSS `.plt' section that `ld.so' fills 16399 in, and requires `.plt' and `.got' sections that are both writable 16400 and executable. This is a PowerPC 32-bit SYSV ABI option. 16401 16402`-misel' 16403`-mno-isel' 16404 This switch enables or disables the generation of ISEL 16405 instructions. 16406 16407`-misel=YES/NO' 16408 This switch has been deprecated. Use `-misel' and `-mno-isel' 16409 instead. 16410 16411`-mspe' 16412`-mno-spe' 16413 This switch enables or disables the generation of SPE simd 16414 instructions. 16415 16416`-mpaired' 16417`-mno-paired' 16418 This switch enables or disables the generation of PAIRED simd 16419 instructions. 16420 16421`-mspe=YES/NO' 16422 This option has been deprecated. Use `-mspe' and `-mno-spe' 16423 instead. 16424 16425`-mvsx' 16426`-mno-vsx' 16427 Generate code that uses (does not use) vector/scalar (VSX) 16428 instructions, and also enable the use of built-in functions that 16429 allow more direct access to the VSX instruction set. 16430 16431`-mcrypto' 16432`-mno-crypto' 16433 Enable the use (disable) of the built-in functions that allow 16434 direct access to the cryptographic instructions that were added in 16435 version 2.07 of the PowerPC ISA. 16436 16437`-mdirect-move' 16438`-mno-direct-move' 16439 Generate code that uses (does not use) the instructions to move 16440 data between the general purpose registers and the vector/scalar 16441 (VSX) registers that were added in version 2.07 of the PowerPC ISA. 16442 16443`-mpower8-fusion' 16444`-mno-power8-fusion' 16445 Generate code that keeps (does not keeps) some integer operations 16446 adjacent so that the instructions can be fused together on power8 16447 and later processors. 16448 16449`-mpower8-vector' 16450`-mno-power8-vector' 16451 Generate code that uses (does not use) the vector and scalar 16452 instructions that were added in version 2.07 of the PowerPC ISA. 16453 Also enable the use of built-in functions that allow more direct 16454 access to the vector instructions. 16455 16456`-mquad-memory' 16457`-mno-quad-memory' 16458 Generate code that uses (does not use) the non-atomic quad word 16459 memory instructions. The `-mquad-memory' option requires use of 16460 64-bit mode. 16461 16462`-mquad-memory-atomic' 16463`-mno-quad-memory-atomic' 16464 Generate code that uses (does not use) the atomic quad word memory 16465 instructions. The `-mquad-memory-atomic' option requires use of 16466 64-bit mode. 16467 16468`-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 16469`-mfloat-gprs' 16470 This switch enables or disables the generation of floating-point 16471 operations on the general-purpose registers for architectures that 16472 support it. 16473 16474 The argument YES or SINGLE enables the use of single-precision 16475 floating-point operations. 16476 16477 The argument DOUBLE enables the use of single and double-precision 16478 floating-point operations. 16479 16480 The argument NO disables floating-point operations on the 16481 general-purpose registers. 16482 16483 This option is currently only available on the MPC854x. 16484 16485`-m32' 16486`-m64' 16487 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 16488 targets (including GNU/Linux). The 32-bit environment sets int, 16489 long and pointer to 32 bits and generates code that runs on any 16490 PowerPC variant. The 64-bit environment sets int to 32 bits and 16491 long and pointer to 64 bits, and generates code for PowerPC64, as 16492 for `-mpowerpc64'. 16493 16494`-mfull-toc' 16495`-mno-fp-in-toc' 16496`-mno-sum-in-toc' 16497`-mminimal-toc' 16498 Modify generation of the TOC (Table Of Contents), which is created 16499 for every executable file. The `-mfull-toc' option is selected by 16500 default. In that case, GCC allocates at least one TOC entry for 16501 each unique non-automatic variable reference in your program. GCC 16502 also places floating-point constants in the TOC. However, only 16503 16,384 entries are available in the TOC. 16504 16505 If you receive a linker error message that saying you have 16506 overflowed the available TOC space, you can reduce the amount of 16507 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 16508 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 16509 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 16510 code to calculate the sum of an address and a constant at run time 16511 instead of putting that sum into the TOC. You may specify one or 16512 both of these options. Each causes GCC to produce very slightly 16513 slower and larger code at the expense of conserving TOC space. 16514 16515 If you still run out of space in the TOC even when you specify 16516 both of these options, specify `-mminimal-toc' instead. This 16517 option causes GCC to make only one TOC entry for every file. When 16518 you specify this option, GCC produces code that is slower and 16519 larger but which uses extremely little TOC space. You may wish to 16520 use this option only on files that contain less 16521 frequently-executed code. 16522 16523`-maix64' 16524`-maix32' 16525 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 16526 64-bit `long' type, and the infrastructure needed to support them. 16527 Specifying `-maix64' implies `-mpowerpc64', while `-maix32' 16528 disables the 64-bit ABI and implies `-mno-powerpc64'. GCC 16529 defaults to `-maix32'. 16530 16531`-mxl-compat' 16532`-mno-xl-compat' 16533 Produce code that conforms more closely to IBM XL compiler 16534 semantics when using AIX-compatible ABI. Pass floating-point 16535 arguments to prototyped functions beyond the register save area 16536 (RSA) on the stack in addition to argument FPRs. Do not assume 16537 that most significant double in 128-bit long double value is 16538 properly rounded when comparing values and converting to double. 16539 Use XL symbol names for long double support routines. 16540 16541 The AIX calling convention was extended but not initially 16542 documented to handle an obscure K&R C case of calling a function 16543 that takes the address of its arguments with fewer arguments than 16544 declared. IBM XL compilers access floating-point arguments that 16545 do not fit in the RSA from the stack when a subroutine is compiled 16546 without optimization. Because always storing floating-point 16547 arguments on the stack is inefficient and rarely needed, this 16548 option is not enabled by default and only is necessary when 16549 calling subroutines compiled by IBM XL compilers without 16550 optimization. 16551 16552`-mpe' 16553 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 16554 application written to use message passing with special startup 16555 code to enable the application to run. The system must have PE 16556 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 16557 `specs' file must be overridden with the `-specs=' option to 16558 specify the appropriate directory location. The Parallel 16559 Environment does not support threads, so the `-mpe' option and the 16560 `-pthread' option are incompatible. 16561 16562`-malign-natural' 16563`-malign-power' 16564 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 16565 `-malign-natural' overrides the ABI-defined alignment of larger 16566 types, such as floating-point doubles, on their natural size-based 16567 boundary. The option `-malign-power' instructs GCC to follow the 16568 ABI-specified alignment rules. GCC defaults to the standard 16569 alignment defined in the ABI. 16570 16571 On 64-bit Darwin, natural alignment is the default, and 16572 `-malign-power' is not supported. 16573 16574`-msoft-float' 16575`-mhard-float' 16576 Generate code that does not use (uses) the floating-point register 16577 set. Software floating-point emulation is provided if you use the 16578 `-msoft-float' option, and pass the option to GCC when linking. 16579 16580`-msingle-float' 16581`-mdouble-float' 16582 Generate code for single- or double-precision floating-point 16583 operations. `-mdouble-float' implies `-msingle-float'. 16584 16585`-msimple-fpu' 16586 Do not generate `sqrt' and `div' instructions for hardware 16587 floating-point unit. 16588 16589`-mfpu=NAME' 16590 Specify type of floating-point unit. Valid values for NAME are 16591 `sp_lite' (equivalent to `-msingle-float -msimple-fpu'), `dp_lite' 16592 (equivalent to `-mdouble-float -msimple-fpu'), `sp_full' 16593 (equivalent to `-msingle-float'), and `dp_full' (equivalent to 16594 `-mdouble-float'). 16595 16596`-mxilinx-fpu' 16597 Perform optimizations for the floating-point unit on Xilinx PPC 16598 405/440. 16599 16600`-mmultiple' 16601`-mno-multiple' 16602 Generate code that uses (does not use) the load multiple word 16603 instructions and the store multiple word instructions. These 16604 instructions are generated by default on POWER systems, and not 16605 generated on PowerPC systems. Do not use `-mmultiple' on 16606 little-endian PowerPC systems, since those instructions do not 16607 work when the processor is in little-endian mode. The exceptions 16608 are PPC740 and PPC750 which permit these instructions in 16609 little-endian mode. 16610 16611`-mstring' 16612`-mno-string' 16613 Generate code that uses (does not use) the load string instructions 16614 and the store string word instructions to save multiple registers 16615 and do small block moves. These instructions are generated by 16616 default on POWER systems, and not generated on PowerPC systems. 16617 Do not use `-mstring' on little-endian PowerPC systems, since those 16618 instructions do not work when the processor is in little-endian 16619 mode. The exceptions are PPC740 and PPC750 which permit these 16620 instructions in little-endian mode. 16621 16622`-mupdate' 16623`-mno-update' 16624 Generate code that uses (does not use) the load or store 16625 instructions that update the base register to the address of the 16626 calculated memory location. These instructions are generated by 16627 default. If you use `-mno-update', there is a small window 16628 between the time that the stack pointer is updated and the address 16629 of the previous frame is stored, which means code that walks the 16630 stack frame across interrupts or signals may get corrupted data. 16631 16632`-mavoid-indexed-addresses' 16633`-mno-avoid-indexed-addresses' 16634 Generate code that tries to avoid (not avoid) the use of indexed 16635 load or store instructions. These instructions can incur a 16636 performance penalty on Power6 processors in certain situations, 16637 such as when stepping through large arrays that cross a 16M 16638 boundary. This option is enabled by default when targeting Power6 16639 and disabled otherwise. 16640 16641`-mfused-madd' 16642`-mno-fused-madd' 16643 Generate code that uses (does not use) the floating-point multiply 16644 and accumulate instructions. These instructions are generated by 16645 default if hardware floating point is used. The machine-dependent 16646 `-mfused-madd' option is now mapped to the machine-independent 16647 `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to 16648 `-ffp-contract=off'. 16649 16650`-mmulhw' 16651`-mno-mulhw' 16652 Generate code that uses (does not use) the half-word multiply and 16653 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 16654 processors. These instructions are generated by default when 16655 targeting those processors. 16656 16657`-mdlmzb' 16658`-mno-dlmzb' 16659 Generate code that uses (does not use) the string-search `dlmzb' 16660 instruction on the IBM 405, 440, 464 and 476 processors. This 16661 instruction is generated by default when targeting those 16662 processors. 16663 16664`-mno-bit-align' 16665`-mbit-align' 16666 On System V.4 and embedded PowerPC systems do not (do) force 16667 structures and unions that contain bit-fields to be aligned to the 16668 base type of the bit-field. 16669 16670 For example, by default a structure containing nothing but 8 16671 `unsigned' bit-fields of length 1 is aligned to a 4-byte boundary 16672 and has a size of 4 bytes. By using `-mno-bit-align', the 16673 structure is aligned to a 1-byte boundary and is 1 byte in size. 16674 16675`-mno-strict-align' 16676`-mstrict-align' 16677 On System V.4 and embedded PowerPC systems do not (do) assume that 16678 unaligned memory references are handled by the system. 16679 16680`-mrelocatable' 16681`-mno-relocatable' 16682 Generate code that allows (does not allow) a static executable to 16683 be relocated to a different address at run time. A simple embedded 16684 PowerPC system loader should relocate the entire contents of 16685 `.got2' and 4-byte locations listed in the `.fixup' section, a 16686 table of 32-bit addresses generated by this option. For this to 16687 work, all objects linked together must be compiled with 16688 `-mrelocatable' or `-mrelocatable-lib'. `-mrelocatable' code 16689 aligns the stack to an 8-byte boundary. 16690 16691`-mrelocatable-lib' 16692`-mno-relocatable-lib' 16693 Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup' 16694 section to allow static executables to be relocated at run time, 16695 but `-mrelocatable-lib' does not use the smaller stack alignment 16696 of `-mrelocatable'. Objects compiled with `-mrelocatable-lib' may 16697 be linked with objects compiled with any combination of the 16698 `-mrelocatable' options. 16699 16700`-mno-toc' 16701`-mtoc' 16702 On System V.4 and embedded PowerPC systems do not (do) assume that 16703 register 2 contains a pointer to a global area pointing to the 16704 addresses used in the program. 16705 16706`-mlittle' 16707`-mlittle-endian' 16708 On System V.4 and embedded PowerPC systems compile code for the 16709 processor in little-endian mode. The `-mlittle-endian' option is 16710 the same as `-mlittle'. 16711 16712`-mbig' 16713`-mbig-endian' 16714 On System V.4 and embedded PowerPC systems compile code for the 16715 processor in big-endian mode. The `-mbig-endian' option is the 16716 same as `-mbig'. 16717 16718`-mdynamic-no-pic' 16719 On Darwin and Mac OS X systems, compile code so that it is not 16720 relocatable, but that its external references are relocatable. The 16721 resulting code is suitable for applications, but not shared 16722 libraries. 16723 16724`-msingle-pic-base' 16725 Treat the register used for PIC addressing as read-only, rather 16726 than loading it in the prologue for each function. The runtime 16727 system is responsible for initializing this register with an 16728 appropriate value before execution begins. 16729 16730`-mprioritize-restricted-insns=PRIORITY' 16731 This option controls the priority that is assigned to 16732 dispatch-slot restricted instructions during the second scheduling 16733 pass. The argument PRIORITY takes the value `0', `1', or `2' to 16734 assign no, highest, or second-highest (respectively) priority to 16735 dispatch-slot restricted instructions. 16736 16737`-msched-costly-dep=DEPENDENCE_TYPE' 16738 This option controls which dependences are considered costly by 16739 the target during instruction scheduling. The argument 16740 DEPENDENCE_TYPE takes one of the following values: 16741 16742 `no' 16743 No dependence is costly. 16744 16745 `all' 16746 All dependences are costly. 16747 16748 `true_store_to_load' 16749 A true dependence from store to load is costly. 16750 16751 `store_to_load' 16752 Any dependence from store to load is costly. 16753 16754 NUMBER 16755 Any dependence for which the latency is greater than or equal 16756 to NUMBER is costly. 16757 16758`-minsert-sched-nops=SCHEME' 16759 This option controls which NOP insertion scheme is used during the 16760 second scheduling pass. The argument SCHEME takes one of the 16761 following values: 16762 16763 `no' 16764 Don't insert NOPs. 16765 16766 `pad' 16767 Pad with NOPs any dispatch group that has vacant issue slots, 16768 according to the scheduler's grouping. 16769 16770 `regroup_exact' 16771 Insert NOPs to force costly dependent insns into separate 16772 groups. Insert exactly as many NOPs as needed to force an 16773 insn to a new group, according to the estimated processor 16774 grouping. 16775 16776 NUMBER 16777 Insert NOPs to force costly dependent insns into separate 16778 groups. Insert NUMBER NOPs to force an insn to a new group. 16779 16780`-mcall-sysv' 16781 On System V.4 and embedded PowerPC systems compile code using 16782 calling conventions that adhere to the March 1995 draft of the 16783 System V Application Binary Interface, PowerPC processor 16784 supplement. This is the default unless you configured GCC using 16785 `powerpc-*-eabiaix'. 16786 16787`-mcall-sysv-eabi' 16788`-mcall-eabi' 16789 Specify both `-mcall-sysv' and `-meabi' options. 16790 16791`-mcall-sysv-noeabi' 16792 Specify both `-mcall-sysv' and `-mno-eabi' options. 16793 16794`-mcall-aixdesc' 16795 On System V.4 and embedded PowerPC systems compile code for the AIX 16796 operating system. 16797 16798`-mcall-linux' 16799 On System V.4 and embedded PowerPC systems compile code for the 16800 Linux-based GNU system. 16801 16802`-mcall-freebsd' 16803 On System V.4 and embedded PowerPC systems compile code for the 16804 FreeBSD operating system. 16805 16806`-mcall-netbsd' 16807 On System V.4 and embedded PowerPC systems compile code for the 16808 NetBSD operating system. 16809 16810`-mcall-openbsd' 16811 On System V.4 and embedded PowerPC systems compile code for the 16812 OpenBSD operating system. 16813 16814`-maix-struct-return' 16815 Return all structures in memory (as specified by the AIX ABI). 16816 16817`-msvr4-struct-return' 16818 Return structures smaller than 8 bytes in registers (as specified 16819 by the SVR4 ABI). 16820 16821`-mabi=ABI-TYPE' 16822 Extend the current ABI with a particular extension, or remove such 16823 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 16824 IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2. 16825 16826`-mabi=spe' 16827 Extend the current ABI with SPE ABI extensions. This does not 16828 change the default ABI, instead it adds the SPE ABI extensions to 16829 the current ABI. 16830 16831`-mabi=no-spe' 16832 Disable Book-E SPE ABI extensions for the current ABI. 16833 16834`-mabi=ibmlongdouble' 16835 Change the current ABI to use IBM extended-precision long double. 16836 This is a PowerPC 32-bit SYSV ABI option. 16837 16838`-mabi=ieeelongdouble' 16839 Change the current ABI to use IEEE extended-precision long double. 16840 This is a PowerPC 32-bit Linux ABI option. 16841 16842`-mabi=elfv1' 16843 Change the current ABI to use the ELFv1 ABI. This is the default 16844 ABI for big-endian PowerPC 64-bit Linux. Overriding the default 16845 ABI requires special system support and is likely to fail in 16846 spectacular ways. 16847 16848`-mabi=elfv2' 16849 Change the current ABI to use the ELFv2 ABI. This is the default 16850 ABI for little-endian PowerPC 64-bit Linux. Overriding the 16851 default ABI requires special system support and is likely to fail 16852 in spectacular ways. 16853 16854`-mprototype' 16855`-mno-prototype' 16856 On System V.4 and embedded PowerPC systems assume that all calls to 16857 variable argument functions are properly prototyped. Otherwise, 16858 the compiler must insert an instruction before every 16859 non-prototyped call to set or clear bit 6 of the condition code 16860 register (CR) to indicate whether floating-point values are passed 16861 in the floating-point registers in case the function takes 16862 variable arguments. With `-mprototype', only calls to prototyped 16863 variable argument functions set or clear the bit. 16864 16865`-msim' 16866 On embedded PowerPC systems, assume that the startup module is 16867 called `sim-crt0.o' and that the standard C libraries are 16868 `libsim.a' and `libc.a'. This is the default for 16869 `powerpc-*-eabisim' configurations. 16870 16871`-mmvme' 16872 On embedded PowerPC systems, assume that the startup module is 16873 called `crt0.o' and the standard C libraries are `libmvme.a' and 16874 `libc.a'. 16875 16876`-mads' 16877 On embedded PowerPC systems, assume that the startup module is 16878 called `crt0.o' and the standard C libraries are `libads.a' and 16879 `libc.a'. 16880 16881`-myellowknife' 16882 On embedded PowerPC systems, assume that the startup module is 16883 called `crt0.o' and the standard C libraries are `libyk.a' and 16884 `libc.a'. 16885 16886`-mvxworks' 16887 On System V.4 and embedded PowerPC systems, specify that you are 16888 compiling for a VxWorks system. 16889 16890`-memb' 16891 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 16892 header to indicate that `eabi' extended relocations are used. 16893 16894`-meabi' 16895`-mno-eabi' 16896 On System V.4 and embedded PowerPC systems do (do not) adhere to 16897 the Embedded Applications Binary Interface (EABI), which is a set 16898 of modifications to the System V.4 specifications. Selecting 16899 `-meabi' means that the stack is aligned to an 8-byte boundary, a 16900 function `__eabi' is called from `main' to set up the EABI 16901 environment, and the `-msdata' option can use both `r2' and `r13' 16902 to point to two separate small data areas. Selecting `-mno-eabi' 16903 means that the stack is aligned to a 16-byte boundary, no EABI 16904 initialization function is called from `main', and the `-msdata' 16905 option only uses `r13' to point to a single small data area. The 16906 `-meabi' option is on by default if you configured GCC using one 16907 of the `powerpc*-*-eabi*' options. 16908 16909`-msdata=eabi' 16910 On System V.4 and embedded PowerPC systems, put small initialized 16911 `const' global and static data in the `.sdata2' section, which is 16912 pointed to by register `r2'. Put small initialized non-`const' 16913 global and static data in the `.sdata' section, which is pointed 16914 to by register `r13'. Put small uninitialized global and static 16915 data in the `.sbss' section, which is adjacent to the `.sdata' 16916 section. The `-msdata=eabi' option is incompatible with the 16917 `-mrelocatable' option. The `-msdata=eabi' option also sets the 16918 `-memb' option. 16919 16920`-msdata=sysv' 16921 On System V.4 and embedded PowerPC systems, put small global and 16922 static data in the `.sdata' section, which is pointed to by 16923 register `r13'. Put small uninitialized global and static data in 16924 the `.sbss' section, which is adjacent to the `.sdata' section. 16925 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 16926 option. 16927 16928`-msdata=default' 16929`-msdata' 16930 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 16931 compile code the same as `-msdata=eabi', otherwise compile code the 16932 same as `-msdata=sysv'. 16933 16934`-msdata=data' 16935 On System V.4 and embedded PowerPC systems, put small global data 16936 in the `.sdata' section. Put small uninitialized global data in 16937 the `.sbss' section. Do not use register `r13' to address small 16938 data however. This is the default behavior unless other `-msdata' 16939 options are used. 16940 16941`-msdata=none' 16942`-mno-sdata' 16943 On embedded PowerPC systems, put all initialized global and static 16944 data in the `.data' section, and all uninitialized data in the 16945 `.bss' section. 16946 16947`-mblock-move-inline-limit=NUM' 16948 Inline all block moves (such as calls to `memcpy' or structure 16949 copies) less than or equal to NUM bytes. The minimum value for 16950 NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. 16951 The default value is target-specific. 16952 16953`-G NUM' 16954 On embedded PowerPC systems, put global and static items less than 16955 or equal to NUM bytes into the small data or BSS sections instead 16956 of the normal data or BSS section. By default, NUM is 8. The `-G 16957 NUM' switch is also passed to the linker. All modules should be 16958 compiled with the same `-G NUM' value. 16959 16960`-mregnames' 16961`-mno-regnames' 16962 On System V.4 and embedded PowerPC systems do (do not) emit 16963 register names in the assembly language output using symbolic 16964 forms. 16965 16966`-mlongcall' 16967`-mno-longcall' 16968 By default assume that all calls are far away so that a longer and 16969 more expensive calling sequence is required. This is required for 16970 calls farther than 32 megabytes (33,554,432 bytes) from the 16971 current location. A short call is generated if the compiler knows 16972 the call cannot be that far away. This setting can be overridden 16973 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 16974 16975 Some linkers are capable of detecting out-of-range calls and 16976 generating glue code on the fly. On these systems, long calls are 16977 unnecessary and generate slower code. As of this writing, the AIX 16978 linker can do this, as can the GNU linker for PowerPC/64. It is 16979 planned to add this feature to the GNU linker for 32-bit PowerPC 16980 systems as well. 16981 16982 On Darwin/PPC systems, `#pragma longcall' generates `jbsr callee, 16983 L42', plus a "branch island" (glue code). The two target 16984 addresses represent the callee and the branch island. The 16985 Darwin/PPC linker prefers the first address and generates a `bl 16986 callee' if the PPC `bl' instruction reaches the callee directly; 16987 otherwise, the linker generates `bl L42' to call the branch 16988 island. The branch island is appended to the body of the calling 16989 function; it computes the full 32-bit address of the callee and 16990 jumps to it. 16991 16992 On Mach-O (Darwin) systems, this option directs the compiler emit 16993 to the glue for every direct call, and the Darwin linker decides 16994 whether to use or discard it. 16995 16996 In the future, GCC may ignore all longcall specifications when the 16997 linker is known to generate glue. 16998 16999`-mtls-markers' 17000`-mno-tls-markers' 17001 Mark (do not mark) calls to `__tls_get_addr' with a relocation 17002 specifying the function argument. The relocation allows the 17003 linker to reliably associate function call with argument setup 17004 instructions for TLS optimization, which in turn allows GCC to 17005 better schedule the sequence. 17006 17007`-pthread' 17008 Adds support for multithreading with the "pthreads" library. This 17009 option sets flags for both the preprocessor and linker. 17010 17011`-mrecip' 17012`-mno-recip' 17013 This option enables use of the reciprocal estimate and reciprocal 17014 square root estimate instructions with additional Newton-Raphson 17015 steps to increase precision instead of doing a divide or square 17016 root and divide for floating-point arguments. You should use the 17017 `-ffast-math' option when using `-mrecip' (or at least 17018 `-funsafe-math-optimizations', `-finite-math-only', 17019 `-freciprocal-math' and `-fno-trapping-math'). Note that while 17020 the throughput of the sequence is generally higher than the 17021 throughput of the non-reciprocal instruction, the precision of the 17022 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 17023 equals 0.99999994) for reciprocal square roots. 17024 17025`-mrecip=OPT' 17026 This option controls which reciprocal estimate instructions may be 17027 used. OPT is a comma-separated list of options, which may be 17028 preceded by a `!' to invert the option: `all': enable all estimate 17029 instructions, `default': enable the default instructions, 17030 equivalent to `-mrecip', `none': disable all estimate 17031 instructions, equivalent to `-mno-recip'; `div': enable the 17032 reciprocal approximation instructions for both single and double 17033 precision; `divf': enable the single-precision reciprocal 17034 approximation instructions; `divd': enable the double-precision 17035 reciprocal approximation instructions; `rsqrt': enable the 17036 reciprocal square root approximation instructions for both single 17037 and double precision; `rsqrtf': enable the single-precision 17038 reciprocal square root approximation instructions; `rsqrtd': 17039 enable the double-precision reciprocal square root approximation 17040 instructions; 17041 17042 So, for example, `-mrecip=all,!rsqrtd' enables all of the 17043 reciprocal estimate instructions, except for the `FRSQRTE', 17044 `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the 17045 double-precision reciprocal square root calculations. 17046 17047`-mrecip-precision' 17048`-mno-recip-precision' 17049 Assume (do not assume) that the reciprocal estimate instructions 17050 provide higher-precision estimates than is mandated by the PowerPC 17051 ABI. Selecting `-mcpu=power6', `-mcpu=power7' or `-mcpu=power8' 17052 automatically selects `-mrecip-precision'. The double-precision 17053 square root estimate instructions are not generated by default on 17054 low-precision machines, since they do not provide an estimate that 17055 converges after three steps. 17056 17057`-mveclibabi=TYPE' 17058 Specifies the ABI type to use for vectorizing intrinsics using an 17059 external library. The only type supported at present is `mass', 17060 which specifies to use IBM's Mathematical Acceleration Subsystem 17061 (MASS) libraries for vectorizing intrinsics using external 17062 libraries. GCC currently emits calls to `acosd2', `acosf4', 17063 `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4', 17064 `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4', 17065 `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4', 17066 `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2', 17067 `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2', 17068 `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2', 17069 `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4', 17070 `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4', 17071 `tanhd2', and `tanhf4' when generating code for power7. Both 17072 `-ftree-vectorize' and `-funsafe-math-optimizations' must also be 17073 enabled. The MASS libraries must be specified at link time. 17074 17075`-mfriz' 17076`-mno-friz' 17077 Generate (do not generate) the `friz' instruction when the 17078 `-funsafe-math-optimizations' option is used to optimize rounding 17079 of floating-point values to 64-bit integer and back to floating 17080 point. The `friz' instruction does not return the same value if 17081 the floating-point number is too large to fit in an integer. 17082 17083`-mpointers-to-nested-functions' 17084`-mno-pointers-to-nested-functions' 17085 Generate (do not generate) code to load up the static chain 17086 register (R11) when calling through a pointer on AIX and 64-bit 17087 Linux systems where a function pointer points to a 3-word 17088 descriptor giving the function address, TOC value to be loaded in 17089 register R2, and static chain value to be loaded in register R11. 17090 The `-mpointers-to-nested-functions' is on by default. You cannot 17091 call through pointers to nested functions or pointers to functions 17092 compiled in other languages that use the static chain if you use 17093 the `-mno-pointers-to-nested-functions'. 17094 17095`-msave-toc-indirect' 17096`-mno-save-toc-indirect' 17097 Generate (do not generate) code to save the TOC value in the 17098 reserved stack location in the function prologue if the function 17099 calls through a pointer on AIX and 64-bit Linux systems. If the 17100 TOC value is not saved in the prologue, it is saved just before 17101 the call through the pointer. The `-mno-save-toc-indirect' option 17102 is the default. 17103 17104`-mcompat-align-parm' 17105`-mno-compat-align-parm' 17106 Generate (do not generate) code to pass structure parameters with a 17107 maximum alignment of 64 bits, for compatibility with older versions 17108 of GCC. 17109 17110 Older versions of GCC (prior to 4.9.0) incorrectly did not align a 17111 structure parameter on a 128-bit boundary when that structure 17112 contained a member requiring 128-bit alignment. This is corrected 17113 in more recent versions of GCC. This option may be used to 17114 generate code that is compatible with functions compiled with 17115 older versions of GCC. 17116 17117 In this version of the compiler, the `-mcompat-align-parm' is the 17118 default, except when using the Linux ELFv2 ABI. 17119 17120 17121File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 17122 171233.17.35 RX Options 17124------------------ 17125 17126These command-line options are defined for RX targets: 17127 17128`-m64bit-doubles' 17129`-m32bit-doubles' 17130 Make the `double' data type be 64 bits (`-m64bit-doubles') or 32 17131 bits (`-m32bit-doubles') in size. The default is 17132 `-m32bit-doubles'. _Note_ RX floating-point hardware only works 17133 on 32-bit values, which is why the default is `-m32bit-doubles'. 17134 17135`-fpu' 17136`-nofpu' 17137 Enables (`-fpu') or disables (`-nofpu') the use of RX 17138 floating-point hardware. The default is enabled for the RX600 17139 series and disabled for the RX200 series. 17140 17141 Floating-point instructions are only generated for 32-bit 17142 floating-point values, however, so the FPU hardware is not used 17143 for doubles if the `-m64bit-doubles' option is used. 17144 17145 _Note_ If the `-fpu' option is enabled then 17146 `-funsafe-math-optimizations' is also enabled automatically. This 17147 is because the RX FPU instructions are themselves unsafe. 17148 17149`-mcpu=NAME' 17150 Selects the type of RX CPU to be targeted. Currently three types 17151 are supported, the generic RX600 and RX200 series hardware and the 17152 specific RX610 CPU. The default is RX600. 17153 17154 The only difference between RX600 and RX610 is that the RX610 does 17155 not support the `MVTIPL' instruction. 17156 17157 The RX200 series does not have a hardware floating-point unit and 17158 so `-nofpu' is enabled by default when this type is selected. 17159 17160`-mbig-endian-data' 17161`-mlittle-endian-data' 17162 Store data (but not code) in the big-endian format. The default is 17163 `-mlittle-endian-data', i.e. to store data in the little-endian 17164 format. 17165 17166`-msmall-data-limit=N' 17167 Specifies the maximum size in bytes of global and static variables 17168 which can be placed into the small data area. Using the small data 17169 area can lead to smaller and faster code, but the size of area is 17170 limited and it is up to the programmer to ensure that the area does 17171 not overflow. Also when the small data area is used one of the 17172 RX's registers (usually `r13') is reserved for use pointing to this 17173 area, so it is no longer available for use by the compiler. This 17174 could result in slower and/or larger code if variables are pushed 17175 onto the stack instead of being held in this register. 17176 17177 Note, common variables (variables that have not been initialized) 17178 and constants are not placed into the small data area as they are 17179 assigned to other sections in the output executable. 17180 17181 The default value is zero, which disables this feature. Note, this 17182 feature is not enabled by default with higher optimization levels 17183 (`-O2' etc) because of the potentially detrimental effects of 17184 reserving a register. It is up to the programmer to experiment and 17185 discover whether this feature is of benefit to their program. See 17186 the description of the `-mpid' option for a description of how the 17187 actual register to hold the small data area pointer is chosen. 17188 17189`-msim' 17190`-mno-sim' 17191 Use the simulator runtime. The default is to use the libgloss 17192 board-specific runtime. 17193 17194`-mas100-syntax' 17195`-mno-as100-syntax' 17196 When generating assembler output use a syntax that is compatible 17197 with Renesas's AS100 assembler. This syntax can also be handled 17198 by the GAS assembler, but it has some restrictions so it is not 17199 generated by default. 17200 17201`-mmax-constant-size=N' 17202 Specifies the maximum size, in bytes, of a constant that can be 17203 used as an operand in a RX instruction. Although the RX 17204 instruction set does allow constants of up to 4 bytes in length to 17205 be used in instructions, a longer value equates to a longer 17206 instruction. Thus in some circumstances it can be beneficial to 17207 restrict the size of constants that are used in instructions. 17208 Constants that are too big are instead placed into a constant pool 17209 and referenced via register indirection. 17210 17211 The value N can be between 0 and 4. A value of 0 (the default) or 17212 4 means that constants of any size are allowed. 17213 17214`-mrelax' 17215 Enable linker relaxation. Linker relaxation is a process whereby 17216 the linker attempts to reduce the size of a program by finding 17217 shorter versions of various instructions. Disabled by default. 17218 17219`-mint-register=N' 17220 Specify the number of registers to reserve for fast interrupt 17221 handler functions. The value N can be between 0 and 4. A value 17222 of 1 means that register `r13' is reserved for the exclusive use 17223 of fast interrupt handlers. A value of 2 reserves `r13' and 17224 `r12'. A value of 3 reserves `r13', `r12' and `r11', and a value 17225 of 4 reserves `r13' through `r10'. A value of 0, the default, 17226 does not reserve any registers. 17227 17228`-msave-acc-in-interrupts' 17229 Specifies that interrupt handler functions should preserve the 17230 accumulator register. This is only necessary if normal code might 17231 use the accumulator register, for example because it performs 17232 64-bit multiplications. The default is to ignore the accumulator 17233 as this makes the interrupt handlers faster. 17234 17235`-mpid' 17236`-mno-pid' 17237 Enables the generation of position independent data. When enabled 17238 any access to constant data is done via an offset from a base 17239 address held in a register. This allows the location of constant 17240 data to be determined at run time without requiring the executable 17241 to be relocated, which is a benefit to embedded applications with 17242 tight memory constraints. Data that can be modified is not 17243 affected by this option. 17244 17245 Note, using this feature reserves a register, usually `r13', for 17246 the constant data base address. This can result in slower and/or 17247 larger code, especially in complicated functions. 17248 17249 The actual register chosen to hold the constant data base address 17250 depends upon whether the `-msmall-data-limit' and/or the 17251 `-mint-register' command-line options are enabled. Starting with 17252 register `r13' and proceeding downwards, registers are allocated 17253 first to satisfy the requirements of `-mint-register', then 17254 `-mpid' and finally `-msmall-data-limit'. Thus it is possible for 17255 the small data area register to be `r8' if both `-mint-register=4' 17256 and `-mpid' are specified on the command line. 17257 17258 By default this feature is not enabled. The default can be 17259 restored via the `-mno-pid' command-line option. 17260 17261`-mno-warn-multiple-fast-interrupts' 17262`-mwarn-multiple-fast-interrupts' 17263 Prevents GCC from issuing a warning message if it finds more than 17264 one fast interrupt handler when it is compiling a file. The 17265 default is to issue a warning for each extra fast interrupt 17266 handler found, as the RX only supports one such interrupt. 17267 17268 17269 _Note:_ The generic GCC command-line option `-ffixed-REG' has special 17270significance to the RX port when used with the `interrupt' function 17271attribute. This attribute indicates a function intended to process 17272fast interrupts. GCC ensures that it only uses the registers `r10', 17273`r11', `r12' and/or `r13' and only provided that the normal use of the 17274corresponding registers have been restricted via the `-ffixed-REG' or 17275`-mint-register' command-line options. 17276 17277 17278File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options 17279 172803.17.36 S/390 and zSeries Options 17281--------------------------------- 17282 17283These are the `-m' options defined for the S/390 and zSeries 17284architecture. 17285 17286`-mhard-float' 17287`-msoft-float' 17288 Use (do not use) the hardware floating-point instructions and 17289 registers for floating-point operations. When `-msoft-float' is 17290 specified, functions in `libgcc.a' are used to perform 17291 floating-point operations. When `-mhard-float' is specified, the 17292 compiler generates IEEE floating-point instructions. This is the 17293 default. 17294 17295`-mhard-dfp' 17296`-mno-hard-dfp' 17297 Use (do not use) the hardware decimal-floating-point instructions 17298 for decimal-floating-point operations. When `-mno-hard-dfp' is 17299 specified, functions in `libgcc.a' are used to perform 17300 decimal-floating-point operations. When `-mhard-dfp' is 17301 specified, the compiler generates decimal-floating-point hardware 17302 instructions. This is the default for `-march=z9-ec' or higher. 17303 17304`-mlong-double-64' 17305`-mlong-double-128' 17306 These switches control the size of `long double' type. A size of 17307 64 bits makes the `long double' type equivalent to the `double' 17308 type. This is the default. 17309 17310`-mbackchain' 17311`-mno-backchain' 17312 Store (do not store) the address of the caller's frame as 17313 backchain pointer into the callee's stack frame. A backchain may 17314 be needed to allow debugging using tools that do not understand 17315 DWARF 2 call frame information. When `-mno-packed-stack' is in 17316 effect, the backchain pointer is stored at the bottom of the stack 17317 frame; when `-mpacked-stack' is in effect, the backchain is placed 17318 into the topmost word of the 96/160 byte register save area. 17319 17320 In general, code compiled with `-mbackchain' is call-compatible 17321 with code compiled with `-mmo-backchain'; however, use of the 17322 backchain for debugging purposes usually requires that the whole 17323 binary is built with `-mbackchain'. Note that the combination of 17324 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 17325 supported. In order to build a linux kernel use `-msoft-float'. 17326 17327 The default is to not maintain the backchain. 17328 17329`-mpacked-stack' 17330`-mno-packed-stack' 17331 Use (do not use) the packed stack layout. When 17332 `-mno-packed-stack' is specified, the compiler uses the all fields 17333 of the 96/160 byte register save area only for their default 17334 purpose; unused fields still take up stack space. When 17335 `-mpacked-stack' is specified, register save slots are densely 17336 packed at the top of the register save area; unused space is 17337 reused for other purposes, allowing for more efficient use of the 17338 available stack space. However, when `-mbackchain' is also in 17339 effect, the topmost word of the save area is always used to store 17340 the backchain, and the return address register is always saved two 17341 words below the backchain. 17342 17343 As long as the stack frame backchain is not used, code generated 17344 with `-mpacked-stack' is call-compatible with code generated with 17345 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 17346 for S/390 or zSeries generated code that uses the stack frame 17347 backchain at run time, not just for debugging purposes. Such code 17348 is not call-compatible with code compiled with `-mpacked-stack'. 17349 Also, note that the combination of `-mbackchain', `-mpacked-stack' 17350 and `-mhard-float' is not supported. In order to build a linux 17351 kernel use `-msoft-float'. 17352 17353 The default is to not use the packed stack layout. 17354 17355`-msmall-exec' 17356`-mno-small-exec' 17357 Generate (or do not generate) code using the `bras' instruction to 17358 do subroutine calls. This only works reliably if the total 17359 executable size does not exceed 64k. The default is to use the 17360 `basr' instruction instead, which does not have this limitation. 17361 17362`-m64' 17363`-m31' 17364 When `-m31' is specified, generate code compliant to the GNU/Linux 17365 for S/390 ABI. When `-m64' is specified, generate code compliant 17366 to the GNU/Linux for zSeries ABI. This allows GCC in particular 17367 to generate 64-bit instructions. For the `s390' targets, the 17368 default is `-m31', while the `s390x' targets default to `-m64'. 17369 17370`-mzarch' 17371`-mesa' 17372 When `-mzarch' is specified, generate code using the instructions 17373 available on z/Architecture. When `-mesa' is specified, generate 17374 code using the instructions available on ESA/390. Note that 17375 `-mesa' is not possible with `-m64'. When generating code 17376 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 17377 When generating code compliant to the GNU/Linux for zSeries ABI, 17378 the default is `-mzarch'. 17379 17380`-mmvcle' 17381`-mno-mvcle' 17382 Generate (or do not generate) code using the `mvcle' instruction 17383 to perform block moves. When `-mno-mvcle' is specified, use a 17384 `mvc' loop instead. This is the default unless optimizing for 17385 size. 17386 17387`-mdebug' 17388`-mno-debug' 17389 Print (or do not print) additional debug information when 17390 compiling. The default is to not print debug information. 17391 17392`-march=CPU-TYPE' 17393 Generate code that runs on CPU-TYPE, which is the name of a system 17394 representing a certain processor type. Possible values for 17395 CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec', `z10', 17396 `z196', and `zEC12'. When generating code using the instructions 17397 available on z/Architecture, the default is `-march=z900'. 17398 Otherwise, the default is `-march=g5'. 17399 17400`-mtune=CPU-TYPE' 17401 Tune to CPU-TYPE everything applicable about the generated code, 17402 except for the ABI and the set of available instructions. The 17403 list of CPU-TYPE values is the same as for `-march'. The default 17404 is the value used for `-march'. 17405 17406`-mtpf-trace' 17407`-mno-tpf-trace' 17408 Generate code that adds (does not add) in TPF OS specific branches 17409 to trace routines in the operating system. This option is off by 17410 default, even when compiling for the TPF OS. 17411 17412`-mfused-madd' 17413`-mno-fused-madd' 17414 Generate code that uses (does not use) the floating-point multiply 17415 and accumulate instructions. These instructions are generated by 17416 default if hardware floating point is used. 17417 17418`-mwarn-framesize=FRAMESIZE' 17419 Emit a warning if the current function exceeds the given frame 17420 size. Because this is a compile-time check it doesn't need to be 17421 a real problem when the program runs. It is intended to identify 17422 functions that most probably cause a stack overflow. It is useful 17423 to be used in an environment with limited stack size e.g. the 17424 linux kernel. 17425 17426`-mwarn-dynamicstack' 17427 Emit a warning if the function calls `alloca' or uses 17428 dynamically-sized arrays. This is generally a bad idea with a 17429 limited stack size. 17430 17431`-mstack-guard=STACK-GUARD' 17432`-mstack-size=STACK-SIZE' 17433 If these options are provided the S/390 back end emits additional 17434 instructions in the function prologue that trigger a trap if the 17435 stack size is STACK-GUARD bytes above the STACK-SIZE (remember 17436 that the stack on S/390 grows downward). If the STACK-GUARD 17437 option is omitted the smallest power of 2 larger than the frame 17438 size of the compiled function is chosen. These options are 17439 intended to be used to help debugging stack overflow problems. 17440 The additionally emitted code causes only little overhead and 17441 hence can also be used in production-like systems without greater 17442 performance degradation. The given values have to be exact powers 17443 of 2 and STACK-SIZE has to be greater than STACK-GUARD without 17444 exceeding 64k. In order to be efficient the extra code makes the 17445 assumption that the stack starts at an address aligned to the 17446 value given by STACK-SIZE. The STACK-GUARD option can only be 17447 used in conjunction with STACK-SIZE. 17448 17449`-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS' 17450 If the hotpatch option is enabled, a "hot-patching" function 17451 prologue is generated for all functions in the compilation unit. 17452 The funtion label is prepended with the given number of two-byte 17453 NOP instructions (PRE-HALFWORDS, maximum 1000000). After the 17454 label, 2 * POST-HALFWORDS bytes are appended, using the largest 17455 NOP like instructions the architecture allows (maximum 1000000). 17456 17457 If both arguments are zero, hotpatching is disabled. 17458 17459 This option can be overridden for individual functions with the 17460 `hotpatch' attribute. 17461 17462 17463File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 17464 174653.17.37 Score Options 17466--------------------- 17467 17468These options are defined for Score implementations: 17469 17470`-meb' 17471 Compile code for big-endian mode. This is the default. 17472 17473`-mel' 17474 Compile code for little-endian mode. 17475 17476`-mnhwloop' 17477 Disable generation of `bcnz' instructions. 17478 17479`-muls' 17480 Enable generation of unaligned load and store instructions. 17481 17482`-mmac' 17483 Enable the use of multiply-accumulate instructions. Disabled by 17484 default. 17485 17486`-mscore5' 17487 Specify the SCORE5 as the target architecture. 17488 17489`-mscore5u' 17490 Specify the SCORE5U of the target architecture. 17491 17492`-mscore7' 17493 Specify the SCORE7 as the target architecture. This is the default. 17494 17495`-mscore7d' 17496 Specify the SCORE7D as the target architecture. 17497 17498 17499File: gcc.info, Node: SH Options, Next: Solaris 2 Options, Prev: Score Options, Up: Submodel Options 17500 175013.17.38 SH Options 17502------------------ 17503 17504These `-m' options are defined for the SH implementations: 17505 17506`-m1' 17507 Generate code for the SH1. 17508 17509`-m2' 17510 Generate code for the SH2. 17511 17512`-m2e' 17513 Generate code for the SH2e. 17514 17515`-m2a-nofpu' 17516 Generate code for the SH2a without FPU, or for a SH2a-FPU in such 17517 a way that the floating-point unit is not used. 17518 17519`-m2a-single-only' 17520 Generate code for the SH2a-FPU, in such a way that no 17521 double-precision floating-point operations are used. 17522 17523`-m2a-single' 17524 Generate code for the SH2a-FPU assuming the floating-point unit is 17525 in single-precision mode by default. 17526 17527`-m2a' 17528 Generate code for the SH2a-FPU assuming the floating-point unit is 17529 in double-precision mode by default. 17530 17531`-m3' 17532 Generate code for the SH3. 17533 17534`-m3e' 17535 Generate code for the SH3e. 17536 17537`-m4-nofpu' 17538 Generate code for the SH4 without a floating-point unit. 17539 17540`-m4-single-only' 17541 Generate code for the SH4 with a floating-point unit that only 17542 supports single-precision arithmetic. 17543 17544`-m4-single' 17545 Generate code for the SH4 assuming the floating-point unit is in 17546 single-precision mode by default. 17547 17548`-m4' 17549 Generate code for the SH4. 17550 17551`-m4-100' 17552 Generate code for SH4-100. 17553 17554`-m4-100-nofpu' 17555 Generate code for SH4-100 in such a way that the floating-point 17556 unit is not used. 17557 17558`-m4-100-single' 17559 Generate code for SH4-100 assuming the floating-point unit is in 17560 single-precision mode by default. 17561 17562`-m4-100-single-only' 17563 Generate code for SH4-100 in such a way that no double-precision 17564 floating-point operations are used. 17565 17566`-m4-200' 17567 Generate code for SH4-200. 17568 17569`-m4-200-nofpu' 17570 Generate code for SH4-200 without in such a way that the 17571 floating-point unit is not used. 17572 17573`-m4-200-single' 17574 Generate code for SH4-200 assuming the floating-point unit is in 17575 single-precision mode by default. 17576 17577`-m4-200-single-only' 17578 Generate code for SH4-200 in such a way that no double-precision 17579 floating-point operations are used. 17580 17581`-m4-300' 17582 Generate code for SH4-300. 17583 17584`-m4-300-nofpu' 17585 Generate code for SH4-300 without in such a way that the 17586 floating-point unit is not used. 17587 17588`-m4-300-single' 17589 Generate code for SH4-300 in such a way that no double-precision 17590 floating-point operations are used. 17591 17592`-m4-300-single-only' 17593 Generate code for SH4-300 in such a way that no double-precision 17594 floating-point operations are used. 17595 17596`-m4-340' 17597 Generate code for SH4-340 (no MMU, no FPU). 17598 17599`-m4-500' 17600 Generate code for SH4-500 (no FPU). Passes `-isa=sh4-nofpu' to the 17601 assembler. 17602 17603`-m4a-nofpu' 17604 Generate code for the SH4al-dsp, or for a SH4a in such a way that 17605 the floating-point unit is not used. 17606 17607`-m4a-single-only' 17608 Generate code for the SH4a, in such a way that no double-precision 17609 floating-point operations are used. 17610 17611`-m4a-single' 17612 Generate code for the SH4a assuming the floating-point unit is in 17613 single-precision mode by default. 17614 17615`-m4a' 17616 Generate code for the SH4a. 17617 17618`-m4al' 17619 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 17620 the assembler. GCC doesn't generate any DSP instructions at the 17621 moment. 17622 17623`-m5-32media' 17624 Generate 32-bit code for SHmedia. 17625 17626`-m5-32media-nofpu' 17627 Generate 32-bit code for SHmedia in such a way that the 17628 floating-point unit is not used. 17629 17630`-m5-64media' 17631 Generate 64-bit code for SHmedia. 17632 17633`-m5-64media-nofpu' 17634 Generate 64-bit code for SHmedia in such a way that the 17635 floating-point unit is not used. 17636 17637`-m5-compact' 17638 Generate code for SHcompact. 17639 17640`-m5-compact-nofpu' 17641 Generate code for SHcompact in such a way that the floating-point 17642 unit is not used. 17643 17644`-mb' 17645 Compile code for the processor in big-endian mode. 17646 17647`-ml' 17648 Compile code for the processor in little-endian mode. 17649 17650`-mdalign' 17651 Align doubles at 64-bit boundaries. Note that this changes the 17652 calling conventions, and thus some functions from the standard C 17653 library do not work unless you recompile it first with `-mdalign'. 17654 17655`-mrelax' 17656 Shorten some address references at link time, when possible; uses 17657 the linker option `-relax'. 17658 17659`-mbigtable' 17660 Use 32-bit offsets in `switch' tables. The default is to use 17661 16-bit offsets. 17662 17663`-mbitops' 17664 Enable the use of bit manipulation instructions on SH2A. 17665 17666`-mfmovd' 17667 Enable the use of the instruction `fmovd'. Check `-mdalign' for 17668 alignment constraints. 17669 17670`-mrenesas' 17671 Comply with the calling conventions defined by Renesas. 17672 17673`-mno-renesas' 17674 Comply with the calling conventions defined for GCC before the 17675 Renesas conventions were available. This option is the default 17676 for all targets of the SH toolchain. 17677 17678`-mnomacsave' 17679 Mark the `MAC' register as call-clobbered, even if `-mrenesas' is 17680 given. 17681 17682`-mieee' 17683`-mno-ieee' 17684 Control the IEEE compliance of floating-point comparisons, which 17685 affects the handling of cases where the result of a comparison is 17686 unordered. By default `-mieee' is implicitly enabled. If 17687 `-ffinite-math-only' is enabled `-mno-ieee' is implicitly set, 17688 which results in faster floating-point greater-equal and 17689 less-equal comparisons. The implcit settings can be overridden by 17690 specifying either `-mieee' or `-mno-ieee'. 17691 17692`-minline-ic_invalidate' 17693 Inline code to invalidate instruction cache entries after setting 17694 up nested function trampolines. This option has no effect if 17695 `-musermode' is in effect and the selected code generation option 17696 (e.g. `-m4') does not allow the use of the `icbi' instruction. If 17697 the selected code generation option does not allow the use of the 17698 `icbi' instruction, and `-musermode' is not in effect, the inlined 17699 code manipulates the instruction cache address array directly with 17700 an associative write. This not only requires privileged mode at 17701 run time, but it also fails if the cache line had been mapped via 17702 the TLB and has become unmapped. 17703 17704`-misize' 17705 Dump instruction size and location in the assembly code. 17706 17707`-mpadstruct' 17708 This option is deprecated. It pads structures to multiple of 4 17709 bytes, which is incompatible with the SH ABI. 17710 17711`-matomic-model=MODEL' 17712 Sets the model of atomic operations and additional parameters as a 17713 comma separated list. For details on the atomic built-in 17714 functions see *note __atomic Builtins::. The following models and 17715 parameters are supported: 17716 17717 `none' 17718 Disable compiler generated atomic sequences and emit library 17719 calls for atomic operations. This is the default if the 17720 target is not `sh*-*-linux*'. 17721 17722 `soft-gusa' 17723 Generate GNU/Linux compatible gUSA software atomic sequences 17724 for the atomic built-in functions. The generated atomic 17725 sequences require additional support from the 17726 interrupt/exception handling code of the system and are only 17727 suitable for SH3* and SH4* single-core systems. This option 17728 is enabled by default when the target is `sh*-*-linux*' and 17729 SH3* or SH4*. When the target is SH4A, this option will also 17730 partially utilize the hardware atomic instructions `movli.l' 17731 and `movco.l' to create more efficient code, unless `strict' 17732 is specified. 17733 17734 `soft-tcb' 17735 Generate software atomic sequences that use a variable in the 17736 thread control block. This is a variation of the gUSA 17737 sequences which can also be used on SH1* and SH2* targets. 17738 The generated atomic sequences require additional support 17739 from the interrupt/exception handling code of the system and 17740 are only suitable for single-core systems. When using this 17741 model, the `gbr-offset=' parameter has to be specified as 17742 well. 17743 17744 `soft-imask' 17745 Generate software atomic sequences that temporarily disable 17746 interrupts by setting `SR.IMASK = 1111'. This model works 17747 only when the program runs in privileged mode and is only 17748 suitable for single-core systems. Additional support from 17749 the interrupt/exception handling code of the system is not 17750 required. This model is enabled by default when the target is 17751 `sh*-*-linux*' and SH1* or SH2*. 17752 17753 `hard-llcs' 17754 Generate hardware atomic sequences using the `movli.l' and 17755 `movco.l' instructions only. This is only available on SH4A 17756 and is suitable for multi-core systems. Since the hardware 17757 instructions support only 32 bit atomic variables access to 8 17758 or 16 bit variables is emulated with 32 bit accesses. Code 17759 compiled with this option will also be compatible with other 17760 software atomic model interrupt/exception handling systems if 17761 executed on an SH4A system. Additional support from the 17762 interrupt/exception handling code of the system is not 17763 required for this model. 17764 17765 `gbr-offset=' 17766 This parameter specifies the offset in bytes of the variable 17767 in the thread control block structure that should be used by 17768 the generated atomic sequences when the `soft-tcb' model has 17769 been selected. For other models this parameter is ignored. 17770 The specified value must be an integer multiple of four and 17771 in the range 0-1020. 17772 17773 `strict' 17774 This parameter prevents mixed usage of multiple atomic 17775 models, even though they would be compatible, and will make 17776 the compiler generate atomic sequences of the specified model 17777 only. 17778 17779 17780`-mtas' 17781 Generate the `tas.b' opcode for `__atomic_test_and_set'. Notice 17782 that depending on the particular hardware and software 17783 configuration this can degrade overall performance due to the 17784 operand cache line flushes that are implied by the `tas.b' 17785 instruction. On multi-core SH4A processors the `tas.b' 17786 instruction must be used with caution since it can result in data 17787 corruption for certain cache configurations. 17788 17789`-mprefergot' 17790 When generating position-independent code, emit function calls 17791 using the Global Offset Table instead of the Procedure Linkage 17792 Table. 17793 17794`-musermode' 17795`-mno-usermode' 17796 Don't allow (allow) the compiler generating privileged mode code. 17797 Specifying `-musermode' also implies `-mno-inline-ic_invalidate' 17798 if the inlined code would not work in user mode. `-musermode' is 17799 the default when the target is `sh*-*-linux*'. If the target is 17800 SH1* or SH2* `-musermode' has no effect, since there is no user 17801 mode. 17802 17803`-multcost=NUMBER' 17804 Set the cost to assume for a multiply insn. 17805 17806`-mdiv=STRATEGY' 17807 Set the division strategy to be used for integer division 17808 operations. For SHmedia STRATEGY can be one of: 17809 17810 `fp' 17811 Performs the operation in floating point. This has a very 17812 high latency, but needs only a few instructions, so it might 17813 be a good choice if your code has enough easily-exploitable 17814 ILP to allow the compiler to schedule the floating-point 17815 instructions together with other instructions. Division by 17816 zero causes a floating-point exception. 17817 17818 `inv' 17819 Uses integer operations to calculate the inverse of the 17820 divisor, and then multiplies the dividend with the inverse. 17821 This strategy allows CSE and hoisting of the inverse 17822 calculation. Division by zero calculates an unspecified 17823 result, but does not trap. 17824 17825 `inv:minlat' 17826 A variant of `inv' where, if no CSE or hoisting opportunities 17827 have been found, or if the entire operation has been hoisted 17828 to the same place, the last stages of the inverse calculation 17829 are intertwined with the final multiply to reduce the overall 17830 latency, at the expense of using a few more instructions, and 17831 thus offering fewer scheduling opportunities with other code. 17832 17833 `call' 17834 Calls a library function that usually implements the 17835 `inv:minlat' strategy. This gives high code density for 17836 `m5-*media-nofpu' compilations. 17837 17838 `call2' 17839 Uses a different entry point of the same library function, 17840 where it assumes that a pointer to a lookup table has already 17841 been set up, which exposes the pointer load to CSE and code 17842 hoisting optimizations. 17843 17844 `inv:call' 17845 `inv:call2' 17846 `inv:fp' 17847 Use the `inv' algorithm for initial code generation, but if 17848 the code stays unoptimized, revert to the `call', `call2', or 17849 `fp' strategies, respectively. Note that the 17850 potentially-trapping side effect of division by zero is 17851 carried by a separate instruction, so it is possible that all 17852 the integer instructions are hoisted out, but the marker for 17853 the side effect stays where it is. A recombination to 17854 floating-point operations or a call is not possible in that 17855 case. 17856 17857 `inv20u' 17858 `inv20l' 17859 Variants of the `inv:minlat' strategy. In the case that the 17860 inverse calculation is not separated from the multiply, they 17861 speed up division where the dividend fits into 20 bits (plus 17862 sign where applicable) by inserting a test to skip a number 17863 of operations in this case; this test slows down the case of 17864 larger dividends. `inv20u' assumes the case of a such a 17865 small dividend to be unlikely, and `inv20l' assumes it to be 17866 likely. 17867 17868 17869 For targets other than SHmedia STRATEGY can be one of: 17870 17871 `call-div1' 17872 Calls a library function that uses the single-step division 17873 instruction `div1' to perform the operation. Division by 17874 zero calculates an unspecified result and does not trap. 17875 This is the default except for SH4, SH2A and SHcompact. 17876 17877 `call-fp' 17878 Calls a library function that performs the operation in 17879 double precision floating point. Division by zero causes a 17880 floating-point exception. This is the default for SHcompact 17881 with FPU. Specifying this for targets that do not have a 17882 double precision FPU will default to `call-div1'. 17883 17884 `call-table' 17885 Calls a library function that uses a lookup table for small 17886 divisors and the `div1' instruction with case distinction for 17887 larger divisors. Division by zero calculates an unspecified 17888 result and does not trap. This is the default for SH4. 17889 Specifying this for targets that do not have dynamic shift 17890 instructions will default to `call-div1'. 17891 17892 17893 When a division strategy has not been specified the default 17894 strategy will be selected based on the current target. For SH2A 17895 the default strategy is to use the `divs' and `divu' instructions 17896 instead of library function calls. 17897 17898`-maccumulate-outgoing-args' 17899 Reserve space once for outgoing arguments in the function prologue 17900 rather than around each call. Generally beneficial for 17901 performance and size. Also needed for unwinding to avoid changing 17902 the stack frame around conditional code. 17903 17904`-mdivsi3_libfunc=NAME' 17905 Set the name of the library function used for 32-bit signed 17906 division to NAME. This only affects the name used in the `call' 17907 and `inv:call' division strategies, and the compiler still expects 17908 the same sets of input/output/clobbered registers as if this 17909 option were not present. 17910 17911`-mfixed-range=REGISTER-RANGE' 17912 Generate code treating the given register range as fixed registers. 17913 A fixed register is one that the register allocator can not use. 17914 This is useful when compiling kernel code. A register range is 17915 specified as two registers separated by a dash. Multiple register 17916 ranges can be specified separated by a comma. 17917 17918`-mindexed-addressing' 17919 Enable the use of the indexed addressing mode for 17920 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 17921 implement 32-bit wrap-around semantics for the indexed addressing 17922 mode. The architecture allows the implementation of processors 17923 with 64-bit MMU, which the OS could use to get 32-bit addressing, 17924 but since no current hardware implementation supports this or any 17925 other way to make the indexed addressing mode safe to use in the 17926 32-bit ABI, the default is `-mno-indexed-addressing'. 17927 17928`-mgettrcost=NUMBER' 17929 Set the cost assumed for the `gettr' instruction to NUMBER. The 17930 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 17931 17932`-mpt-fixed' 17933 Assume `pt*' instructions won't trap. This generally generates 17934 better-scheduled code, but is unsafe on current hardware. The 17935 current architecture definition says that `ptabs' and `ptrel' trap 17936 when the target anded with 3 is 3. This has the unintentional 17937 effect of making it unsafe to schedule these instructions before a 17938 branch, or hoist them out of a loop. For example, 17939 `__do_global_ctors', a part of `libgcc' that runs constructors at 17940 program startup, calls functions in a list which is delimited by 17941 -1. With the `-mpt-fixed' option, the `ptabs' is done before 17942 testing against -1. That means that all the constructors run a 17943 bit more quickly, but when the loop comes to the end of the list, 17944 the program crashes because `ptabs' loads -1 into a target 17945 register. 17946 17947 Since this option is unsafe for any hardware implementing the 17948 current architecture specification, the default is 17949 `-mno-pt-fixed'. Unless specified explicitly with `-mgettrcost', 17950 `-mno-pt-fixed' also implies `-mgettrcost=100'; this deters 17951 register allocation from using target registers for storing 17952 ordinary integers. 17953 17954`-minvalid-symbols' 17955 Assume symbols might be invalid. Ordinary function symbols 17956 generated by the compiler are always valid to load with 17957 `movi'/`shori'/`ptabs' or `movi'/`shori'/`ptrel', but with 17958 assembler and/or linker tricks it is possible to generate symbols 17959 that cause `ptabs' or `ptrel' to trap. This option is only 17960 meaningful when `-mno-pt-fixed' is in effect. It prevents 17961 cross-basic-block CSE, hoisting and most scheduling of symbol 17962 loads. The default is `-mno-invalid-symbols'. 17963 17964`-mbranch-cost=NUM' 17965 Assume NUM to be the cost for a branch instruction. Higher numbers 17966 make the compiler try to generate more branch-free code if 17967 possible. If not specified the value is selected depending on the 17968 processor type that is being compiled for. 17969 17970`-mzdcbranch' 17971`-mno-zdcbranch' 17972 Assume (do not assume) that zero displacement conditional branch 17973 instructions `bt' and `bf' are fast. If `-mzdcbranch' is 17974 specified, the compiler will try to prefer zero displacement 17975 branch code sequences. This is enabled by default when generating 17976 code for SH4 and SH4A. It can be explicitly disabled by 17977 specifying `-mno-zdcbranch'. 17978 17979`-mcbranchdi' 17980 Enable the `cbranchdi4' instruction pattern. 17981 17982`-mcmpeqdi' 17983 Emit the `cmpeqdi_t' instruction pattern even when `-mcbranchdi' 17984 is in effect. 17985 17986`-mfused-madd' 17987`-mno-fused-madd' 17988 Generate code that uses (does not use) the floating-point multiply 17989 and accumulate instructions. These instructions are generated by 17990 default if hardware floating point is used. The machine-dependent 17991 `-mfused-madd' option is now mapped to the machine-independent 17992 `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to 17993 `-ffp-contract=off'. 17994 17995`-mfsca' 17996`-mno-fsca' 17997 Allow or disallow the compiler to emit the `fsca' instruction for 17998 sine and cosine approximations. The option `-mfsca' must be used 17999 in combination with `-funsafe-math-optimizations'. It is enabled 18000 by default when generating code for SH4A. Using `-mno-fsca' 18001 disables sine and cosine approximations even if 18002 `-funsafe-math-optimizations' is in effect. 18003 18004`-mfsrra' 18005`-mno-fsrra' 18006 Allow or disallow the compiler to emit the `fsrra' instruction for 18007 reciprocal square root approximations. The option `-mfsrra' must 18008 be used in combination with `-funsafe-math-optimizations' and 18009 `-ffinite-math-only'. It is enabled by default when generating 18010 code for SH4A. Using `-mno-fsrra' disables reciprocal square root 18011 approximations even if `-funsafe-math-optimizations' and 18012 `-ffinite-math-only' are in effect. 18013 18014`-mpretend-cmove' 18015 Prefer zero-displacement conditional branches for conditional move 18016 instruction patterns. This can result in faster code on the SH4 18017 processor. 18018 18019 18020 18021File: gcc.info, Node: Solaris 2 Options, Next: SPARC Options, Prev: SH Options, Up: Submodel Options 18022 180233.17.39 Solaris 2 Options 18024------------------------- 18025 18026These `-m' options are supported on Solaris 2: 18027 18028`-mimpure-text' 18029 `-mimpure-text', used in addition to `-shared', tells the compiler 18030 to not pass `-z text' to the linker when linking a shared object. 18031 Using this option, you can link position-dependent code into a 18032 shared object. 18033 18034 `-mimpure-text' suppresses the "relocations remain against 18035 allocatable but non-writable sections" linker error message. 18036 However, the necessary relocations trigger copy-on-write, and the 18037 shared object is not actually shared across processes. Instead of 18038 using `-mimpure-text', you should compile all source code with 18039 `-fpic' or `-fPIC'. 18040 18041 18042 These switches are supported in addition to the above on Solaris 2: 18043 18044`-pthreads' 18045 Add support for multithreading using the POSIX threads library. 18046 This option sets flags for both the preprocessor and linker. This 18047 option does not affect the thread safety of object code produced 18048 by the compiler or that of libraries supplied with it. 18049 18050`-pthread' 18051 This is a synonym for `-pthreads'. 18052 18053 18054File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: Solaris 2 Options, Up: Submodel Options 18055 180563.17.40 SPARC Options 18057--------------------- 18058 18059These `-m' options are supported on the SPARC: 18060 18061`-mno-app-regs' 18062`-mapp-regs' 18063 Specify `-mapp-regs' to generate output using the global registers 18064 2 through 4, which the SPARC SVR4 ABI reserves for applications. 18065 Like the global register 1, each global register 2 through 4 is 18066 then treated as an allocable register that is clobbered by 18067 function calls. This is the default. 18068 18069 To be fully SVR4 ABI-compliant at the cost of some performance 18070 loss, specify `-mno-app-regs'. You should compile libraries and 18071 system software with this option. 18072 18073`-mflat' 18074`-mno-flat' 18075 With `-mflat', the compiler does not generate save/restore 18076 instructions and uses a "flat" or single register window model. 18077 This model is compatible with the regular register window model. 18078 The local registers and the input registers (0-5) are still 18079 treated as "call-saved" registers and are saved on the stack as 18080 needed. 18081 18082 With `-mno-flat' (the default), the compiler generates save/restore 18083 instructions (except for leaf functions). This is the normal 18084 operating mode. 18085 18086`-mfpu' 18087`-mhard-float' 18088 Generate output containing floating-point instructions. This is 18089 the default. 18090 18091`-mno-fpu' 18092`-msoft-float' 18093 Generate output containing library calls for floating point. 18094 *Warning:* the requisite libraries are not available for all SPARC 18095 targets. Normally the facilities of the machine's usual C 18096 compiler are used, but this cannot be done directly in 18097 cross-compilation. You must make your own arrangements to provide 18098 suitable library functions for cross-compilation. The embedded 18099 targets `sparc-*-aout' and `sparclite-*-*' do provide software 18100 floating-point support. 18101 18102 `-msoft-float' changes the calling convention in the output file; 18103 therefore, it is only useful if you compile _all_ of a program with 18104 this option. In particular, you need to compile `libgcc.a', the 18105 library that comes with GCC, with `-msoft-float' in order for this 18106 to work. 18107 18108`-mhard-quad-float' 18109 Generate output containing quad-word (long double) floating-point 18110 instructions. 18111 18112`-msoft-quad-float' 18113 Generate output containing library calls for quad-word (long 18114 double) floating-point instructions. The functions called are 18115 those specified in the SPARC ABI. This is the default. 18116 18117 As of this writing, there are no SPARC implementations that have 18118 hardware support for the quad-word floating-point instructions. 18119 They all invoke a trap handler for one of these instructions, and 18120 then the trap handler emulates the effect of the instruction. 18121 Because of the trap handler overhead, this is much slower than 18122 calling the ABI library routines. Thus the `-msoft-quad-float' 18123 option is the default. 18124 18125`-mno-unaligned-doubles' 18126`-munaligned-doubles' 18127 Assume that doubles have 8-byte alignment. This is the default. 18128 18129 With `-munaligned-doubles', GCC assumes that doubles have 8-byte 18130 alignment only if they are contained in another type, or if they 18131 have an absolute address. Otherwise, it assumes they have 4-byte 18132 alignment. Specifying this option avoids some rare compatibility 18133 problems with code generated by other compilers. It is not the 18134 default because it results in a performance loss, especially for 18135 floating-point code. 18136 18137`-muser-mode' 18138`-mno-user-mode' 18139 Do not generate code that can only run in supervisor mode. This 18140 is relevant only for the `casa' instruction emitted for the LEON3 18141 processor. The default is `-mno-user-mode'. 18142 18143`-mno-faster-structs' 18144`-mfaster-structs' 18145 With `-mfaster-structs', the compiler assumes that structures 18146 should have 8-byte alignment. This enables the use of pairs of 18147 `ldd' and `std' instructions for copies in structure assignment, 18148 in place of twice as many `ld' and `st' pairs. However, the use 18149 of this changed alignment directly violates the SPARC ABI. Thus, 18150 it's intended only for use on targets where the developer 18151 acknowledges that their resulting code is not directly in line with 18152 the rules of the ABI. 18153 18154`-mcpu=CPU_TYPE' 18155 Set the instruction set, register set, and instruction scheduling 18156 parameters for machine type CPU_TYPE. Supported values for 18157 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc', 18158 `leon', `leon3', `leon3v7', `sparclite', `f930', `f934', 18159 `sparclite86x', `sparclet', `tsc701', `v9', `ultrasparc', 18160 `ultrasparc3', `niagara', `niagara2', `niagara3' and `niagara4'. 18161 18162 Native Solaris and GNU/Linux toolchains also support the value 18163 `native', which selects the best architecture option for the host 18164 processor. `-mcpu=native' has no effect if GCC does not recognize 18165 the processor. 18166 18167 Default instruction scheduling parameters are used for values that 18168 select an architecture and not an implementation. These are `v7', 18169 `v8', `sparclite', `sparclet', `v9'. 18170 18171 Here is a list of each supported architecture and their supported 18172 implementations. 18173 18174 v7 18175 cypress, leon3v7 18176 18177 v8 18178 supersparc, hypersparc, leon, leon3 18179 18180 sparclite 18181 f930, f934, sparclite86x 18182 18183 sparclet 18184 tsc701 18185 18186 v9 18187 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4 18188 18189 By default (unless configured otherwise), GCC generates code for 18190 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 18191 the compiler additionally optimizes it for the Cypress CY7C602 18192 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 18193 also appropriate for the older SPARCStation 1, 2, IPX etc. 18194 18195 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 18196 architecture. The only difference from V7 code is that the 18197 compiler emits the integer multiply and integer divide 18198 instructions which exist in SPARC-V8 but not in SPARC-V7. With 18199 `-mcpu=supersparc', the compiler additionally optimizes it for the 18200 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 18201 series. 18202 18203 With `-mcpu=sparclite', GCC generates code for the SPARClite 18204 variant of the SPARC architecture. This adds the integer 18205 multiply, integer divide step and scan (`ffs') instructions which 18206 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 18207 compiler additionally optimizes it for the Fujitsu MB86930 chip, 18208 which is the original SPARClite, with no FPU. With `-mcpu=f934', 18209 the compiler additionally optimizes it for the Fujitsu MB86934 18210 chip, which is the more recent SPARClite with FPU. 18211 18212 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 18213 of the SPARC architecture. This adds the integer multiply, 18214 multiply/accumulate, integer divide step and scan (`ffs') 18215 instructions which exist in SPARClet but not in SPARC-V7. With 18216 `-mcpu=tsc701', the compiler additionally optimizes it for the 18217 TEMIC SPARClet chip. 18218 18219 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 18220 architecture. This adds 64-bit integer and floating-point move 18221 instructions, 3 additional floating-point condition code registers 18222 and conditional move instructions. With `-mcpu=ultrasparc', the 18223 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 18224 chips. With `-mcpu=ultrasparc3', the compiler additionally 18225 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 18226 chips. With `-mcpu=niagara', the compiler additionally optimizes 18227 it for Sun UltraSPARC T1 chips. With `-mcpu=niagara2', the 18228 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 18229 With `-mcpu=niagara3', the compiler additionally optimizes it for 18230 Sun UltraSPARC T3 chips. With `-mcpu=niagara4', the compiler 18231 additionally optimizes it for Sun UltraSPARC T4 chips. 18232 18233`-mtune=CPU_TYPE' 18234 Set the instruction scheduling parameters for machine type 18235 CPU_TYPE, but do not set the instruction set or register set that 18236 the option `-mcpu=CPU_TYPE' does. 18237 18238 The same values for `-mcpu=CPU_TYPE' can be used for 18239 `-mtune=CPU_TYPE', but the only useful values are those that 18240 select a particular CPU implementation. Those are `cypress', 18241 `supersparc', `hypersparc', `leon', `leon3', `leon3v7', `f930', 18242 `f934', `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', 18243 `niagara', `niagara2', `niagara3' and `niagara4'. With native 18244 Solaris and GNU/Linux toolchains, `native' can also be used. 18245 18246`-mv8plus' 18247`-mno-v8plus' 18248 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 18249 difference from the V8 ABI is that the global and out registers are 18250 considered 64 bits wide. This is enabled by default on Solaris in 18251 32-bit mode for all SPARC-V9 processors. 18252 18253`-mvis' 18254`-mno-vis' 18255 With `-mvis', GCC generates code that takes advantage of the 18256 UltraSPARC Visual Instruction Set extensions. The default is 18257 `-mno-vis'. 18258 18259`-mvis2' 18260`-mno-vis2' 18261 With `-mvis2', GCC generates code that takes advantage of version 18262 2.0 of the UltraSPARC Visual Instruction Set extensions. The 18263 default is `-mvis2' when targeting a cpu that supports such 18264 instructions, such as UltraSPARC-III and later. Setting `-mvis2' 18265 also sets `-mvis'. 18266 18267`-mvis3' 18268`-mno-vis3' 18269 With `-mvis3', GCC generates code that takes advantage of version 18270 3.0 of the UltraSPARC Visual Instruction Set extensions. The 18271 default is `-mvis3' when targeting a cpu that supports such 18272 instructions, such as niagara-3 and later. Setting `-mvis3' also 18273 sets `-mvis2' and `-mvis'. 18274 18275`-mcbcond' 18276`-mno-cbcond' 18277 With `-mcbcond', GCC generates code that takes advantage of 18278 compare-and-branch instructions, as defined in the Sparc 18279 Architecture 2011. The default is `-mcbcond' when targeting a cpu 18280 that supports such instructions, such as niagara-4 and later. 18281 18282`-mpopc' 18283`-mno-popc' 18284 With `-mpopc', GCC generates code that takes advantage of the 18285 UltraSPARC population count instruction. The default is `-mpopc' 18286 when targeting a cpu that supports such instructions, such as 18287 Niagara-2 and later. 18288 18289`-mfmaf' 18290`-mno-fmaf' 18291 With `-mfmaf', GCC generates code that takes advantage of the 18292 UltraSPARC Fused Multiply-Add Floating-point extensions. The 18293 default is `-mfmaf' when targeting a cpu that supports such 18294 instructions, such as Niagara-3 and later. 18295 18296`-mfix-at697f' 18297 Enable the documented workaround for the single erratum of the 18298 Atmel AT697F processor (which corresponds to erratum #13 of the 18299 AT697E processor). 18300 18301`-mfix-ut699' 18302 Enable the documented workarounds for the floating-point errata 18303 and the data cache nullify errata of the UT699 processor. 18304 18305 These `-m' options are supported in addition to the above on SPARC-V9 18306processors in 64-bit environments: 18307 18308`-m32' 18309`-m64' 18310 Generate code for a 32-bit or 64-bit environment. The 32-bit 18311 environment sets int, long and pointer to 32 bits. The 64-bit 18312 environment sets int to 32 bits and long and pointer to 64 bits. 18313 18314`-mcmodel=WHICH' 18315 Set the code model to one of 18316 18317 `medlow' 18318 The Medium/Low code model: 64-bit addresses, programs must be 18319 linked in the low 32 bits of memory. Programs can be 18320 statically or dynamically linked. 18321 18322 `medmid' 18323 The Medium/Middle code model: 64-bit addresses, programs must 18324 be linked in the low 44 bits of memory, the text and data 18325 segments must be less than 2GB in size and the data segment 18326 must be located within 2GB of the text segment. 18327 18328 `medany' 18329 The Medium/Anywhere code model: 64-bit addresses, programs 18330 may be linked anywhere in memory, the text and data segments 18331 must be less than 2GB in size and the data segment must be 18332 located within 2GB of the text segment. 18333 18334 `embmedany' 18335 The Medium/Anywhere code model for embedded systems: 64-bit 18336 addresses, the text and data segments must be less than 2GB in 18337 size, both starting anywhere in memory (determined at link 18338 time). The global register %g4 points to the base of the 18339 data segment. Programs are statically linked and PIC is not 18340 supported. 18341 18342`-mmemory-model=MEM-MODEL' 18343 Set the memory model in force on the processor to one of 18344 18345 `default' 18346 The default memory model for the processor and operating 18347 system. 18348 18349 `rmo' 18350 Relaxed Memory Order 18351 18352 `pso' 18353 Partial Store Order 18354 18355 `tso' 18356 Total Store Order 18357 18358 `sc' 18359 Sequential Consistency 18360 18361 These memory models are formally defined in Appendix D of the 18362 Sparc V9 architecture manual, as set in the processor's 18363 `PSTATE.MM' field. 18364 18365`-mstack-bias' 18366`-mno-stack-bias' 18367 With `-mstack-bias', GCC assumes that the stack pointer, and frame 18368 pointer if present, are offset by -2047 which must be added back 18369 when making stack frame references. This is the default in 64-bit 18370 mode. Otherwise, assume no such offset is present. 18371 18372 18373File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 18374 183753.17.41 SPU Options 18376------------------- 18377 18378These `-m' options are supported on the SPU: 18379 18380`-mwarn-reloc' 18381`-merror-reloc' 18382 The loader for SPU does not handle dynamic relocations. By 18383 default, GCC gives an error when it generates code that requires a 18384 dynamic relocation. `-mno-error-reloc' disables the error, 18385 `-mwarn-reloc' generates a warning instead. 18386 18387`-msafe-dma' 18388`-munsafe-dma' 18389 Instructions that initiate or test completion of DMA must not be 18390 reordered with respect to loads and stores of the memory that is 18391 being accessed. With `-munsafe-dma' you must use the `volatile' 18392 keyword to protect memory accesses, but that can lead to 18393 inefficient code in places where the memory is known to not 18394 change. Rather than mark the memory as volatile, you can use 18395 `-msafe-dma' to tell the compiler to treat the DMA instructions as 18396 potentially affecting all memory. 18397 18398`-mbranch-hints' 18399 By default, GCC generates a branch hint instruction to avoid 18400 pipeline stalls for always-taken or probably-taken branches. A 18401 hint is not generated closer than 8 instructions away from its 18402 branch. There is little reason to disable them, except for 18403 debugging purposes, or to make an object a little bit smaller. 18404 18405`-msmall-mem' 18406`-mlarge-mem' 18407 By default, GCC generates code assuming that addresses are never 18408 larger than 18 bits. With `-mlarge-mem' code is generated that 18409 assumes a full 32-bit address. 18410 18411`-mstdmain' 18412 By default, GCC links against startup code that assumes the 18413 SPU-style main function interface (which has an unconventional 18414 parameter list). With `-mstdmain', GCC links your program against 18415 startup code that assumes a C99-style interface to `main', 18416 including a local copy of `argv' strings. 18417 18418`-mfixed-range=REGISTER-RANGE' 18419 Generate code treating the given register range as fixed registers. 18420 A fixed register is one that the register allocator cannot use. 18421 This is useful when compiling kernel code. A register range is 18422 specified as two registers separated by a dash. Multiple register 18423 ranges can be specified separated by a comma. 18424 18425`-mea32' 18426`-mea64' 18427 Compile code assuming that pointers to the PPU address space 18428 accessed via the `__ea' named address space qualifier are either 18429 32 or 64 bits wide. The default is 32 bits. As this is an 18430 ABI-changing option, all object code in an executable must be 18431 compiled with the same setting. 18432 18433`-maddress-space-conversion' 18434`-mno-address-space-conversion' 18435 Allow/disallow treating the `__ea' address space as superset of 18436 the generic address space. This enables explicit type casts 18437 between `__ea' and generic pointer as well as implicit conversions 18438 of generic pointers to `__ea' pointers. The default is to allow 18439 address space pointer conversions. 18440 18441`-mcache-size=CACHE-SIZE' 18442 This option controls the version of libgcc that the compiler links 18443 to an executable and selects a software-managed cache for 18444 accessing variables in the `__ea' address space with a particular 18445 cache size. Possible options for CACHE-SIZE are `8', `16', `32', 18446 `64' and `128'. The default cache size is 64KB. 18447 18448`-matomic-updates' 18449`-mno-atomic-updates' 18450 This option controls the version of libgcc that the compiler links 18451 to an executable and selects whether atomic updates to the 18452 software-managed cache of PPU-side variables are used. If you use 18453 atomic updates, changes to a PPU variable from SPU code using the 18454 `__ea' named address space qualifier do not interfere with changes 18455 to other PPU variables residing in the same cache line from PPU 18456 code. If you do not use atomic updates, such interference may 18457 occur; however, writing back cache lines is more efficient. The 18458 default behavior is to use atomic updates. 18459 18460`-mdual-nops' 18461`-mdual-nops=N' 18462 By default, GCC inserts nops to increase dual issue when it expects 18463 it to increase performance. N can be a value from 0 to 10. A 18464 smaller N inserts fewer nops. 10 is the default, 0 is the same as 18465 `-mno-dual-nops'. Disabled with `-Os'. 18466 18467`-mhint-max-nops=N' 18468 Maximum number of nops to insert for a branch hint. A branch hint 18469 must be at least 8 instructions away from the branch it is 18470 affecting. GCC inserts up to N nops to enforce this, otherwise it 18471 does not generate the branch hint. 18472 18473`-mhint-max-distance=N' 18474 The encoding of the branch hint instruction limits the hint to be 18475 within 256 instructions of the branch it is affecting. By 18476 default, GCC makes sure it is within 125. 18477 18478`-msafe-hints' 18479 Work around a hardware bug that causes the SPU to stall 18480 indefinitely. By default, GCC inserts the `hbrp' instruction to 18481 make sure this stall won't happen. 18482 18483 18484 18485File: gcc.info, Node: System V Options, Next: TILE-Gx Options, Prev: SPU Options, Up: Submodel Options 18486 184873.17.42 Options for System V 18488---------------------------- 18489 18490These additional options are available on System V Release 4 for 18491compatibility with other compilers on those systems: 18492 18493`-G' 18494 Create a shared object. It is recommended that `-symbolic' or 18495 `-shared' be used instead. 18496 18497`-Qy' 18498 Identify the versions of each tool used by the compiler, in a 18499 `.ident' assembler directive in the output. 18500 18501`-Qn' 18502 Refrain from adding `.ident' directives to the output file (this is 18503 the default). 18504 18505`-YP,DIRS' 18506 Search the directories DIRS, and no others, for libraries 18507 specified with `-l'. 18508 18509`-Ym,DIR' 18510 Look in the directory DIR to find the M4 preprocessor. The 18511 assembler uses this option. 18512 18513 18514File: gcc.info, Node: TILE-Gx Options, Next: TILEPro Options, Prev: System V Options, Up: Submodel Options 18515 185163.17.43 TILE-Gx Options 18517----------------------- 18518 18519These `-m' options are supported on the TILE-Gx: 18520 18521`-mcmodel=small' 18522 Generate code for the small model. The distance for direct calls 18523 is limited to 500M in either direction. PC-relative addresses are 18524 32 bits. Absolute addresses support the full address range. 18525 18526`-mcmodel=large' 18527 Generate code for the large model. There is no limitation on call 18528 distance, pc-relative addresses, or absolute addresses. 18529 18530`-mcpu=NAME' 18531 Selects the type of CPU to be targeted. Currently the only 18532 supported type is `tilegx'. 18533 18534`-m32' 18535`-m64' 18536 Generate code for a 32-bit or 64-bit environment. The 32-bit 18537 environment sets int, long, and pointer to 32 bits. The 64-bit 18538 environment sets int to 32 bits and long and pointer to 64 bits. 18539 18540 18541File: gcc.info, Node: TILEPro Options, Next: V850 Options, Prev: TILE-Gx Options, Up: Submodel Options 18542 185433.17.44 TILEPro Options 18544----------------------- 18545 18546These `-m' options are supported on the TILEPro: 18547 18548`-mcpu=NAME' 18549 Selects the type of CPU to be targeted. Currently the only 18550 supported type is `tilepro'. 18551 18552`-m32' 18553 Generate code for a 32-bit environment, which sets int, long, and 18554 pointer to 32 bits. This is the only supported behavior so the 18555 flag is essentially ignored. 18556 18557 18558File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TILEPro Options, Up: Submodel Options 18559 185603.17.45 V850 Options 18561-------------------- 18562 18563These `-m' options are defined for V850 implementations: 18564 18565`-mlong-calls' 18566`-mno-long-calls' 18567 Treat all calls as being far away (near). If calls are assumed to 18568 be far away, the compiler always loads the function's address into 18569 a register, and calls indirect through the pointer. 18570 18571`-mno-ep' 18572`-mep' 18573 Do not optimize (do optimize) basic blocks that use the same index 18574 pointer 4 or more times to copy pointer into the `ep' register, and 18575 use the shorter `sld' and `sst' instructions. The `-mep' option 18576 is on by default if you optimize. 18577 18578`-mno-prolog-function' 18579`-mprolog-function' 18580 Do not use (do use) external functions to save and restore 18581 registers at the prologue and epilogue of a function. The 18582 external functions are slower, but use less code space if more 18583 than one function saves the same number of registers. The 18584 `-mprolog-function' option is on by default if you optimize. 18585 18586`-mspace' 18587 Try to make the code as small as possible. At present, this just 18588 turns on the `-mep' and `-mprolog-function' options. 18589 18590`-mtda=N' 18591 Put static or global variables whose size is N bytes or less into 18592 the tiny data area that register `ep' points to. The tiny data 18593 area can hold up to 256 bytes in total (128 bytes for byte 18594 references). 18595 18596`-msda=N' 18597 Put static or global variables whose size is N bytes or less into 18598 the small data area that register `gp' points to. The small data 18599 area can hold up to 64 kilobytes. 18600 18601`-mzda=N' 18602 Put static or global variables whose size is N bytes or less into 18603 the first 32 kilobytes of memory. 18604 18605`-mv850' 18606 Specify that the target processor is the V850. 18607 18608`-mv850e3v5' 18609 Specify that the target processor is the V850E3V5. The 18610 preprocessor constant `__v850e3v5__' is defined if this option is 18611 used. 18612 18613`-mv850e2v4' 18614 Specify that the target processor is the V850E3V5. This is an 18615 alias for the `-mv850e3v5' option. 18616 18617`-mv850e2v3' 18618 Specify that the target processor is the V850E2V3. The 18619 preprocessor constant `__v850e2v3__' is defined if this option is 18620 used. 18621 18622`-mv850e2' 18623 Specify that the target processor is the V850E2. The preprocessor 18624 constant `__v850e2__' is defined if this option is used. 18625 18626`-mv850e1' 18627 Specify that the target processor is the V850E1. The preprocessor 18628 constants `__v850e1__' and `__v850e__' are defined if this option 18629 is used. 18630 18631`-mv850es' 18632 Specify that the target processor is the V850ES. This is an alias 18633 for the `-mv850e1' option. 18634 18635`-mv850e' 18636 Specify that the target processor is the V850E. The preprocessor 18637 constant `__v850e__' is defined if this option is used. 18638 18639 If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2' 18640 nor `-mv850e2v3' nor `-mv850e3v5' are defined then a default 18641 target processor is chosen and the relevant `__v850*__' 18642 preprocessor constant is defined. 18643 18644 The preprocessor constants `__v850' and `__v851__' are always 18645 defined, regardless of which processor variant is the target. 18646 18647`-mdisable-callt' 18648`-mno-disable-callt' 18649 This option suppresses generation of the `CALLT' instruction for 18650 the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the 18651 v850 architecture. 18652 18653 This option is enabled by default when the RH850 ABI is in use 18654 (see `-mrh850-abi'), and disabled by default when the GCC ABI is 18655 in use. If `CALLT' instructions are being generated then the C 18656 preprocessor symbol `__V850_CALLT__' will be defined. 18657 18658`-mrelax' 18659`-mno-relax' 18660 Pass on (or do not pass on) the `-mrelax' command line option to 18661 the assembler. 18662 18663`-mlong-jumps' 18664`-mno-long-jumps' 18665 Disable (or re-enable) the generation of PC-relative jump 18666 instructions. 18667 18668`-msoft-float' 18669`-mhard-float' 18670 Disable (or re-enable) the generation of hardware floating point 18671 instructions. This option is only significant when the target 18672 architecture is `V850E2V3' or higher. If hardware floating point 18673 instructions are being generated then the C preprocessor symbol 18674 `__FPU_OK__' will be defined, otherwise the symbol `__NO_FPU__' 18675 will be defined. 18676 18677`-mloop' 18678 Enables the use of the e3v5 LOOP instruction. The use of this 18679 instruction is not enabled by default when the e3v5 architecture is 18680 selected because its use is still experimental. 18681 18682`-mrh850-abi' 18683`-mghs' 18684 Enables support for the RH850 version of the V850 ABI. This is the 18685 default. With this version of the ABI the following rules apply: 18686 18687 * Integer sized structures and unions are returned via a memory 18688 pointer rather than a register. 18689 18690 * Large structures and unions (more than 8 bytes in size) are 18691 passed by value. 18692 18693 * Functions are aligned to 16-bit boundaries. 18694 18695 * The `-m8byte-align' command line option is supported. 18696 18697 * The `-mdisable-callt' command line option is enabled by 18698 default. The `-mno-disable-callt' command line option is not 18699 supported. 18700 18701 When this version of the ABI is enabled the C preprocessor symbol 18702 `__V850_RH850_ABI__' is defined. 18703 18704`-mgcc-abi' 18705 Enables support for the old GCC version of the V850 ABI. With this 18706 version of the ABI the following rules apply: 18707 18708 * Integer sized structures and unions are returned in register 18709 `r10'. 18710 18711 * Large structures and unions (more than 8 bytes in size) are 18712 passed by reference. 18713 18714 * Functions are aligned to 32-bit boundaries, unless optimizing 18715 for size. 18716 18717 * The `-m8byte-align' command line option is not supported. 18718 18719 * The `-mdisable-callt' command line option is supported but not 18720 enabled by default. 18721 18722 When this version of the ABI is enabled the C preprocessor symbol 18723 `__V850_GCC_ABI__' is defined. 18724 18725`-m8byte-align' 18726`-mno-8byte-align' 18727 Enables support for `doubles' and `long long' types to be aligned 18728 on 8-byte boundaries. The default is to restrict the alignment of 18729 all objects to at most 4-bytes. When `-m8byte-align' is in effect 18730 the C preprocessor symbol `__V850_8BYTE_ALIGN__' will be defined. 18731 18732`-mbig-switch' 18733 Generate code suitable for big switch tables. Use this option 18734 only if the assembler/linker complain about out of range branches 18735 within a switch table. 18736 18737`-mapp-regs' 18738 This option causes r2 and r5 to be used in the code generated by 18739 the compiler. This setting is the default. 18740 18741`-mno-app-regs' 18742 This option causes r2 and r5 to be treated as fixed registers. 18743 18744 18745 18746File: gcc.info, Node: VAX Options, Next: VMS Options, Prev: V850 Options, Up: Submodel Options 18747 187483.17.46 VAX Options 18749------------------- 18750 18751These `-m' options are defined for the VAX: 18752 18753`-munix' 18754 Do not output certain jump instructions (`aobleq' and so on) that 18755 the Unix assembler for the VAX cannot handle across long ranges. 18756 18757`-mgnu' 18758 Do output those jump instructions, on the assumption that the GNU 18759 assembler is being used. 18760 18761`-mg' 18762 Output code for G-format floating-point numbers instead of 18763 D-format. 18764 18765 18766File: gcc.info, Node: VMS Options, Next: VxWorks Options, Prev: VAX Options, Up: Submodel Options 18767 187683.17.47 VMS Options 18769------------------- 18770 18771These `-m' options are defined for the VMS implementations: 18772 18773`-mvms-return-codes' 18774 Return VMS condition codes from `main'. The default is to return 18775 POSIX-style condition (e.g. error) codes. 18776 18777`-mdebug-main=PREFIX' 18778 Flag the first routine whose name starts with PREFIX as the main 18779 routine for the debugger. 18780 18781`-mmalloc64' 18782 Default to 64-bit memory allocation routines. 18783 18784`-mpointer-size=SIZE' 18785 Set the default size of pointers. Possible options for SIZE are 18786 `32' or `short' for 32 bit pointers, `64' or `long' for 64 bit 18787 pointers, and `no' for supporting only 32 bit pointers. The later 18788 option disables `pragma pointer_size'. 18789 18790 18791File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VMS Options, Up: Submodel Options 18792 187933.17.48 VxWorks Options 18794----------------------- 18795 18796The options in this section are defined for all VxWorks targets. 18797Options specific to the target hardware are listed with the other 18798options for that target. 18799 18800`-mrtp' 18801 GCC can generate code for both VxWorks kernels and real time 18802 processes (RTPs). This option switches from the former to the 18803 latter. It also defines the preprocessor macro `__RTP__'. 18804 18805`-non-static' 18806 Link an RTP executable against shared libraries rather than static 18807 libraries. The options `-static' and `-shared' can also be used 18808 for RTPs (*note Link Options::); `-static' is the default. 18809 18810`-Bstatic' 18811`-Bdynamic' 18812 These options are passed down to the linker. They are defined for 18813 compatibility with Diab. 18814 18815`-Xbind-lazy' 18816 Enable lazy binding of function calls. This option is equivalent 18817 to `-Wl,-z,now' and is defined for compatibility with Diab. 18818 18819`-Xbind-now' 18820 Disable lazy binding of function calls. This option is the 18821 default and is defined for compatibility with Diab. 18822 18823 18824File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options 18825 188263.17.49 x86-64 Options 18827---------------------- 18828 18829These are listed under *Note i386 and x86-64 Options::. 18830 18831 18832File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 18833 188343.17.50 Xstormy16 Options 18835------------------------- 18836 18837These options are defined for Xstormy16: 18838 18839`-msim' 18840 Choose startup files and linker script suitable for the simulator. 18841 18842 18843File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 18844 188453.17.51 Xtensa Options 18846---------------------- 18847 18848These options are supported for Xtensa targets: 18849 18850`-mconst16' 18851`-mno-const16' 18852 Enable or disable use of `CONST16' instructions for loading 18853 constant values. The `CONST16' instruction is currently not a 18854 standard option from Tensilica. When enabled, `CONST16' 18855 instructions are always used in place of the standard `L32R' 18856 instructions. The use of `CONST16' is enabled by default only if 18857 the `L32R' instruction is not available. 18858 18859`-mfused-madd' 18860`-mno-fused-madd' 18861 Enable or disable use of fused multiply/add and multiply/subtract 18862 instructions in the floating-point option. This has no effect if 18863 the floating-point option is not also enabled. Disabling fused 18864 multiply/add and multiply/subtract instructions forces the 18865 compiler to use separate instructions for the multiply and 18866 add/subtract operations. This may be desirable in some cases 18867 where strict IEEE 754-compliant results are required: the fused 18868 multiply add/subtract instructions do not round the intermediate 18869 result, thereby producing results with _more_ bits of precision 18870 than specified by the IEEE standard. Disabling fused multiply 18871 add/subtract instructions also ensures that the program output is 18872 not sensitive to the compiler's ability to combine multiply and 18873 add/subtract operations. 18874 18875`-mserialize-volatile' 18876`-mno-serialize-volatile' 18877 When this option is enabled, GCC inserts `MEMW' instructions before 18878 `volatile' memory references to guarantee sequential consistency. 18879 The default is `-mserialize-volatile'. Use 18880 `-mno-serialize-volatile' to omit the `MEMW' instructions. 18881 18882`-mforce-no-pic' 18883 For targets, like GNU/Linux, where all user-mode Xtensa code must 18884 be position-independent code (PIC), this option disables PIC for 18885 compiling kernel code. 18886 18887`-mtext-section-literals' 18888`-mno-text-section-literals' 18889 Control the treatment of literal pools. The default is 18890 `-mno-text-section-literals', which places literals in a separate 18891 section in the output file. This allows the literal pool to be 18892 placed in a data RAM/ROM, and it also allows the linker to combine 18893 literal pools from separate object files to remove redundant 18894 literals and improve code size. With `-mtext-section-literals', 18895 the literals are interspersed in the text section in order to keep 18896 them as close as possible to their references. This may be 18897 necessary for large assembly files. 18898 18899`-mtarget-align' 18900`-mno-target-align' 18901 When this option is enabled, GCC instructs the assembler to 18902 automatically align instructions to reduce branch penalties at the 18903 expense of some code density. The assembler attempts to widen 18904 density instructions to align branch targets and the instructions 18905 following call instructions. If there are not enough preceding 18906 safe density instructions to align a target, no widening is 18907 performed. The default is `-mtarget-align'. These options do not 18908 affect the treatment of auto-aligned instructions like `LOOP', 18909 which the assembler always aligns, either by widening density 18910 instructions or by inserting NOP instructions. 18911 18912`-mlongcalls' 18913`-mno-longcalls' 18914 When this option is enabled, GCC instructs the assembler to 18915 translate direct calls to indirect calls unless it can determine 18916 that the target of a direct call is in the range allowed by the 18917 call instruction. This translation typically occurs for calls to 18918 functions in other source files. Specifically, the assembler 18919 translates a direct `CALL' instruction into an `L32R' followed by 18920 a `CALLX' instruction. The default is `-mno-longcalls'. This 18921 option should be used in programs where the call target can 18922 potentially be out of range. This option is implemented in the 18923 assembler, not the compiler, so the assembly code generated by GCC 18924 still shows direct call instructions--look at the disassembled 18925 object code to see the actual instructions. Note that the 18926 assembler uses an indirect call for every cross-file call, not 18927 just those that really are out of range. 18928 18929 18930File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 18931 189323.17.52 zSeries Options 18933----------------------- 18934 18935These are listed under *Note S/390 and zSeries Options::. 18936 18937 18938File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 18939 189403.18 Options for Code Generation Conventions 18941============================================ 18942 18943These machine-independent options control the interface conventions 18944used in code generation. 18945 18946 Most of them have both positive and negative forms; the negative form 18947of `-ffoo' is `-fno-foo'. In the table below, only one of the forms is 18948listed--the one that is not the default. You can figure out the other 18949form by either removing `no-' or adding it. 18950 18951`-fbounds-check' 18952 For front ends that support it, generate additional code to check 18953 that indices used to access arrays are within the declared range. 18954 This is currently only supported by the Java and Fortran front 18955 ends, where this option defaults to true and false respectively. 18956 18957`-fstack-reuse=REUSE-LEVEL' 18958 This option controls stack space reuse for user declared 18959 local/auto variables and compiler generated temporaries. 18960 REUSE_LEVEL can be `all', `named_vars', or `none'. `all' enables 18961 stack reuse for all local variables and temporaries, `named_vars' 18962 enables the reuse only for user defined local variables with 18963 names, and `none' disables stack reuse completely. The default 18964 value is `all'. The option is needed when the program extends the 18965 lifetime of a scoped local variable or a compiler generated 18966 temporary beyond the end point defined by the language. When a 18967 lifetime of a variable ends, and if the variable lives in memory, 18968 the optimizing compiler has the freedom to reuse its stack space 18969 with other temporaries or scoped local variables whose live range 18970 does not overlap with it. Legacy code extending local lifetime 18971 will likely to break with the stack reuse optimization. 18972 18973 For example, 18974 18975 int *p; 18976 { 18977 int local1; 18978 18979 p = &local1; 18980 local1 = 10; 18981 .... 18982 } 18983 { 18984 int local2; 18985 local2 = 20; 18986 ... 18987 } 18988 18989 if (*p == 10) // out of scope use of local1 18990 { 18991 18992 } 18993 18994 Another example: 18995 18996 struct A 18997 { 18998 A(int k) : i(k), j(k) { } 18999 int i; 19000 int j; 19001 }; 19002 19003 A *ap; 19004 19005 void foo(const A& ar) 19006 { 19007 ap = &ar; 19008 } 19009 19010 void bar() 19011 { 19012 foo(A(10)); // temp object's lifetime ends when foo returns 19013 19014 { 19015 A a(20); 19016 .... 19017 } 19018 ap->i+= 10; // ap references out of scope temp whose space 19019 // is reused with a. What is the value of ap->i? 19020 } 19021 19022 The lifetime of a compiler generated temporary is well defined by 19023 the C++ standard. When a lifetime of a temporary ends, and if the 19024 temporary lives in memory, the optimizing compiler has the freedom 19025 to reuse its stack space with other temporaries or scoped local 19026 variables whose live range does not overlap with it. However some 19027 of the legacy code relies on the behavior of older compilers in 19028 which temporaries' stack space is not reused, the aggressive stack 19029 reuse can lead to runtime errors. This option is used to control 19030 the temporary stack reuse optimization. 19031 19032`-ftrapv' 19033 This option generates traps for signed overflow on addition, 19034 subtraction, multiplication operations. 19035 19036`-fwrapv' 19037 This option instructs the compiler to assume that signed arithmetic 19038 overflow of addition, subtraction and multiplication wraps around 19039 using twos-complement representation. This flag enables some 19040 optimizations and disables others. This option is enabled by 19041 default for the Java front end, as required by the Java language 19042 specification. 19043 19044`-fexceptions' 19045 Enable exception handling. Generates extra code needed to 19046 propagate exceptions. For some targets, this implies GCC 19047 generates frame unwind information for all functions, which can 19048 produce significant data size overhead, although it does not 19049 affect execution. If you do not specify this option, GCC enables 19050 it by default for languages like C++ that normally require 19051 exception handling, and disables it for languages like C that do 19052 not normally require it. However, you may need to enable this 19053 option when compiling C code that needs to interoperate properly 19054 with exception handlers written in C++. You may also wish to 19055 disable this option if you are compiling older C++ programs that 19056 don't use exception handling. 19057 19058`-fnon-call-exceptions' 19059 Generate code that allows trapping instructions to throw 19060 exceptions. Note that this requires platform-specific runtime 19061 support that does not exist everywhere. Moreover, it only allows 19062 _trapping_ instructions to throw exceptions, i.e. memory 19063 references or floating-point instructions. It does not allow 19064 exceptions to be thrown from arbitrary signal handlers such as 19065 `SIGALRM'. 19066 19067`-fdelete-dead-exceptions' 19068 Consider that instructions that may throw exceptions but don't 19069 otherwise contribute to the execution of the program can be 19070 optimized away. This option is enabled by default for the Ada 19071 front end, as permitted by the Ada language specification. 19072 Optimization passes that cause dead exceptions to be removed are 19073 enabled independently at different optimization levels. 19074 19075`-funwind-tables' 19076 Similar to `-fexceptions', except that it just generates any needed 19077 static data, but does not affect the generated code in any other 19078 way. You normally do not need to enable this option; instead, a 19079 language processor that needs this handling enables it on your 19080 behalf. 19081 19082`-fasynchronous-unwind-tables' 19083 Generate unwind table in DWARF 2 format, if supported by target 19084 machine. The table is exact at each instruction boundary, so it 19085 can be used for stack unwinding from asynchronous events (such as 19086 debugger or garbage collector). 19087 19088`-fno-gnu-unique' 19089 On systems with recent GNU assembler and C library, the C++ 19090 compiler uses the `STB_GNU_UNIQUE' binding to make sure that 19091 definitions of template static data members and static local 19092 variables in inline functions are unique even in the presence of 19093 `RTLD_LOCAL'; this is necessary to avoid problems with a library 19094 used by two different `RTLD_LOCAL' plugins depending on a 19095 definition in one of them and therefore disagreeing with the other 19096 one about the binding of the symbol. But this causes `dlclose' to 19097 be ignored for affected DSOs; if your program relies on 19098 reinitialization of a DSO via `dlclose' and `dlopen', you can use 19099 `-fno-gnu-unique'. 19100 19101`-fpcc-struct-return' 19102 Return "short" `struct' and `union' values in memory like longer 19103 ones, rather than in registers. This convention is less 19104 efficient, but it has the advantage of allowing intercallability 19105 between GCC-compiled files and files compiled with other 19106 compilers, particularly the Portable C Compiler (pcc). 19107 19108 The precise convention for returning structures in memory depends 19109 on the target configuration macros. 19110 19111 Short structures and unions are those whose size and alignment 19112 match that of some integer type. 19113 19114 *Warning:* code compiled with the `-fpcc-struct-return' switch is 19115 not binary compatible with code compiled with the 19116 `-freg-struct-return' switch. Use it to conform to a non-default 19117 application binary interface. 19118 19119`-freg-struct-return' 19120 Return `struct' and `union' values in registers when possible. 19121 This is more efficient for small structures than 19122 `-fpcc-struct-return'. 19123 19124 If you specify neither `-fpcc-struct-return' nor 19125 `-freg-struct-return', GCC defaults to whichever convention is 19126 standard for the target. If there is no standard convention, GCC 19127 defaults to `-fpcc-struct-return', except on targets where GCC is 19128 the principal compiler. In those cases, we can choose the 19129 standard, and we chose the more efficient register return 19130 alternative. 19131 19132 *Warning:* code compiled with the `-freg-struct-return' switch is 19133 not binary compatible with code compiled with the 19134 `-fpcc-struct-return' switch. Use it to conform to a non-default 19135 application binary interface. 19136 19137`-fshort-enums' 19138 Allocate to an `enum' type only as many bytes as it needs for the 19139 declared range of possible values. Specifically, the `enum' type 19140 is equivalent to the smallest integer type that has enough room. 19141 19142 *Warning:* the `-fshort-enums' switch causes GCC to generate code 19143 that is not binary compatible with code generated without that 19144 switch. Use it to conform to a non-default application binary 19145 interface. 19146 19147`-fshort-double' 19148 Use the same size for `double' as for `float'. 19149 19150 *Warning:* the `-fshort-double' switch causes GCC to generate code 19151 that is not binary compatible with code generated without that 19152 switch. Use it to conform to a non-default application binary 19153 interface. 19154 19155`-fshort-wchar' 19156 Override the underlying type for `wchar_t' to be `short unsigned 19157 int' instead of the default for the target. This option is useful 19158 for building programs to run under WINE. 19159 19160 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 19161 that is not binary compatible with code generated without that 19162 switch. Use it to conform to a non-default application binary 19163 interface. 19164 19165`-fno-common' 19166 In C code, controls the placement of uninitialized global 19167 variables. Unix C compilers have traditionally permitted multiple 19168 definitions of such variables in different compilation units by 19169 placing the variables in a common block. This is the behavior 19170 specified by `-fcommon', and is the default for GCC on most 19171 targets. On the other hand, this behavior is not required by ISO 19172 C, and on some targets may carry a speed or code size penalty on 19173 variable references. The `-fno-common' option specifies that the 19174 compiler should place uninitialized global variables in the data 19175 section of the object file, rather than generating them as common 19176 blocks. This has the effect that if the same variable is declared 19177 (without `extern') in two different compilations, you get a 19178 multiple-definition error when you link them. In this case, you 19179 must compile with `-fcommon' instead. Compiling with 19180 `-fno-common' is useful on targets for which it provides better 19181 performance, or if you wish to verify that the program will work 19182 on other systems that always treat uninitialized variable 19183 declarations this way. 19184 19185`-fno-ident' 19186 Ignore the `#ident' directive. 19187 19188`-finhibit-size-directive' 19189 Don't output a `.size' assembler directive, or anything else that 19190 would cause trouble if the function is split in the middle, and the 19191 two halves are placed at locations far apart in memory. This 19192 option is used when compiling `crtstuff.c'; you should not need to 19193 use it for anything else. 19194 19195`-fverbose-asm' 19196 Put extra commentary information in the generated assembly code to 19197 make it more readable. This option is generally only of use to 19198 those who actually need to read the generated assembly code 19199 (perhaps while debugging the compiler itself). 19200 19201 `-fno-verbose-asm', the default, causes the extra information to 19202 be omitted and is useful when comparing two assembler files. 19203 19204`-frecord-gcc-switches' 19205 This switch causes the command line used to invoke the compiler to 19206 be recorded into the object file that is being created. This 19207 switch is only implemented on some targets and the exact format of 19208 the recording is target and binary file format dependent, but it 19209 usually takes the form of a section containing ASCII text. This 19210 switch is related to the `-fverbose-asm' switch, but that switch 19211 only records information in the assembler output file as comments, 19212 so it never reaches the object file. See also 19213 `-grecord-gcc-switches' for another way of storing compiler 19214 options into the object file. 19215 19216`-fpic' 19217 Generate position-independent code (PIC) suitable for use in a 19218 shared library, if supported for the target machine. Such code 19219 accesses all constant addresses through a global offset table 19220 (GOT). The dynamic loader resolves the GOT entries when the 19221 program starts (the dynamic loader is not part of GCC; it is part 19222 of the operating system). If the GOT size for the linked 19223 executable exceeds a machine-specific maximum size, you get an 19224 error message from the linker indicating that `-fpic' does not 19225 work; in that case, recompile with `-fPIC' instead. (These 19226 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 19227 386 has no such limit.) 19228 19229 Position-independent code requires special support, and therefore 19230 works only on certain machines. For the 386, GCC supports PIC for 19231 System V but not for the Sun 386i. Code generated for the IBM 19232 RS/6000 is always position-independent. 19233 19234 When this flag is set, the macros `__pic__' and `__PIC__' are 19235 defined to 1. 19236 19237`-fPIC' 19238 If supported for the target machine, emit position-independent 19239 code, suitable for dynamic linking and avoiding any limit on the 19240 size of the global offset table. This option makes a difference 19241 on the m68k, PowerPC and SPARC. 19242 19243 Position-independent code requires special support, and therefore 19244 works only on certain machines. 19245 19246 When this flag is set, the macros `__pic__' and `__PIC__' are 19247 defined to 2. 19248 19249`-fpie' 19250`-fPIE' 19251 These options are similar to `-fpic' and `-fPIC', but generated 19252 position independent code can be only linked into executables. 19253 Usually these options are used when `-pie' GCC option is used 19254 during linking. 19255 19256 `-fpie' and `-fPIE' both define the macros `__pie__' and 19257 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for 19258 `-fPIE'. 19259 19260`-fno-jump-tables' 19261 Do not use jump tables for switch statements even where it would be 19262 more efficient than other code generation strategies. This option 19263 is of use in conjunction with `-fpic' or `-fPIC' for building code 19264 that forms part of a dynamic linker and cannot reference the 19265 address of a jump table. On some targets, jump tables do not 19266 require a GOT and this option is not needed. 19267 19268`-ffixed-REG' 19269 Treat the register named REG as a fixed register; generated code 19270 should never refer to it (except perhaps as a stack pointer, frame 19271 pointer or in some other fixed role). 19272 19273 REG must be the name of a register. The register names accepted 19274 are machine-specific and are defined in the `REGISTER_NAMES' macro 19275 in the machine description macro file. 19276 19277 This flag does not have a negative form, because it specifies a 19278 three-way choice. 19279 19280`-fcall-used-REG' 19281 Treat the register named REG as an allocable register that is 19282 clobbered by function calls. It may be allocated for temporaries 19283 or variables that do not live across a call. Functions compiled 19284 this way do not save and restore the register REG. 19285 19286 It is an error to use this flag with the frame pointer or stack 19287 pointer. Use of this flag for other registers that have fixed 19288 pervasive roles in the machine's execution model produces 19289 disastrous results. 19290 19291 This flag does not have a negative form, because it specifies a 19292 three-way choice. 19293 19294`-fcall-saved-REG' 19295 Treat the register named REG as an allocable register saved by 19296 functions. It may be allocated even for temporaries or variables 19297 that live across a call. Functions compiled this way save and 19298 restore the register REG if they use it. 19299 19300 It is an error to use this flag with the frame pointer or stack 19301 pointer. Use of this flag for other registers that have fixed 19302 pervasive roles in the machine's execution model produces 19303 disastrous results. 19304 19305 A different sort of disaster results from the use of this flag for 19306 a register in which function values may be returned. 19307 19308 This flag does not have a negative form, because it specifies a 19309 three-way choice. 19310 19311`-fpack-struct[=N]' 19312 Without a value specified, pack all structure members together 19313 without holes. When a value is specified (which must be a small 19314 power of two), pack structure members according to this value, 19315 representing the maximum alignment (that is, objects with default 19316 alignment requirements larger than this are output potentially 19317 unaligned at the next fitting location. 19318 19319 *Warning:* the `-fpack-struct' switch causes GCC to generate code 19320 that is not binary compatible with code generated without that 19321 switch. Additionally, it makes the code suboptimal. Use it to 19322 conform to a non-default application binary interface. 19323 19324`-finstrument-functions' 19325 Generate instrumentation calls for entry and exit to functions. 19326 Just after function entry and just before function exit, the 19327 following profiling functions are called with the address of the 19328 current function and its call site. (On some platforms, 19329 `__builtin_return_address' does not work beyond the current 19330 function, so the call site information may not be available to the 19331 profiling functions otherwise.) 19332 19333 void __cyg_profile_func_enter (void *this_fn, 19334 void *call_site); 19335 void __cyg_profile_func_exit (void *this_fn, 19336 void *call_site); 19337 19338 The first argument is the address of the start of the current 19339 function, which may be looked up exactly in the symbol table. 19340 19341 This instrumentation is also done for functions expanded inline in 19342 other functions. The profiling calls indicate where, 19343 conceptually, the inline function is entered and exited. This 19344 means that addressable versions of such functions must be 19345 available. If all your uses of a function are expanded inline, 19346 this may mean an additional expansion of code size. If you use 19347 `extern inline' in your C code, an addressable version of such 19348 functions must be provided. (This is normally the case anyway, 19349 but if you get lucky and the optimizer always expands the 19350 functions inline, you might have gotten away without providing 19351 static copies.) 19352 19353 A function may be given the attribute `no_instrument_function', in 19354 which case this instrumentation is not done. This can be used, for 19355 example, for the profiling functions listed above, high-priority 19356 interrupt routines, and any functions from which the profiling 19357 functions cannot safely be called (perhaps signal handlers, if the 19358 profiling routines generate output or allocate memory). 19359 19360`-finstrument-functions-exclude-file-list=FILE,FILE,...' 19361 Set the list of functions that are excluded from instrumentation 19362 (see the description of `-finstrument-functions'). If the file 19363 that contains a function definition matches with one of FILE, then 19364 that function is not instrumented. The match is done on 19365 substrings: if the FILE parameter is a substring of the file name, 19366 it is considered to be a match. 19367 19368 For example: 19369 19370 -finstrument-functions-exclude-file-list=/bits/stl,include/sys 19371 19372 excludes any inline function defined in files whose pathnames 19373 contain `/bits/stl' or `include/sys'. 19374 19375 If, for some reason, you want to include letter `','' in one of 19376 SYM, write `'\,''. For example, 19377 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 19378 single quote surrounding the option). 19379 19380`-finstrument-functions-exclude-function-list=SYM,SYM,...' 19381 This is similar to `-finstrument-functions-exclude-file-list', but 19382 this option sets the list of function names to be excluded from 19383 instrumentation. The function name to be matched is its 19384 user-visible name, such as `vector<int> blah(const vector<int> 19385 &)', not the internal mangled name (e.g., 19386 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 19387 the SYM parameter is a substring of the function name, it is 19388 considered to be a match. For C99 and C++ extended identifiers, 19389 the function name must be given in UTF-8, not using universal 19390 character names. 19391 19392`-fstack-check' 19393 Generate code to verify that you do not go beyond the boundary of 19394 the stack. You should specify this flag if you are running in an 19395 environment with multiple threads, but you only rarely need to 19396 specify it in a single-threaded environment since stack overflow 19397 is automatically detected on nearly all systems if there is only 19398 one stack. 19399 19400 Note that this switch does not actually cause checking to be done; 19401 the operating system or the language runtime must do that. The 19402 switch causes generation of code to ensure that they see the stack 19403 being extended. 19404 19405 You can additionally specify a string parameter: `no' means no 19406 checking, `generic' means force the use of old-style checking, 19407 `specific' means use the best checking method and is equivalent to 19408 bare `-fstack-check'. 19409 19410 Old-style checking is a generic mechanism that requires no specific 19411 target support in the compiler but comes with the following 19412 drawbacks: 19413 19414 1. Modified allocation strategy for large objects: they are 19415 always allocated dynamically if their size exceeds a fixed 19416 threshold. 19417 19418 2. Fixed limit on the size of the static frame of functions: 19419 when it is topped by a particular function, stack checking is 19420 not reliable and a warning is issued by the compiler. 19421 19422 3. Inefficiency: because of both the modified allocation 19423 strategy and the generic implementation, code performance is 19424 hampered. 19425 19426 Note that old-style stack checking is also the fallback method for 19427 `specific' if no target support has been added in the compiler. 19428 19429`-fstack-limit-register=REG' 19430`-fstack-limit-symbol=SYM' 19431`-fno-stack-limit' 19432 Generate code to ensure that the stack does not grow beyond a 19433 certain value, either the value of a register or the address of a 19434 symbol. If a larger stack is required, a signal is raised at run 19435 time. For most targets, the signal is raised before the stack 19436 overruns the boundary, so it is possible to catch the signal 19437 without taking special precautions. 19438 19439 For instance, if the stack starts at absolute address `0x80000000' 19440 and grows downwards, you can use the flags 19441 `-fstack-limit-symbol=__stack_limit' and 19442 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 19443 of 128KB. Note that this may only work with the GNU linker. 19444 19445`-fsplit-stack' 19446 Generate code to automatically split the stack before it overflows. 19447 The resulting program has a discontiguous stack which can only 19448 overflow if the program is unable to allocate any more memory. 19449 This is most useful when running threaded programs, as it is no 19450 longer necessary to calculate a good stack size to use for each 19451 thread. This is currently only implemented for the i386 and 19452 x86_64 back ends running GNU/Linux. 19453 19454 When code compiled with `-fsplit-stack' calls code compiled 19455 without `-fsplit-stack', there may not be much stack space 19456 available for the latter code to run. If compiling all code, 19457 including library code, with `-fsplit-stack' is not an option, 19458 then the linker can fix up these calls so that the code compiled 19459 without `-fsplit-stack' always has a large stack. Support for 19460 this is implemented in the gold linker in GNU binutils release 2.21 19461 and later. 19462 19463`-fleading-underscore' 19464 This option and its counterpart, `-fno-leading-underscore', 19465 forcibly change the way C symbols are represented in the object 19466 file. One use is to help link with legacy assembly code. 19467 19468 *Warning:* the `-fleading-underscore' switch causes GCC to 19469 generate code that is not binary compatible with code generated 19470 without that switch. Use it to conform to a non-default 19471 application binary interface. Not all targets provide complete 19472 support for this switch. 19473 19474`-ftls-model=MODEL' 19475 Alter the thread-local storage model to be used (*note 19476 Thread-Local::). The MODEL argument should be one of 19477 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 19478 19479 The default without `-fpic' is `initial-exec'; with `-fpic' the 19480 default is `global-dynamic'. 19481 19482`-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 19483 Set the default ELF image symbol visibility to the specified 19484 option--all symbols are marked with this unless overridden within 19485 the code. Using this feature can very substantially improve 19486 linking and load times of shared object libraries, produce more 19487 optimized code, provide near-perfect API export and prevent symbol 19488 clashes. It is *strongly* recommended that you use this in any 19489 shared objects you distribute. 19490 19491 Despite the nomenclature, `default' always means public; i.e., 19492 available to be linked against from outside the shared object. 19493 `protected' and `internal' are pretty useless in real-world usage 19494 so the only other commonly used option is `hidden'. The default 19495 if `-fvisibility' isn't specified is `default', i.e., make every 19496 symbol public--this causes the same behavior as previous versions 19497 of GCC. 19498 19499 A good explanation of the benefits offered by ensuring ELF symbols 19500 have the correct visibility is given by "How To Write Shared 19501 Libraries" by Ulrich Drepper (which can be found at 19502 `http://people.redhat.com/~drepper/')--however a superior solution 19503 made possible by this option to marking things hidden when the 19504 default is public is to make the default hidden and mark things 19505 public. This is the norm with DLLs on Windows and with 19506 `-fvisibility=hidden' and `__attribute__ 19507 ((visibility("default")))' instead of `__declspec(dllexport)' you 19508 get almost identical semantics with identical syntax. This is a 19509 great boon to those working with cross-platform projects. 19510 19511 For those adding visibility support to existing code, you may find 19512 `#pragma GCC visibility' of use. This works by you enclosing the 19513 declarations you wish to set visibility for with (for example) 19514 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 19515 pop'. Bear in mind that symbol visibility should be viewed *as 19516 part of the API interface contract* and thus all new code should 19517 always specify visibility when it is not the default; i.e., 19518 declarations only for use within the local DSO should *always* be 19519 marked explicitly as hidden as so to avoid PLT indirection 19520 overheads--making this abundantly clear also aids readability and 19521 self-documentation of the code. Note that due to ISO C++ 19522 specification requirements, `operator new' and `operator delete' 19523 must always be of default visibility. 19524 19525 Be aware that headers from outside your project, in particular 19526 system headers and headers from any other library you use, may not 19527 be expecting to be compiled with visibility other than the 19528 default. You may need to explicitly say `#pragma GCC visibility 19529 push(default)' before including any such headers. 19530 19531 `extern' declarations are not affected by `-fvisibility', so a lot 19532 of code can be recompiled with `-fvisibility=hidden' with no 19533 modifications. However, this means that calls to `extern' 19534 functions with no explicit visibility use the PLT, so it is more 19535 effective to use `__attribute ((visibility))' and/or `#pragma GCC 19536 visibility' to tell the compiler which `extern' declarations 19537 should be treated as hidden. 19538 19539 Note that `-fvisibility' does affect C++ vague linkage entities. 19540 This means that, for instance, an exception class that is be 19541 thrown between DSOs must be explicitly marked with default 19542 visibility so that the `type_info' nodes are unified between the 19543 DSOs. 19544 19545 An overview of these techniques, their benefits and how to use them 19546 is at `http://gcc.gnu.org/wiki/Visibility'. 19547 19548`-fstrict-volatile-bitfields' 19549 This option should be used if accesses to volatile bit-fields (or 19550 other structure fields, although the compiler usually honors those 19551 types anyway) should use a single access of the width of the 19552 field's type, aligned to a natural alignment if possible. For 19553 example, targets with memory-mapped peripheral registers might 19554 require all such accesses to be 16 bits wide; with this flag you 19555 can declare all peripheral bit-fields as `unsigned short' 19556 (assuming short is 16 bits on these targets) to force GCC to use 19557 16-bit accesses instead of, perhaps, a more efficient 32-bit 19558 access. 19559 19560 If this option is disabled, the compiler uses the most efficient 19561 instruction. In the previous example, that might be a 32-bit load 19562 instruction, even though that accesses bytes that do not contain 19563 any portion of the bit-field, or memory-mapped registers unrelated 19564 to the one being updated. 19565 19566 If the target requires strict alignment, and honoring the field 19567 type would require violating this alignment, a warning is issued. 19568 If the field has `packed' attribute, the access is done without 19569 honoring the field type. If the field doesn't have `packed' 19570 attribute, the access is done honoring the field type. In both 19571 cases, GCC assumes that the user knows something about the target 19572 hardware that it is unaware of. 19573 19574 The default value of this option is determined by the application 19575 binary interface for the target processor. 19576 19577`-fsync-libcalls' 19578 This option controls whether any out-of-line instance of the 19579 `__sync' family of functions may be used to implement the C++11 19580 `__atomic' family of functions. 19581 19582 The default value of this option is enabled, thus the only useful 19583 form of the option is `-fno-sync-libcalls'. This option is used in 19584 the implementation of the `libatomic' runtime library. 19585 19586 19587 19588File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 19589 195903.19 Environment Variables Affecting GCC 19591======================================== 19592 19593This section describes several environment variables that affect how GCC 19594operates. Some of them work by specifying directories or prefixes to 19595use when searching for various kinds of files. Some are used to 19596specify other aspects of the compilation environment. 19597 19598 Note that you can also specify places to search using options such as 19599`-B', `-I' and `-L' (*note Directory Options::). These take precedence 19600over places specified using environment variables, which in turn take 19601precedence over those specified by the configuration of GCC. *Note 19602Controlling the Compilation Driver `gcc': (gccint)Driver. 19603 19604`LANG' 19605`LC_CTYPE' 19606`LC_MESSAGES' 19607`LC_ALL' 19608 These environment variables control the way that GCC uses 19609 localization information which allows GCC to work with different 19610 national conventions. GCC inspects the locale categories 19611 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 19612 These locale categories can be set to any value supported by your 19613 installation. A typical value is `en_GB.UTF-8' for English in the 19614 United Kingdom encoded in UTF-8. 19615 19616 The `LC_CTYPE' environment variable specifies character 19617 classification. GCC uses it to determine the character boundaries 19618 in a string; this is needed for some multibyte encodings that 19619 contain quote and escape characters that are otherwise interpreted 19620 as a string end or escape. 19621 19622 The `LC_MESSAGES' environment variable specifies the language to 19623 use in diagnostic messages. 19624 19625 If the `LC_ALL' environment variable is set, it overrides the value 19626 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 19627 `LC_MESSAGES' default to the value of the `LANG' environment 19628 variable. If none of these variables are set, GCC defaults to 19629 traditional C English behavior. 19630 19631`TMPDIR' 19632 If `TMPDIR' is set, it specifies the directory to use for temporary 19633 files. GCC uses temporary files to hold the output of one stage of 19634 compilation which is to be used as input to the next stage: for 19635 example, the output of the preprocessor, which is the input to the 19636 compiler proper. 19637 19638`GCC_COMPARE_DEBUG' 19639 Setting `GCC_COMPARE_DEBUG' is nearly equivalent to passing 19640 `-fcompare-debug' to the compiler driver. See the documentation 19641 of this option for more details. 19642 19643`GCC_EXEC_PREFIX' 19644 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 19645 names of the subprograms executed by the compiler. No slash is 19646 added when this prefix is combined with the name of a subprogram, 19647 but you can specify a prefix that ends with a slash if you wish. 19648 19649 If `GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an 19650 appropriate prefix to use based on the pathname it is invoked with. 19651 19652 If GCC cannot find the subprogram using the specified prefix, it 19653 tries looking in the usual places for the subprogram. 19654 19655 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 19656 PREFIX is the prefix to the installed compiler. In many cases 19657 PREFIX is the value of `prefix' when you ran the `configure' 19658 script. 19659 19660 Other prefixes specified with `-B' take precedence over this 19661 prefix. 19662 19663 This prefix is also used for finding files such as `crt0.o' that 19664 are used for linking. 19665 19666 In addition, the prefix is used in an unusual way in finding the 19667 directories to search for header files. For each of the standard 19668 directories whose name normally begins with `/usr/local/lib/gcc' 19669 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 19670 replacing that beginning with the specified prefix to produce an 19671 alternate directory name. Thus, with `-Bfoo/', GCC searches 19672 `foo/bar' just before it searches the standard directory 19673 `/usr/local/lib/bar'. If a standard directory begins with the 19674 configured PREFIX then the value of PREFIX is replaced by 19675 `GCC_EXEC_PREFIX' when looking for header files. 19676 19677`COMPILER_PATH' 19678 The value of `COMPILER_PATH' is a colon-separated list of 19679 directories, much like `PATH'. GCC tries the directories thus 19680 specified when searching for subprograms, if it can't find the 19681 subprograms using `GCC_EXEC_PREFIX'. 19682 19683`LIBRARY_PATH' 19684 The value of `LIBRARY_PATH' is a colon-separated list of 19685 directories, much like `PATH'. When configured as a native 19686 compiler, GCC tries the directories thus specified when searching 19687 for special linker files, if it can't find them using 19688 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 19689 when searching for ordinary libraries for the `-l' option (but 19690 directories specified with `-L' come first). 19691 19692`LANG' 19693 This variable is used to pass locale information to the compiler. 19694 One way in which this information is used is to determine the 19695 character set to be used when character literals, string literals 19696 and comments are parsed in C and C++. When the compiler is 19697 configured to allow multibyte characters, the following values for 19698 `LANG' are recognized: 19699 19700 `C-JIS' 19701 Recognize JIS characters. 19702 19703 `C-SJIS' 19704 Recognize SJIS characters. 19705 19706 `C-EUCJP' 19707 Recognize EUCJP characters. 19708 19709 If `LANG' is not defined, or if it has some other value, then the 19710 compiler uses `mblen' and `mbtowc' as defined by the default 19711 locale to recognize and translate multibyte characters. 19712 19713Some additional environment variables affect the behavior of the 19714preprocessor. 19715 19716`CPATH' 19717`C_INCLUDE_PATH' 19718`CPLUS_INCLUDE_PATH' 19719`OBJC_INCLUDE_PATH' 19720 Each variable's value is a list of directories separated by a 19721 special character, much like `PATH', in which to look for header 19722 files. The special character, `PATH_SEPARATOR', is 19723 target-dependent and determined at GCC build time. For Microsoft 19724 Windows-based targets it is a semicolon, and for almost all other 19725 targets it is a colon. 19726 19727 `CPATH' specifies a list of directories to be searched as if 19728 specified with `-I', but after any paths given with `-I' options 19729 on the command line. This environment variable is used regardless 19730 of which language is being preprocessed. 19731 19732 The remaining environment variables apply only when preprocessing 19733 the particular language indicated. Each specifies a list of 19734 directories to be searched as if specified with `-isystem', but 19735 after any paths given with `-isystem' options on the command line. 19736 19737 In all these variables, an empty element instructs the compiler to 19738 search its current working directory. Empty elements can appear 19739 at the beginning or end of a path. For instance, if the value of 19740 `CPATH' is `:/special/include', that has the same effect as 19741 `-I. -I/special/include'. 19742 19743`DEPENDENCIES_OUTPUT' 19744 If this variable is set, its value specifies how to output 19745 dependencies for Make based on the non-system header files 19746 processed by the compiler. System header files are ignored in the 19747 dependency output. 19748 19749 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 19750 which case the Make rules are written to that file, guessing the 19751 target name from the source file name. Or the value can have the 19752 form `FILE TARGET', in which case the rules are written to file 19753 FILE using TARGET as the target name. 19754 19755 In other words, this environment variable is equivalent to 19756 combining the options `-MM' and `-MF' (*note Preprocessor 19757 Options::), with an optional `-MT' switch too. 19758 19759`SUNPRO_DEPENDENCIES' 19760 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 19761 except that system header files are not ignored, so it implies 19762 `-M' rather than `-MM'. However, the dependence on the main input 19763 file is omitted. *Note Preprocessor Options::. 19764 19765 19766File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC 19767 197683.20 Using Precompiled Headers 19769============================== 19770 19771Often large projects have many header files that are included in every 19772source file. The time the compiler takes to process these header files 19773over and over again can account for nearly all of the time required to 19774build the project. To make builds faster, GCC allows you to 19775"precompile" a header file. 19776 19777 To create a precompiled header file, simply compile it as you would any 19778other file, if necessary using the `-x' option to make the driver treat 19779it as a C or C++ header file. You may want to use a tool like `make' 19780to keep the precompiled header up-to-date when the headers it contains 19781change. 19782 19783 A precompiled header file is searched for when `#include' is seen in 19784the compilation. As it searches for the included file (*note Search 19785Path: (cpp)Search Path.) the compiler looks for a precompiled header in 19786each directory just before it looks for the include file in that 19787directory. The name searched for is the name specified in the 19788`#include' with `.gch' appended. If the precompiled header file can't 19789be used, it is ignored. 19790 19791 For instance, if you have `#include "all.h"', and you have `all.h.gch' 19792in the same directory as `all.h', then the precompiled header file is 19793used if possible, and the original header is used otherwise. 19794 19795 Alternatively, you might decide to put the precompiled header file in a 19796directory and use `-I' to ensure that directory is searched before (or 19797instead of) the directory containing the original header. Then, if you 19798want to check that the precompiled header file is always used, you can 19799put a file of the same name as the original header in this directory 19800containing an `#error' command. 19801 19802 This also works with `-include'. So yet another way to use 19803precompiled headers, good for projects not designed with precompiled 19804header files in mind, is to simply take most of the header files used by 19805a project, include them from another header file, precompile that header 19806file, and `-include' the precompiled header. If the header files have 19807guards against multiple inclusion, they are skipped because they've 19808already been included (in the precompiled header). 19809 19810 If you need to precompile the same header file for different 19811languages, targets, or compiler options, you can instead make a 19812_directory_ named like `all.h.gch', and put each precompiled header in 19813the directory, perhaps using `-o'. It doesn't matter what you call the 19814files in the directory; every precompiled header in the directory is 19815considered. The first precompiled header encountered in the directory 19816that is valid for this compilation is used; they're searched in no 19817particular order. 19818 19819 There are many other possibilities, limited only by your imagination, 19820good sense, and the constraints of your build system. 19821 19822 A precompiled header file can be used only when these conditions apply: 19823 19824 * Only one precompiled header can be used in a particular 19825 compilation. 19826 19827 * A precompiled header can't be used once the first C token is seen. 19828 You can have preprocessor directives before a precompiled header; 19829 you cannot include a precompiled header from inside another header. 19830 19831 * The precompiled header file must be produced for the same language 19832 as the current compilation. You can't use a C precompiled header 19833 for a C++ compilation. 19834 19835 * The precompiled header file must have been produced by the same 19836 compiler binary as the current compilation is using. 19837 19838 * Any macros defined before the precompiled header is included must 19839 either be defined in the same way as when the precompiled header 19840 was generated, or must not affect the precompiled header, which 19841 usually means that they don't appear in the precompiled header at 19842 all. 19843 19844 The `-D' option is one way to define a macro before a precompiled 19845 header is included; using a `#define' can also do it. There are 19846 also some options that define macros implicitly, like `-O' and 19847 `-Wdeprecated'; the same rule applies to macros defined this way. 19848 19849 * If debugging information is output when using the precompiled 19850 header, using `-g' or similar, the same kind of debugging 19851 information must have been output when building the precompiled 19852 header. However, a precompiled header built using `-g' can be 19853 used in a compilation when no debugging information is being 19854 output. 19855 19856 * The same `-m' options must generally be used when building and 19857 using the precompiled header. *Note Submodel Options::, for any 19858 cases where this rule is relaxed. 19859 19860 * Each of the following options must be the same when building and 19861 using the precompiled header: 19862 19863 -fexceptions 19864 19865 * Some other command-line options starting with `-f', `-p', or `-O' 19866 must be defined in the same way as when the precompiled header was 19867 generated. At present, it's not clear which options are safe to 19868 change and which are not; the safest choice is to use exactly the 19869 same options when generating and using the precompiled header. 19870 The following are known to be safe: 19871 19872 -fmessage-length= -fpreprocessed -fsched-interblock 19873 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 19874 -fsched-verbose=NUMBER -fschedule-insns -fvisibility= 19875 -pedantic-errors 19876 19877 19878 For all of these except the last, the compiler automatically ignores 19879the precompiled header if the conditions aren't met. If you find an 19880option combination that doesn't work and doesn't cause the precompiled 19881header to be ignored, please consider filing a bug report, see *note 19882Bugs::. 19883 19884 If you do use differing options when generating and using the 19885precompiled header, the actual behavior is a mixture of the behavior 19886for the options. For instance, if you use `-g' to generate the 19887precompiled header but not when using it, you may or may not get 19888debugging information for routines in the precompiled header. 19889 19890 19891File: gcc.info, Node: C Implementation, Next: C++ Implementation, Prev: Invoking GCC, Up: Top 19892 198934 C Implementation-defined behavior 19894*********************************** 19895 19896A conforming implementation of ISO C is required to document its choice 19897of behavior in each of the areas that are designated "implementation 19898defined". The following lists all such areas, along with the section 19899numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 19900Some areas are only implementation-defined in one version of the 19901standard. 19902 19903 Some choices depend on the externally determined ABI for the platform 19904(including standard character encodings) which GCC follows; these are 19905listed as "determined by ABI" below. *Note Binary Compatibility: 19906Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 19907are documented in the preprocessor manual. *Note 19908Implementation-defined behavior: (cpp)Implementation-defined behavior. 19909Some choices are made by the library and operating system (or other 19910environment when compiling for a freestanding environment); refer to 19911their documentation for details. 19912 19913* Menu: 19914 19915* Translation implementation:: 19916* Environment implementation:: 19917* Identifiers implementation:: 19918* Characters implementation:: 19919* Integers implementation:: 19920* Floating point implementation:: 19921* Arrays and pointers implementation:: 19922* Hints implementation:: 19923* Structures unions enumerations and bit-fields implementation:: 19924* Qualifiers implementation:: 19925* Declarators implementation:: 19926* Statements implementation:: 19927* Preprocessing directives implementation:: 19928* Library functions implementation:: 19929* Architecture implementation:: 19930* Locale-specific behavior implementation:: 19931 19932 19933File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 19934 199354.1 Translation 19936=============== 19937 19938 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 19939 5.1.1.3).' 19940 19941 Diagnostics consist of all the output sent to stderr by GCC. 19942 19943 * `Whether each nonempty sequence of white-space characters other 19944 than new-line is retained or replaced by one space character in 19945 translation phase 3 (C90 and C99 5.1.1.2).' 19946 19947 *Note Implementation-defined behavior: (cpp)Implementation-defined 19948 behavior. 19949 19950 19951 19952File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 19953 199544.2 Environment 19955=============== 19956 19957The behavior of most of these points are dependent on the implementation 19958of the C library, and are not defined by GCC itself. 19959 19960 * `The mapping between physical source file multibyte characters and 19961 the source character set in translation phase 1 (C90 and C99 19962 5.1.1.2).' 19963 19964 *Note Implementation-defined behavior: (cpp)Implementation-defined 19965 behavior. 19966 19967 19968 19969File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 19970 199714.3 Identifiers 19972=============== 19973 19974 * `Which additional multibyte characters may appear in identifiers 19975 and their correspondence to universal character names (C99 6.4.2).' 19976 19977 *Note Implementation-defined behavior: (cpp)Implementation-defined 19978 behavior. 19979 19980 * `The number of significant initial characters in an identifier 19981 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 19982 19983 For internal names, all characters are significant. For external 19984 names, the number of significant characters are defined by the 19985 linker; for almost all targets, all characters are significant. 19986 19987 * `Whether case distinctions are significant in an identifier with 19988 external linkage (C90 6.1.2).' 19989 19990 This is a property of the linker. C99 requires that case 19991 distinctions are always significant in identifiers with external 19992 linkage and systems without this property are not supported by GCC. 19993 19994 19995 19996File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 19997 199984.4 Characters 19999============== 20000 20001 * `The number of bits in a byte (C90 3.4, C99 3.6).' 20002 20003 Determined by ABI. 20004 20005 * `The values of the members of the execution character set (C90 and 20006 C99 5.2.1).' 20007 20008 Determined by ABI. 20009 20010 * `The unique value of the member of the execution character set 20011 produced for each of the standard alphabetic escape sequences (C90 20012 and C99 5.2.2).' 20013 20014 Determined by ABI. 20015 20016 * `The value of a `char' object into which has been stored any 20017 character other than a member of the basic execution character set 20018 (C90 6.1.2.5, C99 6.2.5).' 20019 20020 Determined by ABI. 20021 20022 * `Which of `signed char' or `unsigned char' has the same range, 20023 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 20024 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 20025 20026 Determined by ABI. The options `-funsigned-char' and 20027 `-fsigned-char' change the default. *Note Options Controlling C 20028 Dialect: C Dialect Options. 20029 20030 * `The mapping of members of the source character set (in character 20031 constants and string literals) to members of the execution 20032 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 20033 20034 Determined by ABI. 20035 20036 * `The value of an integer character constant containing more than 20037 one character or containing a character or escape sequence that 20038 does not map to a single-byte execution character (C90 6.1.3.4, 20039 C99 6.4.4.4).' 20040 20041 *Note Implementation-defined behavior: (cpp)Implementation-defined 20042 behavior. 20043 20044 * `The value of a wide character constant containing more than one 20045 multibyte character, or containing a multibyte character or escape 20046 sequence not represented in the extended execution character set 20047 (C90 6.1.3.4, C99 6.4.4.4).' 20048 20049 *Note Implementation-defined behavior: (cpp)Implementation-defined 20050 behavior. 20051 20052 * `The current locale used to convert a wide character constant 20053 consisting of a single multibyte character that maps to a member 20054 of the extended execution character set into a corresponding wide 20055 character code (C90 6.1.3.4, C99 6.4.4.4).' 20056 20057 *Note Implementation-defined behavior: (cpp)Implementation-defined 20058 behavior. 20059 20060 * `The current locale used to convert a wide string literal into 20061 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 20062 20063 *Note Implementation-defined behavior: (cpp)Implementation-defined 20064 behavior. 20065 20066 * `The value of a string literal containing a multibyte character or 20067 escape sequence not represented in the execution character set 20068 (C90 6.1.4, C99 6.4.5).' 20069 20070 *Note Implementation-defined behavior: (cpp)Implementation-defined 20071 behavior. 20072 20073 20074File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 20075 200764.5 Integers 20077============ 20078 20079 * `Any extended integer types that exist in the implementation (C99 20080 6.2.5).' 20081 20082 GCC does not support any extended integer types. 20083 20084 * `Whether signed integer types are represented using sign and 20085 magnitude, two's complement, or one's complement, and whether the 20086 extraordinary value is a trap representation or an ordinary value 20087 (C99 6.2.6.2).' 20088 20089 GCC supports only two's complement integer types, and all bit 20090 patterns are ordinary values. 20091 20092 * `The rank of any extended integer type relative to another extended 20093 integer type with the same precision (C99 6.3.1.1).' 20094 20095 GCC does not support any extended integer types. 20096 20097 * `The result of, or the signal raised by, converting an integer to a 20098 signed integer type when the value cannot be represented in an 20099 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 20100 20101 For conversion to a type of width N, the value is reduced modulo 20102 2^N to be within range of the type; no signal is raised. 20103 20104 * `The results of some bitwise operations on signed integers (C90 20105 6.3, C99 6.5).' 20106 20107 Bitwise operators act on the representation of the value including 20108 both the sign and value bits, where the sign bit is considered 20109 immediately above the highest-value value bit. Signed `>>' acts 20110 on negative numbers by sign extension. 20111 20112 GCC does not use the latitude given in C99 only to treat certain 20113 aspects of signed `<<' as undefined, but this is subject to change. 20114 20115 * `The sign of the remainder on integer division (C90 6.3.5).' 20116 20117 GCC always follows the C99 requirement that the result of division 20118 is truncated towards zero. 20119 20120 20121 20122File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 20123 201244.6 Floating point 20125================== 20126 20127 * `The accuracy of the floating-point operations and of the library 20128 functions in `<math.h>' and `<complex.h>' that return 20129 floating-point results (C90 and C99 5.2.4.2.2).' 20130 20131 The accuracy is unknown. 20132 20133 * `The rounding behaviors characterized by non-standard values of 20134 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 20135 20136 GCC does not use such values. 20137 20138 * `The evaluation methods characterized by non-standard negative 20139 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 20140 20141 GCC does not use such values. 20142 20143 * `The direction of rounding when an integer is converted to a 20144 floating-point number that cannot exactly represent the original 20145 value (C90 6.2.1.3, C99 6.3.1.4).' 20146 20147 C99 Annex F is followed. 20148 20149 * `The direction of rounding when a floating-point number is 20150 converted to a narrower floating-point number (C90 6.2.1.4, C99 20151 6.3.1.5).' 20152 20153 C99 Annex F is followed. 20154 20155 * `How the nearest representable value or the larger or smaller 20156 representable value immediately adjacent to the nearest 20157 representable value is chosen for certain floating constants (C90 20158 6.1.3.1, C99 6.4.4.2).' 20159 20160 C99 Annex F is followed. 20161 20162 * `Whether and how floating expressions are contracted when not 20163 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 20164 20165 Expressions are currently only contracted if 20166 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 20167 subject to change. 20168 20169 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 20170 20171 This pragma is not implemented, but the default is to "off" unless 20172 `-frounding-math' is used in which case it is "on". 20173 20174 * `Additional floating-point exceptions, rounding modes, 20175 environments, and classifications, and their macro names (C99 7.6, 20176 C99 7.12).' 20177 20178 This is dependent on the implementation of the C library, and is 20179 not defined by GCC itself. 20180 20181 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 20182 20183 This pragma is not implemented. Expressions are currently only 20184 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 20185 used. This is subject to change. 20186 20187 * `Whether the "inexact" floating-point exception can be raised when 20188 the rounded result actually does equal the mathematical result in 20189 an IEC 60559 conformant implementation (C99 F.9).' 20190 20191 This is dependent on the implementation of the C library, and is 20192 not defined by GCC itself. 20193 20194 * `Whether the "underflow" (and "inexact") floating-point exception 20195 can be raised when a result is tiny but not inexact in an IEC 20196 60559 conformant implementation (C99 F.9).' 20197 20198 This is dependent on the implementation of the C library, and is 20199 not defined by GCC itself. 20200 20201 20202 20203File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 20204 202054.7 Arrays and pointers 20206======================= 20207 20208 * `The result of converting a pointer to an integer or vice versa 20209 (C90 6.3.4, C99 6.3.2.3).' 20210 20211 A cast from pointer to integer discards most-significant bits if 20212 the pointer representation is larger than the integer type, 20213 sign-extends(1) if the pointer representation is smaller than the 20214 integer type, otherwise the bits are unchanged. 20215 20216 A cast from integer to pointer discards most-significant bits if 20217 the pointer representation is smaller than the integer type, 20218 extends according to the signedness of the integer type if the 20219 pointer representation is larger than the integer type, otherwise 20220 the bits are unchanged. 20221 20222 When casting from pointer to integer and back again, the resulting 20223 pointer must reference the same object as the original pointer, 20224 otherwise the behavior is undefined. That is, one may not use 20225 integer arithmetic to avoid the undefined behavior of pointer 20226 arithmetic as proscribed in C99 6.5.6/8. 20227 20228 * `The size of the result of subtracting two pointers to elements of 20229 the same array (C90 6.3.6, C99 6.5.6).' 20230 20231 The value is as specified in the standard and the type is 20232 determined by the ABI. 20233 20234 20235 ---------- Footnotes ---------- 20236 20237 (1) Future versions of GCC may zero-extend, or use a target-defined 20238`ptr_extend' pattern. Do not rely on sign extension. 20239 20240 20241File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 20242 202434.8 Hints 20244========= 20245 20246 * `The extent to which suggestions made by using the `register' 20247 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 20248 20249 The `register' specifier affects code generation only in these 20250 ways: 20251 20252 * When used as part of the register variable extension, see 20253 *note Explicit Reg Vars::. 20254 20255 * When `-O0' is in use, the compiler allocates distinct stack 20256 memory for all variables that do not have the `register' 20257 storage-class specifier; if `register' is specified, the 20258 variable may have a shorter lifespan than the code would 20259 indicate and may never be placed in memory. 20260 20261 * On some rare x86 targets, `setjmp' doesn't save the registers 20262 in all circumstances. In those cases, GCC doesn't allocate 20263 any variables in registers unless they are marked `register'. 20264 20265 20266 * `The extent to which suggestions made by using the inline function 20267 specifier are effective (C99 6.7.4).' 20268 20269 GCC will not inline any functions if the `-fno-inline' option is 20270 used or if `-O0' is used. Otherwise, GCC may still be unable to 20271 inline a function for many reasons; the `-Winline' option may be 20272 used to determine if a function has not been inlined and why not. 20273 20274 20275 20276File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 20277 202784.9 Structures, unions, enumerations, and bit-fields 20279==================================================== 20280 20281 * `A member of a union object is accessed using a member of a 20282 different type (C90 6.3.2.3).' 20283 20284 The relevant bytes of the representation of the object are treated 20285 as an object of the type used for the access. *Note 20286 Type-punning::. This may be a trap representation. 20287 20288 * `Whether a "plain" `int' bit-field is treated as a `signed int' 20289 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 20290 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 20291 20292 By default it is treated as `signed int' but this may be changed 20293 by the `-funsigned-bitfields' option. 20294 20295 * `Allowable bit-field types other than `_Bool', `signed int', and 20296 `unsigned int' (C99 6.7.2.1).' 20297 20298 No other types are permitted in strictly conforming mode. 20299 20300 * `Whether a bit-field can straddle a storage-unit boundary (C90 20301 6.5.2.1, C99 6.7.2.1).' 20302 20303 Determined by ABI. 20304 20305 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 20306 C99 6.7.2.1).' 20307 20308 Determined by ABI. 20309 20310 * `The alignment of non-bit-field members of structures (C90 20311 6.5.2.1, C99 6.7.2.1).' 20312 20313 Determined by ABI. 20314 20315 * `The integer type compatible with each enumerated type (C90 20316 6.5.2.2, C99 6.7.2.2).' 20317 20318 Normally, the type is `unsigned int' if there are no negative 20319 values in the enumeration, otherwise `int'. If `-fshort-enums' is 20320 specified, then if there are negative values it is the first of 20321 `signed char', `short' and `int' that can represent all the 20322 values, otherwise it is the first of `unsigned char', `unsigned 20323 short' and `unsigned int' that can represent all the values. 20324 20325 On some targets, `-fshort-enums' is the default; this is 20326 determined by the ABI. 20327 20328 20329 20330File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 20331 203324.10 Qualifiers 20333=============== 20334 20335 * `What constitutes an access to an object that has 20336 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 20337 20338 Such an object is normally accessed by pointers and used for 20339 accessing hardware. In most expressions, it is intuitively 20340 obvious what is a read and what is a write. For example 20341 20342 volatile int *dst = SOMEVALUE; 20343 volatile int *src = SOMEOTHERVALUE; 20344 *dst = *src; 20345 20346 will cause a read of the volatile object pointed to by SRC and 20347 store the value into the volatile object pointed to by DST. There 20348 is no guarantee that these reads and writes are atomic, especially 20349 for objects larger than `int'. 20350 20351 However, if the volatile storage is not being modified, and the 20352 value of the volatile storage is not used, then the situation is 20353 less obvious. For example 20354 20355 volatile int *src = SOMEVALUE; 20356 *src; 20357 20358 According to the C standard, such an expression is an rvalue whose 20359 type is the unqualified version of its original type, i.e. `int'. 20360 Whether GCC interprets this as a read of the volatile object being 20361 pointed to or only as a request to evaluate the expression for its 20362 side-effects depends on this type. 20363 20364 If it is a scalar type, or on most targets an aggregate type whose 20365 only member object is of a scalar type, or a union type whose 20366 member objects are of scalar types, the expression is interpreted 20367 by GCC as a read of the volatile object; in the other cases, the 20368 expression is only evaluated for its side-effects. 20369 20370 20371 20372File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 20373 203744.11 Declarators 20375================ 20376 20377 * `The maximum number of declarators that may modify an arithmetic, 20378 structure or union type (C90 6.5.4).' 20379 20380 GCC is only limited by available memory. 20381 20382 20383 20384File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 20385 203864.12 Statements 20387=============== 20388 20389 * `The maximum number of `case' values in a `switch' statement (C90 20390 6.6.4.2).' 20391 20392 GCC is only limited by available memory. 20393 20394 20395 20396File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 20397 203984.13 Preprocessing directives 20399============================= 20400 20401*Note Implementation-defined behavior: (cpp)Implementation-defined 20402behavior, for details of these aspects of implementation-defined 20403behavior. 20404 20405 * `How sequences in both forms of header names are mapped to headers 20406 or external source file names (C90 6.1.7, C99 6.4.7).' 20407 20408 * `Whether the value of a character constant in a constant expression 20409 that controls conditional inclusion matches the value of the same 20410 character constant in the execution character set (C90 6.8.1, C99 20411 6.10.1).' 20412 20413 * `Whether the value of a single-character character constant in a 20414 constant expression that controls conditional inclusion may have a 20415 negative value (C90 6.8.1, C99 6.10.1).' 20416 20417 * `The places that are searched for an included `<>' delimited 20418 header, and how the places are specified or the header is 20419 identified (C90 6.8.2, C99 6.10.2).' 20420 20421 * `How the named source file is searched for in an included `""' 20422 delimited header (C90 6.8.2, C99 6.10.2).' 20423 20424 * `The method by which preprocessing tokens (possibly resulting from 20425 macro expansion) in a `#include' directive are combined into a 20426 header name (C90 6.8.2, C99 6.10.2).' 20427 20428 * `The nesting limit for `#include' processing (C90 6.8.2, C99 20429 6.10.2).' 20430 20431 * `Whether the `#' operator inserts a `\' character before the `\' 20432 character that begins a universal character name in a character 20433 constant or string literal (C99 6.10.3.2).' 20434 20435 * `The behavior on each recognized non-`STDC #pragma' directive (C90 20436 6.8.6, C99 6.10.6).' 20437 20438 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 20439 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 20440 details of target-specific pragmas. 20441 20442 * `The definitions for `__DATE__' and `__TIME__' when respectively, 20443 the date and time of translation are not available (C90 6.8.8, C99 20444 6.10.8).' 20445 20446 20447 20448File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 20449 204504.14 Library functions 20451====================== 20452 20453The behavior of most of these points are dependent on the implementation 20454of the C library, and are not defined by GCC itself. 20455 20456 * `The null pointer constant to which the macro `NULL' expands (C90 20457 7.1.6, C99 7.17).' 20458 20459 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 20460 provide the other headers which define `NULL' and some library 20461 implementations may use other definitions in those headers. 20462 20463 20464 20465File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 20466 204674.15 Architecture 20468================= 20469 20470 * `The values or expressions assigned to the macros specified in the 20471 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 20472 5.2.4.2, C99 7.18.2, C99 7.18.3).' 20473 20474 Determined by ABI. 20475 20476 * `The number, order, and encoding of bytes in any object (when not 20477 explicitly specified in this International Standard) (C99 20478 6.2.6.1).' 20479 20480 Determined by ABI. 20481 20482 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 20483 C99 6.5.3.4).' 20484 20485 Determined by ABI. 20486 20487 20488 20489File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 20490 204914.16 Locale-specific behavior 20492============================= 20493 20494The behavior of these points are dependent on the implementation of the 20495C library, and are not defined by GCC itself. 20496 20497 20498File: gcc.info, Node: C++ Implementation, Next: C Extensions, Prev: C Implementation, Up: Top 20499 205005 C++ Implementation-defined behavior 20501************************************* 20502 20503A conforming implementation of ISO C++ is required to document its 20504choice of behavior in each of the areas that are designated 20505"implementation defined". The following lists all such areas, along 20506with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC 2050714882:2003 standards. Some areas are only implementation-defined in 20508one version of the standard. 20509 20510 Some choices depend on the externally determined ABI for the platform 20511(including standard character encodings) which GCC follows; these are 20512listed as "determined by ABI" below. *Note Binary Compatibility: 20513Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 20514are documented in the preprocessor manual. *Note 20515Implementation-defined behavior: (cpp)Implementation-defined behavior. 20516Some choices are documented in the corresponding document for the C 20517language. *Note C Implementation::. Some choices are made by the 20518library and operating system (or other environment when compiling for a 20519freestanding environment); refer to their documentation for details. 20520 20521* Menu: 20522 20523* Conditionally-supported behavior:: 20524* Exception handling:: 20525 20526 20527File: gcc.info, Node: Conditionally-supported behavior, Next: Exception handling, Up: C++ Implementation 20528 205295.1 Conditionally-supported behavior 20530==================================== 20531 20532`Each implementation shall include documentation that identifies all 20533conditionally-supported constructs that it does not support (C++0x 205341.4).' 20535 20536 * `Whether an argument of class type with a non-trivial copy 20537 constructor or destructor can be passed to ... (C++0x 5.2.2).' 20538 20539 Such argument passing is not supported. 20540 20541 20542 20543File: gcc.info, Node: Exception handling, Prev: Conditionally-supported behavior, Up: C++ Implementation 20544 205455.2 Exception handling 20546====================== 20547 20548 * `In the situation where no matching handler is found, it is 20549 implementation-defined whether or not the stack is unwound before 20550 std::terminate() is called (C++98 15.5.1).' 20551 20552 The stack is not unwound before std::terminate is called. 20553 20554 20555 20556File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C++ Implementation, Up: Top 20557 205586 Extensions to the C Language Family 20559************************************* 20560 20561GNU C provides several language features not found in ISO standard C. 20562(The `-pedantic' option directs GCC to print a warning message if any 20563of these features is used.) To test for the availability of these 20564features in conditional compilation, check for a predefined macro 20565`__GNUC__', which is always defined under GCC. 20566 20567 These extensions are available in C and Objective-C. Most of them are 20568also available in C++. *Note Extensions to the C++ Language: C++ 20569Extensions, for extensions that apply _only_ to C++. 20570 20571 Some features that are in ISO C99 but not C90 or C++ are also, as 20572extensions, accepted by GCC in C90 mode and in C++. 20573 20574* Menu: 20575 20576* Statement Exprs:: Putting statements and declarations inside expressions. 20577* Local Labels:: Labels local to a block. 20578* Labels as Values:: Getting pointers to labels, and computed gotos. 20579* Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 20580* Constructing Calls:: Dispatching a call to another function. 20581* Typeof:: `typeof': referring to the type of an expression. 20582* Conditionals:: Omitting the middle operand of a `?:' expression. 20583* __int128:: 128-bit integers---`__int128'. 20584* Long Long:: Double-word integers---`long long int'. 20585* Complex:: Data types for complex numbers. 20586* Floating Types:: Additional Floating Types. 20587* Half-Precision:: Half-Precision Floating Point. 20588* Decimal Float:: Decimal Floating Types. 20589* Hex Floats:: Hexadecimal floating-point constants. 20590* Fixed-Point:: Fixed-Point Types. 20591* Named Address Spaces::Named address spaces. 20592* Zero Length:: Zero-length arrays. 20593* Empty Structures:: Structures with no members. 20594* Variable Length:: Arrays whose length is computed at run time. 20595* Variadic Macros:: Macros with a variable number of arguments. 20596* Escaped Newlines:: Slightly looser rules for escaped newlines. 20597* Subscripting:: Any array can be subscripted, even if not an lvalue. 20598* Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 20599* Initializers:: Non-constant initializers. 20600* Compound Literals:: Compound literals give structures, unions 20601 or arrays as values. 20602* Designated Inits:: Labeling elements of initializers. 20603* Case Ranges:: `case 1 ... 9' and such. 20604* Cast to Union:: Casting to union type from any member of the union. 20605* Mixed Declarations:: Mixing declarations and code. 20606* Function Attributes:: Declaring that functions have no side effects, 20607 or that they can never return. 20608* Attribute Syntax:: Formal syntax for attributes. 20609* Function Prototypes:: Prototype declarations and old-style definitions. 20610* C++ Comments:: C++ comments are recognized. 20611* Dollar Signs:: Dollar sign is allowed in identifiers. 20612* Character Escapes:: `\e' stands for the character <ESC>. 20613* Variable Attributes:: Specifying attributes of variables. 20614* Type Attributes:: Specifying attributes of types. 20615* Alignment:: Inquiring about the alignment of a type or variable. 20616* Inline:: Defining inline functions (as fast as macros). 20617* Volatiles:: What constitutes an access to a volatile object. 20618* Extended Asm:: Assembler instructions with C expressions as operands. 20619 (With them you can define ``built-in'' functions.) 20620* Constraints:: Constraints for asm operands 20621* Asm Labels:: Specifying the assembler name to use for a C symbol. 20622* Explicit Reg Vars:: Defining variables residing in specified registers. 20623* Alternate Keywords:: `__const__', `__asm__', etc., for header files. 20624* Incomplete Enums:: `enum foo;', with details to follow. 20625* Function Names:: Printable strings which are the name of the current 20626 function. 20627* Return Address:: Getting the return or frame address of a function. 20628* Vector Extensions:: Using vector instructions through built-in functions. 20629* Offsetof:: Special syntax for implementing `offsetof'. 20630* __sync Builtins:: Legacy built-in functions for atomic memory access. 20631* __atomic Builtins:: Atomic built-in functions with memory model. 20632* x86 specific memory model extensions for transactional memory:: x86 memory models. 20633* Object Size Checking:: Built-in functions for limited buffer overflow 20634 checking. 20635* Other Builtins:: Other built-in functions. 20636* Target Builtins:: Built-in functions specific to particular targets. 20637* Target Format Checks:: Format checks specific to particular targets. 20638* Pragmas:: Pragmas accepted by GCC. 20639* Unnamed Fields:: Unnamed struct/union fields within structs/unions. 20640* Thread-Local:: Per-thread variables. 20641* Binary constants:: Binary constants using the `0b' prefix. 20642 20643 20644File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 20645 206466.1 Statements and Declarations in Expressions 20647============================================== 20648 20649A compound statement enclosed in parentheses may appear as an expression 20650in GNU C. This allows you to use loops, switches, and local variables 20651within an expression. 20652 20653 Recall that a compound statement is a sequence of statements surrounded 20654by braces; in this construct, parentheses go around the braces. For 20655example: 20656 20657 ({ int y = foo (); int z; 20658 if (y > 0) z = y; 20659 else z = - y; 20660 z; }) 20661 20662is a valid (though slightly more complex than necessary) expression for 20663the absolute value of `foo ()'. 20664 20665 The last thing in the compound statement should be an expression 20666followed by a semicolon; the value of this subexpression serves as the 20667value of the entire construct. (If you use some other kind of statement 20668last within the braces, the construct has type `void', and thus 20669effectively no value.) 20670 20671 This feature is especially useful in making macro definitions "safe" 20672(so that they evaluate each operand exactly once). For example, the 20673"maximum" function is commonly defined as a macro in standard C as 20674follows: 20675 20676 #define max(a,b) ((a) > (b) ? (a) : (b)) 20677 20678But this definition computes either A or B twice, with bad results if 20679the operand has side effects. In GNU C, if you know the type of the 20680operands (here taken as `int'), you can define the macro safely as 20681follows: 20682 20683 #define maxint(a,b) \ 20684 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 20685 20686 Embedded statements are not allowed in constant expressions, such as 20687the value of an enumeration constant, the width of a bit-field, or the 20688initial value of a static variable. 20689 20690 If you don't know the type of the operand, you can still do this, but 20691you must use `typeof' (*note Typeof::). 20692 20693 In G++, the result value of a statement expression undergoes array and 20694function pointer decay, and is returned by value to the enclosing 20695expression. For instance, if `A' is a class, then 20696 20697 A a; 20698 20699 ({a;}).Foo () 20700 20701constructs a temporary `A' object to hold the result of the statement 20702expression, and that is used to invoke `Foo'. Therefore the `this' 20703pointer observed by `Foo' is not the address of `a'. 20704 20705 In a statement expression, any temporaries created within a statement 20706are destroyed at that statement's end. This makes statement 20707expressions inside macros slightly different from function calls. In 20708the latter case temporaries introduced during argument evaluation are 20709destroyed at the end of the statement that includes the function call. 20710In the statement expression case they are destroyed during the 20711statement expression. For instance, 20712 20713 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 20714 template<typename T> T function(T a) { T b = a; return b + 3; } 20715 20716 void foo () 20717 { 20718 macro (X ()); 20719 function (X ()); 20720 } 20721 20722has different places where temporaries are destroyed. For the `macro' 20723case, the temporary `X' is destroyed just after the initialization of 20724`b'. In the `function' case that temporary is destroyed when the 20725function returns. 20726 20727 These considerations mean that it is probably a bad idea to use 20728statement expressions of this form in header files that are designed to 20729work with C++. (Note that some versions of the GNU C Library contained 20730header files using statement expressions that lead to precisely this 20731bug.) 20732 20733 Jumping into a statement expression with `goto' or using a `switch' 20734statement outside the statement expression with a `case' or `default' 20735label inside the statement expression is not permitted. Jumping into a 20736statement expression with a computed `goto' (*note Labels as Values::) 20737has undefined behavior. Jumping out of a statement expression is 20738permitted, but if the statement expression is part of a larger 20739expression then it is unspecified which other subexpressions of that 20740expression have been evaluated except where the language definition 20741requires certain subexpressions to be evaluated before or after the 20742statement expression. In any case, as with a function call, the 20743evaluation of a statement expression is not interleaved with the 20744evaluation of other parts of the containing expression. For example, 20745 20746 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 20747 20748calls `foo' and `bar1' and does not call `baz' but may or may not call 20749`bar2'. If `bar2' is called, it is called after `foo' and before 20750`bar1'. 20751 20752 20753File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 20754 207556.2 Locally Declared Labels 20756=========================== 20757 20758GCC allows you to declare "local labels" in any nested block scope. A 20759local label is just like an ordinary label, but you can only reference 20760it (with a `goto' statement, or by taking its address) within the block 20761in which it is declared. 20762 20763 A local label declaration looks like this: 20764 20765 __label__ LABEL; 20766 20767or 20768 20769 __label__ LABEL1, LABEL2, /* ... */; 20770 20771 Local label declarations must come at the beginning of the block, 20772before any ordinary declarations or statements. 20773 20774 The label declaration defines the label _name_, but does not define 20775the label itself. You must do this in the usual way, with `LABEL:', 20776within the statements of the statement expression. 20777 20778 The local label feature is useful for complex macros. If a macro 20779contains nested loops, a `goto' can be useful for breaking out of them. 20780However, an ordinary label whose scope is the whole function cannot be 20781used: if the macro can be expanded several times in one function, the 20782label is multiply defined in that function. A local label avoids this 20783problem. For example: 20784 20785 #define SEARCH(value, array, target) \ 20786 do { \ 20787 __label__ found; \ 20788 typeof (target) _SEARCH_target = (target); \ 20789 typeof (*(array)) *_SEARCH_array = (array); \ 20790 int i, j; \ 20791 int value; \ 20792 for (i = 0; i < max; i++) \ 20793 for (j = 0; j < max; j++) \ 20794 if (_SEARCH_array[i][j] == _SEARCH_target) \ 20795 { (value) = i; goto found; } \ 20796 (value) = -1; \ 20797 found:; \ 20798 } while (0) 20799 20800 This could also be written using a statement expression: 20801 20802 #define SEARCH(array, target) \ 20803 ({ \ 20804 __label__ found; \ 20805 typeof (target) _SEARCH_target = (target); \ 20806 typeof (*(array)) *_SEARCH_array = (array); \ 20807 int i, j; \ 20808 int value; \ 20809 for (i = 0; i < max; i++) \ 20810 for (j = 0; j < max; j++) \ 20811 if (_SEARCH_array[i][j] == _SEARCH_target) \ 20812 { value = i; goto found; } \ 20813 value = -1; \ 20814 found: \ 20815 value; \ 20816 }) 20817 20818 Local label declarations also make the labels they declare visible to 20819nested functions, if there are any. *Note Nested Functions::, for 20820details. 20821 20822 20823File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 20824 208256.3 Labels as Values 20826==================== 20827 20828You can get the address of a label defined in the current function (or 20829a containing function) with the unary operator `&&'. The value has 20830type `void *'. This value is a constant and can be used wherever a 20831constant of that type is valid. For example: 20832 20833 void *ptr; 20834 /* ... */ 20835 ptr = &&foo; 20836 20837 To use these values, you need to be able to jump to one. This is done 20838with the computed goto statement(1), `goto *EXP;'. For example, 20839 20840 goto *ptr; 20841 20842Any expression of type `void *' is allowed. 20843 20844 One way of using these constants is in initializing a static array that 20845serves as a jump table: 20846 20847 static void *array[] = { &&foo, &&bar, &&hack }; 20848 20849Then you can select a label with indexing, like this: 20850 20851 goto *array[i]; 20852 20853Note that this does not check whether the subscript is in bounds--array 20854indexing in C never does that. 20855 20856 Such an array of label values serves a purpose much like that of the 20857`switch' statement. The `switch' statement is cleaner, so use that 20858rather than an array unless the problem does not fit a `switch' 20859statement very well. 20860 20861 Another use of label values is in an interpreter for threaded code. 20862The labels within the interpreter function can be stored in the 20863threaded code for super-fast dispatching. 20864 20865 You may not use this mechanism to jump to code in a different function. 20866If you do that, totally unpredictable things happen. The best way to 20867avoid this is to store the label address only in automatic variables and 20868never pass it as an argument. 20869 20870 An alternate way to write the above example is 20871 20872 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 20873 &&hack - &&foo }; 20874 goto *(&&foo + array[i]); 20875 20876This is more friendly to code living in shared libraries, as it reduces 20877the number of dynamic relocations that are needed, and by consequence, 20878allows the data to be read-only. This alternative with label 20879differences is not supported for the AVR target, please use the first 20880approach for AVR programs. 20881 20882 The `&&foo' expressions for the same label might have different values 20883if the containing function is inlined or cloned. If a program relies 20884on them being always the same, 20885`__attribute__((__noinline__,__noclone__))' should be used to prevent 20886inlining and cloning. If `&&foo' is used in a static variable 20887initializer, inlining and cloning is forbidden. 20888 20889 ---------- Footnotes ---------- 20890 20891 (1) The analogous feature in Fortran is called an assigned goto, but 20892that name seems inappropriate in C, where one can do more than simply 20893store label addresses in label variables. 20894 20895 20896File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 20897 208986.4 Nested Functions 20899==================== 20900 20901A "nested function" is a function defined inside another function. 20902Nested functions are supported as an extension in GNU C, but are not 20903supported by GNU C++. 20904 20905 The nested function's name is local to the block where it is defined. 20906For example, here we define a nested function named `square', and call 20907it twice: 20908 20909 foo (double a, double b) 20910 { 20911 double square (double z) { return z * z; } 20912 20913 return square (a) + square (b); 20914 } 20915 20916 The nested function can access all the variables of the containing 20917function that are visible at the point of its definition. This is 20918called "lexical scoping". For example, here we show a nested function 20919which uses an inherited variable named `offset': 20920 20921 bar (int *array, int offset, int size) 20922 { 20923 int access (int *array, int index) 20924 { return array[index + offset]; } 20925 int i; 20926 /* ... */ 20927 for (i = 0; i < size; i++) 20928 /* ... */ access (array, i) /* ... */ 20929 } 20930 20931 Nested function definitions are permitted within functions in the 20932places where variable definitions are allowed; that is, in any block, 20933mixed with the other declarations and statements in the block. 20934 20935 It is possible to call the nested function from outside the scope of 20936its name by storing its address or passing the address to another 20937function: 20938 20939 hack (int *array, int size) 20940 { 20941 void store (int index, int value) 20942 { array[index] = value; } 20943 20944 intermediate (store, size); 20945 } 20946 20947 Here, the function `intermediate' receives the address of `store' as 20948an argument. If `intermediate' calls `store', the arguments given to 20949`store' are used to store into `array'. But this technique works only 20950so long as the containing function (`hack', in this example) does not 20951exit. 20952 20953 If you try to call the nested function through its address after the 20954containing function exits, all hell breaks loose. If you try to call 20955it after a containing scope level exits, and if it refers to some of 20956the variables that are no longer in scope, you may be lucky, but it's 20957not wise to take the risk. If, however, the nested function does not 20958refer to anything that has gone out of scope, you should be safe. 20959 20960 GCC implements taking the address of a nested function using a 20961technique called "trampolines". This technique was described in 20962`Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference 20963Proceedings, October 17-21, 1988). 20964 20965 A nested function can jump to a label inherited from a containing 20966function, provided the label is explicitly declared in the containing 20967function (*note Local Labels::). Such a jump returns instantly to the 20968containing function, exiting the nested function that did the `goto' 20969and any intermediate functions as well. Here is an example: 20970 20971 bar (int *array, int offset, int size) 20972 { 20973 __label__ failure; 20974 int access (int *array, int index) 20975 { 20976 if (index > size) 20977 goto failure; 20978 return array[index + offset]; 20979 } 20980 int i; 20981 /* ... */ 20982 for (i = 0; i < size; i++) 20983 /* ... */ access (array, i) /* ... */ 20984 /* ... */ 20985 return 0; 20986 20987 /* Control comes here from `access' 20988 if it detects an error. */ 20989 failure: 20990 return -1; 20991 } 20992 20993 A nested function always has no linkage. Declaring one with `extern' 20994or `static' is erroneous. If you need to declare the nested function 20995before its definition, use `auto' (which is otherwise meaningless for 20996function declarations). 20997 20998 bar (int *array, int offset, int size) 20999 { 21000 __label__ failure; 21001 auto int access (int *, int); 21002 /* ... */ 21003 int access (int *array, int index) 21004 { 21005 if (index > size) 21006 goto failure; 21007 return array[index + offset]; 21008 } 21009 /* ... */ 21010 } 21011 21012 21013File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 21014 210156.5 Constructing Function Calls 21016=============================== 21017 21018Using the built-in functions described below, you can record the 21019arguments a function received, and call another function with the same 21020arguments, without knowing the number or types of the arguments. 21021 21022 You can also record the return value of that function call, and later 21023return that value, without knowing what data type the function tried to 21024return (as long as your caller expects that data type). 21025 21026 However, these built-in functions may interact badly with some 21027sophisticated features or other extensions of the language. It is, 21028therefore, not recommended to use them outside very simple functions 21029acting as mere forwarders for their arguments. 21030 21031 -- Built-in Function: void * __builtin_apply_args () 21032 This built-in function returns a pointer to data describing how to 21033 perform a call with the same arguments as are passed to the 21034 current function. 21035 21036 The function saves the arg pointer register, structure value 21037 address, and all registers that might be used to pass arguments to 21038 a function into a block of memory allocated on the stack. Then it 21039 returns the address of that block. 21040 21041 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 21042 *ARGUMENTS, size_t SIZE) 21043 This built-in function invokes FUNCTION with a copy of the 21044 parameters described by ARGUMENTS and SIZE. 21045 21046 The value of ARGUMENTS should be the value returned by 21047 `__builtin_apply_args'. The argument SIZE specifies the size of 21048 the stack argument data, in bytes. 21049 21050 This function returns a pointer to data describing how to return 21051 whatever value is returned by FUNCTION. The data is saved in a 21052 block of memory allocated on the stack. 21053 21054 It is not always simple to compute the proper value for SIZE. The 21055 value is used by `__builtin_apply' to compute the amount of data 21056 that should be pushed on the stack and copied from the incoming 21057 argument area. 21058 21059 -- Built-in Function: void __builtin_return (void *RESULT) 21060 This built-in function returns the value described by RESULT from 21061 the containing function. You should specify, for RESULT, a value 21062 returned by `__builtin_apply'. 21063 21064 -- Built-in Function: __builtin_va_arg_pack () 21065 This built-in function represents all anonymous arguments of an 21066 inline function. It can be used only in inline functions that are 21067 always inlined, never compiled as a separate function, such as 21068 those using `__attribute__ ((__always_inline__))' or 21069 `__attribute__ ((__gnu_inline__))' extern inline functions. It 21070 must be only passed as last argument to some other function with 21071 variable arguments. This is useful for writing small wrapper 21072 inlines for variable argument functions, when using preprocessor 21073 macros is undesirable. For example: 21074 extern int myprintf (FILE *f, const char *format, ...); 21075 extern inline __attribute__ ((__gnu_inline__)) int 21076 myprintf (FILE *f, const char *format, ...) 21077 { 21078 int r = fprintf (f, "myprintf: "); 21079 if (r < 0) 21080 return r; 21081 int s = fprintf (f, format, __builtin_va_arg_pack ()); 21082 if (s < 0) 21083 return s; 21084 return r + s; 21085 } 21086 21087 -- Built-in Function: size_t __builtin_va_arg_pack_len () 21088 This built-in function returns the number of anonymous arguments of 21089 an inline function. It can be used only in inline functions that 21090 are always inlined, never compiled as a separate function, such as 21091 those using `__attribute__ ((__always_inline__))' or 21092 `__attribute__ ((__gnu_inline__))' extern inline functions. For 21093 example following does link- or run-time checking of open 21094 arguments for optimized code: 21095 #ifdef __OPTIMIZE__ 21096 extern inline __attribute__((__gnu_inline__)) int 21097 myopen (const char *path, int oflag, ...) 21098 { 21099 if (__builtin_va_arg_pack_len () > 1) 21100 warn_open_too_many_arguments (); 21101 21102 if (__builtin_constant_p (oflag)) 21103 { 21104 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 21105 { 21106 warn_open_missing_mode (); 21107 return __open_2 (path, oflag); 21108 } 21109 return open (path, oflag, __builtin_va_arg_pack ()); 21110 } 21111 21112 if (__builtin_va_arg_pack_len () < 1) 21113 return __open_2 (path, oflag); 21114 21115 return open (path, oflag, __builtin_va_arg_pack ()); 21116 } 21117 #endif 21118 21119 21120File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 21121 211226.6 Referring to a Type with `typeof' 21123===================================== 21124 21125Another way to refer to the type of an expression is with `typeof'. 21126The syntax of using of this keyword looks like `sizeof', but the 21127construct acts semantically like a type name defined with `typedef'. 21128 21129 There are two ways of writing the argument to `typeof': with an 21130expression or with a type. Here is an example with an expression: 21131 21132 typeof (x[0](1)) 21133 21134This assumes that `x' is an array of pointers to functions; the type 21135described is that of the values of the functions. 21136 21137 Here is an example with a typename as the argument: 21138 21139 typeof (int *) 21140 21141Here the type described is that of pointers to `int'. 21142 21143 If you are writing a header file that must work when included in ISO C 21144programs, write `__typeof__' instead of `typeof'. *Note Alternate 21145Keywords::. 21146 21147 A `typeof' construct can be used anywhere a typedef name can be used. 21148For example, you can use it in a declaration, in a cast, or inside of 21149`sizeof' or `typeof'. 21150 21151 The operand of `typeof' is evaluated for its side effects if and only 21152if it is an expression of variably modified type or the name of such a 21153type. 21154 21155 `typeof' is often useful in conjunction with statement expressions 21156(*note Statement Exprs::). Here is how the two together can be used to 21157define a safe "maximum" macro which operates on any arithmetic type and 21158evaluates each of its arguments exactly once: 21159 21160 #define max(a,b) \ 21161 ({ typeof (a) _a = (a); \ 21162 typeof (b) _b = (b); \ 21163 _a > _b ? _a : _b; }) 21164 21165 The reason for using names that start with underscores for the local 21166variables is to avoid conflicts with variable names that occur within 21167the expressions that are substituted for `a' and `b'. Eventually we 21168hope to design a new form of declaration syntax that allows you to 21169declare variables whose scopes start only after their initializers; 21170this will be a more reliable way to prevent such conflicts. 21171 21172Some more examples of the use of `typeof': 21173 21174 * This declares `y' with the type of what `x' points to. 21175 21176 typeof (*x) y; 21177 21178 * This declares `y' as an array of such values. 21179 21180 typeof (*x) y[4]; 21181 21182 * This declares `y' as an array of pointers to characters: 21183 21184 typeof (typeof (char *)[4]) y; 21185 21186 It is equivalent to the following traditional C declaration: 21187 21188 char *y[4]; 21189 21190 To see the meaning of the declaration using `typeof', and why it 21191 might be a useful way to write, rewrite it with these macros: 21192 21193 #define pointer(T) typeof(T *) 21194 #define array(T, N) typeof(T [N]) 21195 21196 Now the declaration can be rewritten this way: 21197 21198 array (pointer (char), 4) y; 21199 21200 Thus, `array (pointer (char), 4)' is the type of arrays of 4 21201 pointers to `char'. 21202 21203 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 21204limited extension that permitted one to write 21205 21206 typedef T = EXPR; 21207 21208with the effect of declaring T to have the type of the expression EXPR. 21209This extension does not work with GCC 3 (versions between 3.0 and 3.2 21210crash; 3.2.1 and later give an error). Code that relies on it should 21211be rewritten to use `typeof': 21212 21213 typedef typeof(EXPR) T; 21214 21215This works with all versions of GCC. 21216 21217 21218File: gcc.info, Node: Conditionals, Next: __int128, Prev: Typeof, Up: C Extensions 21219 212206.7 Conditionals with Omitted Operands 21221====================================== 21222 21223The middle operand in a conditional expression may be omitted. Then if 21224the first operand is nonzero, its value is the value of the conditional 21225expression. 21226 21227 Therefore, the expression 21228 21229 x ? : y 21230 21231has the value of `x' if that is nonzero; otherwise, the value of `y'. 21232 21233 This example is perfectly equivalent to 21234 21235 x ? x : y 21236 21237In this simple case, the ability to omit the middle operand is not 21238especially useful. When it becomes useful is when the first operand 21239does, or may (if it is a macro argument), contain a side effect. Then 21240repeating the operand in the middle would perform the side effect 21241twice. Omitting the middle operand uses the value already computed 21242without the undesirable effects of recomputing it. 21243 21244 21245File: gcc.info, Node: __int128, Next: Long Long, Prev: Conditionals, Up: C Extensions 21246 212476.8 128-bit integers 21248==================== 21249 21250As an extension the integer scalar type `__int128' is supported for 21251targets which have an integer mode wide enough to hold 128 bits. 21252Simply write `__int128' for a signed 128-bit integer, or `unsigned 21253__int128' for an unsigned 128-bit integer. There is no support in GCC 21254for expressing an integer constant of type `__int128' for targets with 21255`long long' integer less than 128 bits wide. 21256 21257 21258File: gcc.info, Node: Long Long, Next: Complex, Prev: __int128, Up: C Extensions 21259 212606.9 Double-Word Integers 21261======================== 21262 21263ISO C99 supports data types for integers that are at least 64 bits wide, 21264and as an extension GCC supports them in C90 mode and in C++. Simply 21265write `long long int' for a signed integer, or `unsigned long long int' 21266for an unsigned integer. To make an integer constant of type `long 21267long int', add the suffix `LL' to the integer. To make an integer 21268constant of type `unsigned long long int', add the suffix `ULL' to the 21269integer. 21270 21271 You can use these types in arithmetic like any other integer types. 21272Addition, subtraction, and bitwise boolean operations on these types 21273are open-coded on all types of machines. Multiplication is open-coded 21274if the machine supports a fullword-to-doubleword widening multiply 21275instruction. Division and shifts are open-coded only on machines that 21276provide special support. The operations that are not open-coded use 21277special library routines that come with GCC. 21278 21279 There may be pitfalls when you use `long long' types for function 21280arguments without function prototypes. If a function expects type 21281`int' for its argument, and you pass a value of type `long long int', 21282confusion results because the caller and the subroutine disagree about 21283the number of bytes for the argument. Likewise, if the function 21284expects `long long int' and you pass `int'. The best way to avoid such 21285problems is to use prototypes. 21286 21287 21288File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions 21289 212906.10 Complex Numbers 21291==================== 21292 21293ISO C99 supports complex floating data types, and as an extension GCC 21294supports them in C90 mode and in C++. GCC also supports complex 21295integer data types which are not part of ISO C99. You can declare 21296complex types using the keyword `_Complex'. As an extension, the older 21297GNU keyword `__complex__' is also supported. 21298 21299 For example, `_Complex double x;' declares `x' as a variable whose 21300real part and imaginary part are both of type `double'. `_Complex 21301short int y;' declares `y' to have real and imaginary parts of type 21302`short int'; this is not likely to be useful, but it shows that the set 21303of complex types is complete. 21304 21305 To write a constant with a complex data type, use the suffix `i' or 21306`j' (either one; they are equivalent). For example, `2.5fi' has type 21307`_Complex float' and `3i' has type `_Complex int'. Such a constant 21308always has a pure imaginary value, but you can form any complex value 21309you like by adding one to a real constant. This is a GNU extension; if 21310you have an ISO C99 conforming C library (such as the GNU C Library), 21311and want to construct complex constants of floating type, you should 21312include `<complex.h>' and use the macros `I' or `_Complex_I' instead. 21313 21314 To extract the real part of a complex-valued expression EXP, write 21315`__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 21316part. This is a GNU extension; for values of floating type, you should 21317use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 21318`cimag' and `cimagl', declared in `<complex.h>' and also provided as 21319built-in functions by GCC. 21320 21321 The operator `~' performs complex conjugation when used on a value 21322with a complex type. This is a GNU extension; for values of floating 21323type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 21324declared in `<complex.h>' and also provided as built-in functions by 21325GCC. 21326 21327 GCC can allocate complex automatic variables in a noncontiguous 21328fashion; it's even possible for the real part to be in a register while 21329the imaginary part is on the stack (or vice versa). Only the DWARF 2 21330debug info format can represent this, so use of DWARF 2 is recommended. 21331If you are using the stabs debug info format, GCC describes a 21332noncontiguous complex variable as if it were two separate variables of 21333noncomplex type. If the variable's actual name is `foo', the two 21334fictitious variables are named `foo$real' and `foo$imag'. You can 21335examine and set these two fictitious variables with your debugger. 21336 21337 21338File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions 21339 213406.11 Additional Floating Types 21341============================== 21342 21343As an extension, GNU C supports additional floating types, `__float80' 21344and `__float128' to support 80-bit (`XFmode') and 128-bit (`TFmode') 21345floating types. Support for additional types includes the arithmetic 21346operators: add, subtract, multiply, divide; unary arithmetic operators; 21347relational operators; equality operators; and conversions to and from 21348integer and other floating types. Use a suffix `w' or `W' in a literal 21349constant of type `__float80' and `q' or `Q' for `_float128'. You can 21350declare complex types using the corresponding internal complex type, 21351`XCmode' for `__float80' type and `TCmode' for `__float128' type: 21352 21353 typedef _Complex float __attribute__((mode(TC))) _Complex128; 21354 typedef _Complex float __attribute__((mode(XC))) _Complex80; 21355 21356 Not all targets support additional floating-point types. `__float80' 21357and `__float128' types are supported on i386, x86_64 and IA-64 targets. 21358The `__float128' type is supported on hppa HP-UX targets. 21359 21360 21361File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions 21362 213636.12 Half-Precision Floating Point 21364================================== 21365 21366On ARM targets, GCC supports half-precision (16-bit) floating point via 21367the `__fp16' type. You must enable this type explicitly with the 21368`-mfp16-format' command-line option in order to use it. 21369 21370 ARM supports two incompatible representations for half-precision 21371floating-point values. You must choose one of the representations and 21372use it consistently in your program. 21373 21374 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format. 21375This format can represent normalized values in the range of 2^-14 to 2137665504. There are 11 bits of significand precision, approximately 3 21377decimal digits. 21378 21379 Specifying `-mfp16-format=alternative' selects the ARM alternative 21380format. This representation is similar to the IEEE format, but does 21381not support infinities or NaNs. Instead, the range of exponents is 21382extended, so that this format can represent normalized values in the 21383range of 2^-14 to 131008. 21384 21385 The `__fp16' type is a storage format only. For purposes of 21386arithmetic and other operations, `__fp16' values in C or C++ 21387expressions are automatically promoted to `float'. In addition, you 21388cannot declare a function with a return value or parameters of type 21389`__fp16'. 21390 21391 Note that conversions from `double' to `__fp16' involve an 21392intermediate conversion to `float'. Because of rounding, this can 21393sometimes produce a different result than a direct conversion. 21394 21395 ARM provides hardware support for conversions between `__fp16' and 21396`float' values as an extension to VFP and NEON (Advanced SIMD). GCC 21397generates code using these hardware instructions if you compile with 21398options to select an FPU that provides them; for example, 21399`-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the 21400`-mfp16-format' option to select a half-precision format. 21401 21402 Language-level support for the `__fp16' data type is independent of 21403whether GCC generates code using hardware floating-point instructions. 21404In cases where hardware support is not specified, GCC implements 21405conversions between `__fp16' and `float' values as library calls. 21406 21407 21408File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions 21409 214106.13 Decimal Floating Types 21411=========================== 21412 21413As an extension, GNU C supports decimal floating types as defined in 21414the N1312 draft of ISO/IEC WDTR24732. Support for decimal floating 21415types in GCC will evolve as the draft technical report changes. 21416Calling conventions for any target might also change. Not all targets 21417support decimal floating types. 21418 21419 The decimal floating types are `_Decimal32', `_Decimal64', and 21420`_Decimal128'. They use a radix of ten, unlike the floating types 21421`float', `double', and `long double' whose radix is not specified by 21422the C standard but is usually two. 21423 21424 Support for decimal floating types includes the arithmetic operators 21425add, subtract, multiply, divide; unary arithmetic operators; relational 21426operators; equality operators; and conversions to and from integer and 21427other floating types. Use a suffix `df' or `DF' in a literal constant 21428of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 21429for `_Decimal128'. 21430 21431 GCC support of decimal float as specified by the draft technical report 21432is incomplete: 21433 21434 * When the value of a decimal floating type cannot be represented in 21435 the integer type to which it is being converted, the result is 21436 undefined rather than the result value specified by the draft 21437 technical report. 21438 21439 * GCC does not provide the C library functionality associated with 21440 `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which 21441 must come from a separate C library implementation. Because of 21442 this the GNU C compiler does not define macro `__STDC_DEC_FP__' to 21443 indicate that the implementation conforms to the technical report. 21444 21445 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 21446the DWARF 2 debug information format. 21447 21448 21449File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 21450 214516.14 Hex Floats 21452=============== 21453 21454ISO C99 supports floating-point numbers written not only in the usual 21455decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 21456written in hexadecimal format. As a GNU extension, GCC supports this 21457in C90 mode (except in some cases when strictly conforming) and in C++. 21458In that format the `0x' hex introducer and the `p' or `P' exponent 21459field are mandatory. The exponent is a decimal number that indicates 21460the power of 2 by which the significant part is multiplied. Thus 21461`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 21462is the same as `1.55e1'. 21463 21464 Unlike for floating-point numbers in the decimal notation the exponent 21465is always required in the hexadecimal notation. Otherwise the compiler 21466would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 21467could mean `1.0f' or `1.9375' since `f' is also the extension for 21468floating-point constants of type `float'. 21469 21470 21471File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions 21472 214736.15 Fixed-Point Types 21474====================== 21475 21476As an extension, GNU C supports fixed-point types as defined in the 21477N1169 draft of ISO/IEC DTR 18037. Support for fixed-point types in GCC 21478will evolve as the draft technical report changes. Calling conventions 21479for any target might also change. Not all targets support fixed-point 21480types. 21481 21482 The fixed-point types are `short _Fract', `_Fract', `long _Fract', 21483`long long _Fract', `unsigned short _Fract', `unsigned _Fract', 21484`unsigned long _Fract', `unsigned long long _Fract', `_Sat short 21485_Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract', 21486`_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned 21487long _Fract', `_Sat unsigned long long _Fract', `short _Accum', 21488`_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum', 21489`unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum', 21490`_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long 21491_Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat 21492unsigned long _Accum', `_Sat unsigned long long _Accum'. 21493 21494 Fixed-point data values contain fractional and optional integral parts. 21495The format of fixed-point data varies and depends on the target machine. 21496 21497 Support for fixed-point types includes: 21498 * prefix and postfix increment and decrement operators (`++', `--') 21499 21500 * unary arithmetic operators (`+', `-', `!') 21501 21502 * binary arithmetic operators (`+', `-', `*', `/') 21503 21504 * binary shift operators (`<<', `>>') 21505 21506 * relational operators (`<', `<=', `>=', `>') 21507 21508 * equality operators (`==', `!=') 21509 21510 * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=') 21511 21512 * conversions to and from integer, floating-point, or fixed-point 21513 types 21514 21515 Use a suffix in a fixed-point literal constant: 21516 * `hr' or `HR' for `short _Fract' and `_Sat short _Fract' 21517 21518 * `r' or `R' for `_Fract' and `_Sat _Fract' 21519 21520 * `lr' or `LR' for `long _Fract' and `_Sat long _Fract' 21521 21522 * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract' 21523 21524 * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned 21525 short _Fract' 21526 21527 * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract' 21528 21529 * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long 21530 _Fract' 21531 21532 * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat 21533 unsigned long long _Fract' 21534 21535 * `hk' or `HK' for `short _Accum' and `_Sat short _Accum' 21536 21537 * `k' or `K' for `_Accum' and `_Sat _Accum' 21538 21539 * `lk' or `LK' for `long _Accum' and `_Sat long _Accum' 21540 21541 * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum' 21542 21543 * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned 21544 short _Accum' 21545 21546 * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum' 21547 21548 * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long 21549 _Accum' 21550 21551 * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat 21552 unsigned long long _Accum' 21553 21554 GCC support of fixed-point types as specified by the draft technical 21555report is incomplete: 21556 21557 * Pragmas to control overflow and rounding behaviors are not 21558 implemented. 21559 21560 Fixed-point types are supported by the DWARF 2 debug information 21561format. 21562 21563 21564File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions 21565 215666.16 Named Address Spaces 21567========================= 21568 21569As an extension, GNU C supports named address spaces as defined in the 21570N1275 draft of ISO/IEC DTR 18037. Support for named address spaces in 21571GCC will evolve as the draft technical report changes. Calling 21572conventions for any target might also change. At present, only the 21573AVR, SPU, M32C, and RL78 targets support address spaces other than the 21574generic address space. 21575 21576 Address space identifiers may be used exactly like any other C type 21577qualifier (e.g., `const' or `volatile'). See the N1275 document for 21578more details. 21579 215806.16.1 AVR Named Address Spaces 21581------------------------------- 21582 21583On the AVR target, there are several address spaces that can be used in 21584order to put read-only data into the flash memory and access that data 21585by means of the special instructions `LPM' or `ELPM' needed to read 21586from flash. 21587 21588 Per default, any data including read-only data is located in RAM (the 21589generic address space) so that non-generic address spaces are needed to 21590locate read-only data in flash memory _and_ to generate the right 21591instructions to access this data without using (inline) assembler code. 21592 21593`__flash' 21594 The `__flash' qualifier locates data in the `.progmem.data' 21595 section. Data is read using the `LPM' instruction. Pointers to 21596 this address space are 16 bits wide. 21597 21598`__flash1' 21599`__flash2' 21600`__flash3' 21601`__flash4' 21602`__flash5' 21603 These are 16-bit address spaces locating data in section 21604 `.progmemN.data' where N refers to address space `__flashN'. The 21605 compiler sets the `RAMPZ' segment register appropriately before 21606 reading data by means of the `ELPM' instruction. 21607 21608`__memx' 21609 This is a 24-bit address space that linearizes flash and RAM: If 21610 the high bit of the address is set, data is read from RAM using 21611 the lower two bytes as RAM address. If the high bit of the 21612 address is clear, data is read from flash with `RAMPZ' set 21613 according to the high byte of the address. *Note 21614 `__builtin_avr_flash_segment': AVR Built-in Functions. 21615 21616 Objects in this address space are located in `.progmemx.data'. 21617 21618 Example 21619 21620 char my_read (const __flash char ** p) 21621 { 21622 /* p is a pointer to RAM that points to a pointer to flash. 21623 The first indirection of p reads that flash pointer 21624 from RAM and the second indirection reads a char from this 21625 flash address. */ 21626 21627 return **p; 21628 } 21629 21630 /* Locate array[] in flash memory */ 21631 const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 }; 21632 21633 int i = 1; 21634 21635 int main (void) 21636 { 21637 /* Return 17 by reading from flash memory */ 21638 return array[array[i]]; 21639 } 21640 21641For each named address space supported by avr-gcc there is an equally 21642named but uppercase built-in macro defined. The purpose is to 21643facilitate testing if respective address space support is available or 21644not: 21645 21646 #ifdef __FLASH 21647 const __flash int var = 1; 21648 21649 int read_var (void) 21650 { 21651 return var; 21652 } 21653 #else 21654 #include <avr/pgmspace.h> /* From AVR-LibC */ 21655 21656 const int var PROGMEM = 1; 21657 21658 int read_var (void) 21659 { 21660 return (int) pgm_read_word (&var); 21661 } 21662 #endif /* __FLASH */ 21663 21664Notice that attribute *note `progmem': AVR Variable Attributes. 21665locates data in flash but accesses to these data read from generic 21666address space, i.e. from RAM, so that you need special accessors like 21667`pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) 21668together with attribute `progmem'. 21669 21670Limitations and caveats 21671 21672 * Reading across the 64 KiB section boundary of the `__flash' or 21673 `__flashN' address spaces shows undefined behavior. The only 21674 address space that supports reading across the 64 KiB flash 21675 segment boundaries is `__memx'. 21676 21677 * If you use one of the `__flashN' address spaces you must arrange 21678 your linker script to locate the `.progmemN.data' sections 21679 according to your needs. 21680 21681 * Any data or pointers to the non-generic address spaces must be 21682 qualified as `const', i.e. as read-only data. This still applies 21683 if the data in one of these address spaces like software version 21684 number or calibration lookup table are intended to be changed 21685 after load time by, say, a boot loader. In this case the right 21686 qualification is `const' `volatile' so that the compiler must not 21687 optimize away known values or insert them as immediates into 21688 operands of instructions. 21689 21690 * The following code initializes a variable `pfoo' located in static 21691 storage with a 24-bit address: 21692 extern const __memx char foo; 21693 const __memx void *pfoo = &foo; 21694 21695 Such code requires at least binutils 2.23, see 21696 PR13503 (http://sourceware.org/PR13503). 21697 21698 216996.16.2 M32C Named Address Spaces 21700-------------------------------- 21701 21702On the M32C target, with the R8C and M16C CPU variants, variables 21703qualified with `__far' are accessed using 32-bit addresses in order to 21704access memory beyond the first 64 Ki bytes. If `__far' is used with 21705the M32CM or M32C CPU variants, it has no effect. 21706 217076.16.3 RL78 Named Address Spaces 21708-------------------------------- 21709 21710On the RL78 target, variables qualified with `__far' are accessed with 2171132-bit pointers (20-bit addresses) rather than the default 16-bit 21712addresses. Non-far variables are assumed to appear in the topmost 2171364 KiB of the address space. 21714 217156.16.4 SPU Named Address Spaces 21716------------------------------- 21717 21718On the SPU target variables may be declared as belonging to another 21719address space by qualifying the type with the `__ea' address space 21720identifier: 21721 21722 extern int __ea i; 21723 21724The compiler generates special code to access the variable `i'. It may 21725use runtime library support, or generate special machine instructions 21726to access that address space. 21727 21728 21729File: gcc.info, Node: Zero Length, Next: Empty Structures, Prev: Named Address Spaces, Up: C Extensions 21730 217316.17 Arrays of Length Zero 21732========================== 21733 21734Zero-length arrays are allowed in GNU C. They are very useful as the 21735last element of a structure that is really a header for a 21736variable-length object: 21737 21738 struct line { 21739 int length; 21740 char contents[0]; 21741 }; 21742 21743 struct line *thisline = (struct line *) 21744 malloc (sizeof (struct line) + this_length); 21745 thisline->length = this_length; 21746 21747 In ISO C90, you would have to give `contents' a length of 1, which 21748means either you waste space or complicate the argument to `malloc'. 21749 21750 In ISO C99, you would use a "flexible array member", which is slightly 21751different in syntax and semantics: 21752 21753 * Flexible array members are written as `contents[]' without the `0'. 21754 21755 * Flexible array members have incomplete type, and so the `sizeof' 21756 operator may not be applied. As a quirk of the original 21757 implementation of zero-length arrays, `sizeof' evaluates to zero. 21758 21759 * Flexible array members may only appear as the last member of a 21760 `struct' that is otherwise non-empty. 21761 21762 * A structure containing a flexible array member, or a union 21763 containing such a structure (possibly recursively), may not be a 21764 member of a structure or an element of an array. (However, these 21765 uses are permitted by GCC as extensions.) 21766 21767 GCC versions before 3.0 allowed zero-length arrays to be statically 21768initialized, as if they were flexible arrays. In addition to those 21769cases that were useful, it also allowed initializations in situations 21770that would corrupt later data. Non-empty initialization of zero-length 21771arrays is now treated like any case where there are more initializer 21772elements than the array holds, in that a suitable warning about "excess 21773elements in array" is given, and the excess elements (all of them, in 21774this case) are ignored. 21775 21776 Instead GCC allows static initialization of flexible array members. 21777This is equivalent to defining a new structure containing the original 21778structure followed by an array of sufficient size to contain the data. 21779E.g. in the following, `f1' is constructed as if it were declared like 21780`f2'. 21781 21782 struct f1 { 21783 int x; int y[]; 21784 } f1 = { 1, { 2, 3, 4 } }; 21785 21786 struct f2 { 21787 struct f1 f1; int data[3]; 21788 } f2 = { { 1 }, { 2, 3, 4 } }; 21789 21790The convenience of this extension is that `f1' has the desired type, 21791eliminating the need to consistently refer to `f2.f1'. 21792 21793 This has symmetry with normal static arrays, in that an array of 21794unknown size is also written with `[]'. 21795 21796 Of course, this extension only makes sense if the extra data comes at 21797the end of a top-level object, as otherwise we would be overwriting 21798data at subsequent offsets. To avoid undue complication and confusion 21799with initialization of deeply nested arrays, we simply disallow any 21800non-empty initialization except when the structure is the top-level 21801object. For example: 21802 21803 struct foo { int x; int y[]; }; 21804 struct bar { struct foo z; }; 21805 21806 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 21807 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 21808 struct bar c = { { 1, { } } }; // Valid. 21809 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 21810 21811 21812File: gcc.info, Node: Empty Structures, Next: Variable Length, Prev: Zero Length, Up: C Extensions 21813 218146.18 Structures With No Members 21815=============================== 21816 21817GCC permits a C structure to have no members: 21818 21819 struct empty { 21820 }; 21821 21822 The structure has size zero. In C++, empty structures are part of the 21823language. G++ treats empty structures as if they had a single member 21824of type `char'. 21825 21826 21827File: gcc.info, Node: Variable Length, Next: Variadic Macros, Prev: Empty Structures, Up: C Extensions 21828 218296.19 Arrays of Variable Length 21830============================== 21831 21832Variable-length automatic arrays are allowed in ISO C99, and as an 21833extension GCC accepts them in C90 mode and in C++. These arrays are 21834declared like any other automatic arrays, but with a length that is not 21835a constant expression. The storage is allocated at the point of 21836declaration and deallocated when the block scope containing the 21837declaration exits. For example: 21838 21839 FILE * 21840 concat_fopen (char *s1, char *s2, char *mode) 21841 { 21842 char str[strlen (s1) + strlen (s2) + 1]; 21843 strcpy (str, s1); 21844 strcat (str, s2); 21845 return fopen (str, mode); 21846 } 21847 21848 Jumping or breaking out of the scope of the array name deallocates the 21849storage. Jumping into the scope is not allowed; you get an error 21850message for it. 21851 21852 You can use the function `alloca' to get an effect much like 21853variable-length arrays. The function `alloca' is available in many 21854other C implementations (but not in all). On the other hand, 21855variable-length arrays are more elegant. 21856 21857 There are other differences between these two methods. Space allocated 21858with `alloca' exists until the containing _function_ returns. The 21859space for a variable-length array is deallocated as soon as the array 21860name's scope ends. (If you use both variable-length arrays and 21861`alloca' in the same function, deallocation of a variable-length array 21862also deallocates anything more recently allocated with `alloca'.) 21863 21864 You can also use variable-length arrays as arguments to functions: 21865 21866 struct entry 21867 tester (int len, char data[len][len]) 21868 { 21869 /* ... */ 21870 } 21871 21872 The length of an array is computed once when the storage is allocated 21873and is remembered for the scope of the array in case you access it with 21874`sizeof'. 21875 21876 If you want to pass the array first and the length afterward, you can 21877use a forward declaration in the parameter list--another GNU extension. 21878 21879 struct entry 21880 tester (int len; char data[len][len], int len) 21881 { 21882 /* ... */ 21883 } 21884 21885 The `int len' before the semicolon is a "parameter forward 21886declaration", and it serves the purpose of making the name `len' known 21887when the declaration of `data' is parsed. 21888 21889 You can write any number of such parameter forward declarations in the 21890parameter list. They can be separated by commas or semicolons, but the 21891last one must end with a semicolon, which is followed by the "real" 21892parameter declarations. Each forward declaration must match a "real" 21893declaration in parameter name and data type. ISO C99 does not support 21894parameter forward declarations. 21895 21896 21897File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Variable Length, Up: C Extensions 21898 218996.20 Macros with a Variable Number of Arguments. 21900================================================ 21901 21902In the ISO C standard of 1999, a macro can be declared to accept a 21903variable number of arguments much as a function can. The syntax for 21904defining the macro is similar to that of a function. Here is an 21905example: 21906 21907 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 21908 21909Here `...' is a "variable argument". In the invocation of such a 21910macro, it represents the zero or more tokens until the closing 21911parenthesis that ends the invocation, including any commas. This set of 21912tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 21913it appears. See the CPP manual for more information. 21914 21915 GCC has long supported variadic macros, and used a different syntax 21916that allowed you to give a name to the variable arguments just like any 21917other argument. Here is an example: 21918 21919 #define debug(format, args...) fprintf (stderr, format, args) 21920 21921This is in all ways equivalent to the ISO C example above, but arguably 21922more readable and descriptive. 21923 21924 GNU CPP has two further variadic macro extensions, and permits them to 21925be used with either of the above forms of macro definition. 21926 21927 In standard C, you are not allowed to leave the variable argument out 21928entirely; but you are allowed to pass an empty argument. For example, 21929this invocation is invalid in ISO C, because there is no comma after 21930the string: 21931 21932 debug ("A message") 21933 21934 GNU CPP permits you to completely omit the variable arguments in this 21935way. In the above examples, the compiler would complain, though since 21936the expansion of the macro still has the extra comma after the format 21937string. 21938 21939 To help solve this problem, CPP behaves specially for variable 21940arguments used with the token paste operator, `##'. If instead you 21941write 21942 21943 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 21944 21945and if the variable arguments are omitted or empty, the `##' operator 21946causes the preprocessor to remove the comma before it. If you do 21947provide some variable arguments in your macro invocation, GNU CPP does 21948not complain about the paste operation and instead places the variable 21949arguments after the comma. Just like any other pasted macro argument, 21950these arguments are not macro expanded. 21951 21952 21953File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 21954 219556.21 Slightly Looser Rules for Escaped Newlines 21956=============================================== 21957 21958Recently, the preprocessor has relaxed its treatment of escaped 21959newlines. Previously, the newline had to immediately follow a 21960backslash. The current implementation allows whitespace in the form of 21961spaces, horizontal and vertical tabs, and form feeds between the 21962backslash and the subsequent newline. The preprocessor issues a 21963warning, but treats it as a valid escaped newline and combines the two 21964lines to form a single logical line. This works within comments and 21965tokens, as well as between tokens. Comments are _not_ treated as 21966whitespace for the purposes of this relaxation, since they have not yet 21967been replaced with spaces. 21968 21969 21970File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 21971 219726.22 Non-Lvalue Arrays May Have Subscripts 21973========================================== 21974 21975In ISO C99, arrays that are not lvalues still decay to pointers, and 21976may be subscripted, although they may not be modified or used after the 21977next sequence point and the unary `&' operator may not be applied to 21978them. As an extension, GNU C allows such arrays to be subscripted in 21979C90 mode, though otherwise they do not decay to pointers outside C99 21980mode. For example, this is valid in GNU C though not valid in C90: 21981 21982 struct foo {int a[4];}; 21983 21984 struct foo f(); 21985 21986 bar (int index) 21987 { 21988 return f().a[index]; 21989 } 21990 21991 21992File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 21993 219946.23 Arithmetic on `void'- and Function-Pointers 21995================================================ 21996 21997In GNU C, addition and subtraction operations are supported on pointers 21998to `void' and on pointers to functions. This is done by treating the 21999size of a `void' or of a function as 1. 22000 22001 A consequence of this is that `sizeof' is also allowed on `void' and 22002on function types, and returns 1. 22003 22004 The option `-Wpointer-arith' requests a warning if these extensions 22005are used. 22006 22007 22008File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 22009 220106.24 Non-Constant Initializers 22011============================== 22012 22013As in standard C++ and ISO C99, the elements of an aggregate 22014initializer for an automatic variable are not required to be constant 22015expressions in GNU C. Here is an example of an initializer with 22016run-time varying elements: 22017 22018 foo (float f, float g) 22019 { 22020 float beat_freqs[2] = { f-g, f+g }; 22021 /* ... */ 22022 } 22023 22024 22025File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 22026 220276.25 Compound Literals 22028====================== 22029 22030ISO C99 supports compound literals. A compound literal looks like a 22031cast containing an initializer. Its value is an object of the type 22032specified in the cast, containing the elements specified in the 22033initializer; it is an lvalue. As an extension, GCC supports compound 22034literals in C90 mode and in C++, though the semantics are somewhat 22035different in C++. 22036 22037 Usually, the specified type is a structure. Assume that `struct foo' 22038and `structure' are declared as shown: 22039 22040 struct foo {int a; char b[2];} structure; 22041 22042Here is an example of constructing a `struct foo' with a compound 22043literal: 22044 22045 structure = ((struct foo) {x + y, 'a', 0}); 22046 22047This is equivalent to writing the following: 22048 22049 { 22050 struct foo temp = {x + y, 'a', 0}; 22051 structure = temp; 22052 } 22053 22054 You can also construct an array, though this is dangerous in C++, as 22055explained below. If all the elements of the compound literal are (made 22056up of) simple constant expressions, suitable for use in initializers of 22057objects of static storage duration, then the compound literal can be 22058coerced to a pointer to its first element and used in such an 22059initializer, as shown here: 22060 22061 char **foo = (char *[]) { "x", "y", "z" }; 22062 22063 Compound literals for scalar types and union types are also allowed, 22064but then the compound literal is equivalent to a cast. 22065 22066 As a GNU extension, GCC allows initialization of objects with static 22067storage duration by compound literals (which is not possible in ISO 22068C99, because the initializer is not a constant). It is handled as if 22069the object is initialized only with the bracket enclosed list if the 22070types of the compound literal and the object match. The initializer 22071list of the compound literal must be constant. If the object being 22072initialized has array type of unknown size, the size is determined by 22073compound literal size. 22074 22075 static struct foo x = (struct foo) {1, 'a', 'b'}; 22076 static int y[] = (int []) {1, 2, 3}; 22077 static int z[] = (int [3]) {1}; 22078 22079The above lines are equivalent to the following: 22080 static struct foo x = {1, 'a', 'b'}; 22081 static int y[] = {1, 2, 3}; 22082 static int z[] = {1, 0, 0}; 22083 22084 In C, a compound literal designates an unnamed object with static or 22085automatic storage duration. In C++, a compound literal designates a 22086temporary object, which only lives until the end of its 22087full-expression. As a result, well-defined C code that takes the 22088address of a subobject of a compound literal can be undefined in C++. 22089For instance, if the array compound literal example above appeared 22090inside a function, any subsequent use of `foo' in C++ has undefined 22091behavior because the lifetime of the array ends after the declaration 22092of `foo'. As a result, the C++ compiler now rejects the conversion of 22093a temporary array to a pointer. 22094 22095 As an optimization, the C++ compiler sometimes gives array compound 22096literals longer lifetimes: when the array either appears outside a 22097function or has const-qualified type. If `foo' and its initializer had 22098elements of `char *const' type rather than `char *', or if `foo' were a 22099global variable, the array would have static storage duration. But it 22100is probably safest just to avoid the use of array compound literals in 22101code compiled as C++. 22102 22103 22104File: gcc.info, Node: Designated Inits, Next: Case Ranges, Prev: Compound Literals, Up: C Extensions 22105 221066.26 Designated Initializers 22107============================ 22108 22109Standard C90 requires the elements of an initializer to appear in a 22110fixed order, the same as the order of the elements in the array or 22111structure being initialized. 22112 22113 In ISO C99 you can give the elements in any order, specifying the array 22114indices or structure field names they apply to, and GNU C allows this as 22115an extension in C90 mode as well. This extension is not implemented in 22116GNU C++. 22117 22118 To specify an array index, write `[INDEX] =' before the element value. 22119For example, 22120 22121 int a[6] = { [4] = 29, [2] = 15 }; 22122 22123is equivalent to 22124 22125 int a[6] = { 0, 0, 15, 0, 29, 0 }; 22126 22127The index values must be constant expressions, even if the array being 22128initialized is automatic. 22129 22130 An alternative syntax for this that has been obsolete since GCC 2.5 but 22131GCC still accepts is to write `[INDEX]' before the element value, with 22132no `='. 22133 22134 To initialize a range of elements to the same value, write `[FIRST ... 22135LAST] = VALUE'. This is a GNU extension. For example, 22136 22137 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 22138 22139If the value in it has side-effects, the side-effects happen only once, 22140not for each initialized field by the range initializer. 22141 22142Note that the length of the array is the highest value specified plus 22143one. 22144 22145 In a structure initializer, specify the name of a field to initialize 22146with `.FIELDNAME =' before the element value. For example, given the 22147following structure, 22148 22149 struct point { int x, y; }; 22150 22151the following initialization 22152 22153 struct point p = { .y = yvalue, .x = xvalue }; 22154 22155is equivalent to 22156 22157 struct point p = { xvalue, yvalue }; 22158 22159 Another syntax that has the same meaning, obsolete since GCC 2.5, is 22160`FIELDNAME:', as shown here: 22161 22162 struct point p = { y: yvalue, x: xvalue }; 22163 22164 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 22165also use a designator (or the obsolete colon syntax) when initializing 22166a union, to specify which element of the union should be used. For 22167example, 22168 22169 union foo { int i; double d; }; 22170 22171 union foo f = { .d = 4 }; 22172 22173converts 4 to a `double' to store it in the union using the second 22174element. By contrast, casting 4 to type `union foo' stores it into the 22175union as the integer `i', since it is an integer. (*Note Cast to 22176Union::.) 22177 22178 You can combine this technique of naming elements with ordinary C 22179initialization of successive elements. Each initializer element that 22180does not have a designator applies to the next consecutive element of 22181the array or structure. For example, 22182 22183 int a[6] = { [1] = v1, v2, [4] = v4 }; 22184 22185is equivalent to 22186 22187 int a[6] = { 0, v1, v2, 0, v4, 0 }; 22188 22189 Labeling the elements of an array initializer is especially useful 22190when the indices are characters or belong to an `enum' type. For 22191example: 22192 22193 int whitespace[256] 22194 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 22195 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 22196 22197 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 22198before an `=' to specify a nested subobject to initialize; the list is 22199taken relative to the subobject corresponding to the closest 22200surrounding brace pair. For example, with the `struct point' 22201declaration above: 22202 22203 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 22204 22205If the same field is initialized multiple times, it has the value from 22206the last initialization. If any such overridden initialization has 22207side-effect, it is unspecified whether the side-effect happens or not. 22208Currently, GCC discards them and issues a warning. 22209 22210 22211File: gcc.info, Node: Case Ranges, Next: Cast to Union, Prev: Designated Inits, Up: C Extensions 22212 222136.27 Case Ranges 22214================ 22215 22216You can specify a range of consecutive values in a single `case' label, 22217like this: 22218 22219 case LOW ... HIGH: 22220 22221This has the same effect as the proper number of individual `case' 22222labels, one for each integer value from LOW to HIGH, inclusive. 22223 22224 This feature is especially useful for ranges of ASCII character codes: 22225 22226 case 'A' ... 'Z': 22227 22228 *Be careful:* Write spaces around the `...', for otherwise it may be 22229parsed wrong when you use it with integer values. For example, write 22230this: 22231 22232 case 1 ... 5: 22233 22234rather than this: 22235 22236 case 1...5: 22237 22238 22239File: gcc.info, Node: Cast to Union, Next: Mixed Declarations, Prev: Case Ranges, Up: C Extensions 22240 222416.28 Cast to a Union Type 22242========================= 22243 22244A cast to union type is similar to other casts, except that the type 22245specified is a union type. You can specify the type either with `union 22246TAG' or with a typedef name. A cast to union is actually a 22247constructor, not a cast, and hence does not yield an lvalue like normal 22248casts. (*Note Compound Literals::.) 22249 22250 The types that may be cast to the union type are those of the members 22251of the union. Thus, given the following union and variables: 22252 22253 union foo { int i; double d; }; 22254 int x; 22255 double y; 22256 22257both `x' and `y' can be cast to type `union foo'. 22258 22259 Using the cast as the right-hand side of an assignment to a variable of 22260union type is equivalent to storing in a member of the union: 22261 22262 union foo u; 22263 /* ... */ 22264 u = (union foo) x == u.i = x 22265 u = (union foo) y == u.d = y 22266 22267 You can also use the union cast as a function argument: 22268 22269 void hack (union foo); 22270 /* ... */ 22271 hack ((union foo) x); 22272 22273 22274File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Cast to Union, Up: C Extensions 22275 222766.29 Mixed Declarations and Code 22277================================ 22278 22279ISO C99 and ISO C++ allow declarations and code to be freely mixed 22280within compound statements. As an extension, GNU C also allows this in 22281C90 mode. For example, you could do: 22282 22283 int i; 22284 /* ... */ 22285 i++; 22286 int j = i + 2; 22287 22288 Each identifier is visible from where it is declared until the end of 22289the enclosing block. 22290 22291 22292File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 22293 222946.30 Declaring Attributes of Functions 22295====================================== 22296 22297In GNU C, you declare certain things about functions called in your 22298program which help the compiler optimize function calls and check your 22299code more carefully. 22300 22301 The keyword `__attribute__' allows you to specify special attributes 22302when making a declaration. This keyword is followed by an attribute 22303specification inside double parentheses. The following attributes are 22304currently defined for functions on all targets: `aligned', 22305`alloc_size', `noreturn', `returns_twice', `noinline', `noclone', 22306`always_inline', `flatten', `pure', `const', `nothrow', `sentinel', 22307`format', `format_arg', `no_instrument_function', `no_split_stack', 22308`section', `constructor', `destructor', `used', `unused', `deprecated', 22309`weak', `malloc', `alias', `ifunc', `warn_unused_result', `nonnull', 22310`gnu_inline', `externally_visible', `hot', `cold', `artificial', 22311`no_sanitize_address', `no_address_safety_analysis', `error' and 22312`warning'. Several other attributes are defined for functions on 22313particular target systems. Other attributes, including `section' are 22314supported for variables declarations (*note Variable Attributes::) and 22315for types (*note Type Attributes::). 22316 22317 GCC plugins may provide their own attributes. 22318 22319 You may also specify attributes with `__' preceding and following each 22320keyword. This allows you to use them in header files without being 22321concerned about a possible macro of the same name. For example, you 22322may use `__noreturn__' instead of `noreturn'. 22323 22324 *Note Attribute Syntax::, for details of the exact syntax for using 22325attributes. 22326 22327`alias ("TARGET")' 22328 The `alias' attribute causes the declaration to be emitted as an 22329 alias for another symbol, which must be specified. For instance, 22330 22331 void __f () { /* Do something. */; } 22332 void f () __attribute__ ((weak, alias ("__f"))); 22333 22334 defines `f' to be a weak alias for `__f'. In C++, the mangled 22335 name for the target must be used. It is an error if `__f' is not 22336 defined in the same translation unit. 22337 22338 Not all target machines support this attribute. 22339 22340`aligned (ALIGNMENT)' 22341 This attribute specifies a minimum alignment for the function, 22342 measured in bytes. 22343 22344 You cannot use this attribute to decrease the alignment of a 22345 function, only to increase it. However, when you explicitly 22346 specify a function alignment this overrides the effect of the 22347 `-falign-functions' (*note Optimize Options::) option for this 22348 function. 22349 22350 Note that the effectiveness of `aligned' attributes may be limited 22351 by inherent limitations in your linker. On many systems, the 22352 linker is only able to arrange for functions to be aligned up to a 22353 certain maximum alignment. (For some linkers, the maximum 22354 supported alignment may be very very small.) See your linker 22355 documentation for further information. 22356 22357 The `aligned' attribute can also be used for variables and fields 22358 (*note Variable Attributes::.) 22359 22360`alloc_size' 22361 The `alloc_size' attribute is used to tell the compiler that the 22362 function return value points to memory, where the size is given by 22363 one or two of the functions parameters. GCC uses this information 22364 to improve the correctness of `__builtin_object_size'. 22365 22366 The function parameter(s) denoting the allocated size are 22367 specified by one or two integer arguments supplied to the 22368 attribute. The allocated size is either the value of the single 22369 function argument specified or the product of the two function 22370 arguments specified. Argument numbering starts at one. 22371 22372 For instance, 22373 22374 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 22375 void my_realloc(void*, size_t) __attribute__((alloc_size(2))) 22376 22377 declares that `my_calloc' returns memory of the size given by the 22378 product of parameter 1 and 2 and that `my_realloc' returns memory 22379 of the size given by parameter 2. 22380 22381`always_inline' 22382 Generally, functions are not inlined unless optimization is 22383 specified. For functions declared inline, this attribute inlines 22384 the function even if no optimization level is specified. 22385 22386`gnu_inline' 22387 This attribute should be used with a function that is also declared 22388 with the `inline' keyword. It directs GCC to treat the function 22389 as if it were defined in gnu90 mode even when compiling in C99 or 22390 gnu99 mode. 22391 22392 If the function is declared `extern', then this definition of the 22393 function is used only for inlining. In no case is the function 22394 compiled as a standalone function, not even if you take its address 22395 explicitly. Such an address becomes an external reference, as if 22396 you had only declared the function, and had not defined it. This 22397 has almost the effect of a macro. The way to use this is to put a 22398 function definition in a header file with this attribute, and put 22399 another copy of the function, without `extern', in a library file. 22400 The definition in the header file causes most calls to the 22401 function to be inlined. If any uses of the function remain, they 22402 refer to the single copy in the library. Note that the two 22403 definitions of the functions need not be precisely the same, 22404 although if they do not have the same effect your program may 22405 behave oddly. 22406 22407 In C, if the function is neither `extern' nor `static', then the 22408 function is compiled as a standalone function, as well as being 22409 inlined where possible. 22410 22411 This is how GCC traditionally handled functions declared `inline'. 22412 Since ISO C99 specifies a different semantics for `inline', this 22413 function attribute is provided as a transition measure and as a 22414 useful feature in its own right. This attribute is available in 22415 GCC 4.1.3 and later. It is available if either of the 22416 preprocessor macros `__GNUC_GNU_INLINE__' or 22417 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 22418 As Fast As a Macro: Inline. 22419 22420 In C++, this attribute does not depend on `extern' in any way, but 22421 it still requires the `inline' keyword to enable its special 22422 behavior. 22423 22424`artificial' 22425 This attribute is useful for small inline wrappers that if possible 22426 should appear during debugging as a unit. Depending on the debug 22427 info format it either means marking the function as artificial or 22428 using the caller location for all instructions within the inlined 22429 body. 22430 22431`bank_switch' 22432 When added to an interrupt handler with the M32C port, causes the 22433 prologue and epilogue to use bank switching to preserve the 22434 registers rather than saving them on the stack. 22435 22436`flatten' 22437 Generally, inlining into a function is limited. For a function 22438 marked with this attribute, every call inside this function is 22439 inlined, if possible. Whether the function itself is considered 22440 for inlining depends on its size and the current inlining 22441 parameters. 22442 22443`error ("MESSAGE")' 22444 If this attribute is used on a function declaration and a call to 22445 such a function is not eliminated through dead code elimination or 22446 other optimizations, an error that includes MESSAGE is diagnosed. 22447 This is useful for compile-time checking, especially together with 22448 `__builtin_constant_p' and inline functions where checking the 22449 inline function arguments is not possible through `extern char 22450 [(condition) ? 1 : -1];' tricks. While it is possible to leave 22451 the function undefined and thus invoke a link failure, when using 22452 this attribute the problem is diagnosed earlier and with exact 22453 location of the call even in presence of inline functions or when 22454 not emitting debugging information. 22455 22456`warning ("MESSAGE")' 22457 If this attribute is used on a function declaration and a call to 22458 such a function is not eliminated through dead code elimination or 22459 other optimizations, a warning that includes MESSAGE is diagnosed. 22460 This is useful for compile-time checking, especially together with 22461 `__builtin_constant_p' and inline functions. While it is possible 22462 to define the function with a message in `.gnu.warning*' section, 22463 when using this attribute the problem is diagnosed earlier and 22464 with exact location of the call even in presence of inline 22465 functions or when not emitting debugging information. 22466 22467`cdecl' 22468 On the Intel 386, the `cdecl' attribute causes the compiler to 22469 assume that the calling function pops off the stack space used to 22470 pass arguments. This is useful to override the effects of the 22471 `-mrtd' switch. 22472 22473`const' 22474 Many functions do not examine any values except their arguments, 22475 and have no effects except the return value. Basically this is 22476 just slightly more strict class than the `pure' attribute below, 22477 since function is not allowed to read global memory. 22478 22479 Note that a function that has pointer arguments and examines the 22480 data pointed to must _not_ be declared `const'. Likewise, a 22481 function that calls a non-`const' function usually must not be 22482 `const'. It does not make sense for a `const' function to return 22483 `void'. 22484 22485 The attribute `const' is not implemented in GCC versions earlier 22486 than 2.5. An alternative way to declare that a function has no 22487 side effects, which works in the current version and in some older 22488 versions, is as follows: 22489 22490 typedef int intfn (); 22491 22492 extern const intfn square; 22493 22494 This approach does not work in GNU C++ from 2.6.0 on, since the 22495 language specifies that the `const' must be attached to the return 22496 value. 22497 22498`constructor' 22499`destructor' 22500`constructor (PRIORITY)' 22501`destructor (PRIORITY)' 22502 The `constructor' attribute causes the function to be called 22503 automatically before execution enters `main ()'. Similarly, the 22504 `destructor' attribute causes the function to be called 22505 automatically after `main ()' completes or `exit ()' is called. 22506 Functions with these attributes are useful for initializing data 22507 that is used implicitly during the execution of the program. 22508 22509 You may provide an optional integer priority to control the order 22510 in which constructor and destructor functions are run. A 22511 constructor with a smaller priority number runs before a 22512 constructor with a larger priority number; the opposite 22513 relationship holds for destructors. So, if you have a constructor 22514 that allocates a resource and a destructor that deallocates the 22515 same resource, both functions typically have the same priority. 22516 The priorities for constructor and destructor functions are the 22517 same as those specified for namespace-scope C++ objects (*note C++ 22518 Attributes::). 22519 22520 These attributes are not currently implemented for Objective-C. 22521 22522`deprecated' 22523`deprecated (MSG)' 22524 The `deprecated' attribute results in a warning if the function is 22525 used anywhere in the source file. This is useful when identifying 22526 functions that are expected to be removed in a future version of a 22527 program. The warning also includes the location of the declaration 22528 of the deprecated function, to enable users to easily find further 22529 information about why the function is deprecated, or what they 22530 should do instead. Note that the warnings only occurs for uses: 22531 22532 int old_fn () __attribute__ ((deprecated)); 22533 int old_fn (); 22534 int (*fn_ptr)() = old_fn; 22535 22536 results in a warning on line 3 but not line 2. The optional MSG 22537 argument, which must be a string, is printed in the warning if 22538 present. 22539 22540 The `deprecated' attribute can also be used for variables and 22541 types (*note Variable Attributes::, *note Type Attributes::.) 22542 22543`disinterrupt' 22544 On Epiphany and MeP targets, this attribute causes the compiler to 22545 emit instructions to disable interrupts for the duration of the 22546 given function. 22547 22548`dllexport' 22549 On Microsoft Windows targets and Symbian OS targets the 22550 `dllexport' attribute causes the compiler to provide a global 22551 pointer to a pointer in a DLL, so that it can be referenced with 22552 the `dllimport' attribute. On Microsoft Windows targets, the 22553 pointer name is formed by combining `_imp__' and the function or 22554 variable name. 22555 22556 You can use `__declspec(dllexport)' as a synonym for 22557 `__attribute__ ((dllexport))' for compatibility with other 22558 compilers. 22559 22560 On systems that support the `visibility' attribute, this attribute 22561 also implies "default" visibility. It is an error to explicitly 22562 specify any other visibility. 22563 22564 In previous versions of GCC, the `dllexport' attribute was ignored 22565 for inlined functions, unless the `-fkeep-inline-functions' flag 22566 had been used. The default behavior now is to emit all dllexported 22567 inline functions; however, this can cause object file-size bloat, 22568 in which case the old behavior can be restored by using 22569 `-fno-keep-inline-dllexport'. 22570 22571 The attribute is also ignored for undefined symbols. 22572 22573 When applied to C++ classes, the attribute marks defined 22574 non-inlined member functions and static data members as exports. 22575 Static consts initialized in-class are not marked unless they are 22576 also defined out-of-class. 22577 22578 For Microsoft Windows targets there are alternative methods for 22579 including the symbol in the DLL's export table such as using a 22580 `.def' file with an `EXPORTS' section or, with GNU ld, using the 22581 `--export-all' linker flag. 22582 22583`dllimport' 22584 On Microsoft Windows and Symbian OS targets, the `dllimport' 22585 attribute causes the compiler to reference a function or variable 22586 via a global pointer to a pointer that is set up by the DLL 22587 exporting the symbol. The attribute implies `extern'. On 22588 Microsoft Windows targets, the pointer name is formed by combining 22589 `_imp__' and the function or variable name. 22590 22591 You can use `__declspec(dllimport)' as a synonym for 22592 `__attribute__ ((dllimport))' for compatibility with other 22593 compilers. 22594 22595 On systems that support the `visibility' attribute, this attribute 22596 also implies "default" visibility. It is an error to explicitly 22597 specify any other visibility. 22598 22599 Currently, the attribute is ignored for inlined functions. If the 22600 attribute is applied to a symbol _definition_, an error is 22601 reported. If a symbol previously declared `dllimport' is later 22602 defined, the attribute is ignored in subsequent references, and a 22603 warning is emitted. The attribute is also overridden by a 22604 subsequent declaration as `dllexport'. 22605 22606 When applied to C++ classes, the attribute marks non-inlined 22607 member functions and static data members as imports. However, the 22608 attribute is ignored for virtual methods to allow creation of 22609 vtables using thunks. 22610 22611 On the SH Symbian OS target the `dllimport' attribute also has 22612 another affect--it can cause the vtable and run-time type 22613 information for a class to be exported. This happens when the 22614 class has a dllimported constructor or a non-inline, non-pure 22615 virtual function and, for either of those two conditions, the 22616 class also has an inline constructor or destructor and has a key 22617 function that is defined in the current translation unit. 22618 22619 For Microsoft Windows targets the use of the `dllimport' attribute 22620 on functions is not necessary, but provides a small performance 22621 benefit by eliminating a thunk in the DLL. The use of the 22622 `dllimport' attribute on imported variables was required on older 22623 versions of the GNU linker, but can now be avoided by passing the 22624 `--enable-auto-import' switch to the GNU linker. As with 22625 functions, using the attribute for a variable eliminates a thunk in 22626 the DLL. 22627 22628 One drawback to using this attribute is that a pointer to a 22629 _variable_ marked as `dllimport' cannot be used as a constant 22630 address. However, a pointer to a _function_ with the `dllimport' 22631 attribute can be used as a constant initializer; in this case, the 22632 address of a stub function in the import lib is referenced. On 22633 Microsoft Windows targets, the attribute can be disabled for 22634 functions by setting the `-mnop-fun-dllimport' flag. 22635 22636`eightbit_data' 22637 Use this attribute on the H8/300, H8/300H, and H8S to indicate 22638 that the specified variable should be placed into the eight-bit 22639 data section. The compiler generates more efficient code for 22640 certain operations on data in the eight-bit data area. Note the 22641 eight-bit data area is limited to 256 bytes of data. 22642 22643 You must use GAS and GLD from GNU binutils version 2.7 or later for 22644 this attribute to work correctly. 22645 22646`exception_handler' 22647 Use this attribute on the Blackfin to indicate that the specified 22648 function is an exception handler. The compiler generates function 22649 entry and exit sequences suitable for use in an exception handler 22650 when this attribute is present. 22651 22652`externally_visible' 22653 This attribute, attached to a global variable or function, 22654 nullifies the effect of the `-fwhole-program' command-line option, 22655 so the object remains visible outside the current compilation unit. 22656 22657 If `-fwhole-program' is used together with `-flto' and `gold' is 22658 used as the linker plugin, `externally_visible' attributes are 22659 automatically added to functions (not variable yet due to a 22660 current `gold' issue) that are accessed outside of LTO objects 22661 according to resolution file produced by `gold'. For other 22662 linkers that cannot generate resolution file, explicit 22663 `externally_visible' attributes are still necessary. 22664 22665`far' 22666 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 22667 use a calling convention that takes care of switching memory banks 22668 when entering and leaving a function. This calling convention is 22669 also the default when using the `-mlong-calls' option. 22670 22671 On 68HC12 the compiler uses the `call' and `rtc' instructions to 22672 call and return from a function. 22673 22674 On 68HC11 the compiler generates a sequence of instructions to 22675 invoke a board-specific routine to switch the memory bank and call 22676 the real function. The board-specific routine simulates a `call'. 22677 At the end of a function, it jumps to a board-specific routine 22678 instead of using `rts'. The board-specific return routine 22679 simulates the `rtc'. 22680 22681 On MeP targets this causes the compiler to use a calling convention 22682 that assumes the called function is too far away for the built-in 22683 addressing modes. 22684 22685`fast_interrupt' 22686 Use this attribute on the M32C and RX ports to indicate that the 22687 specified function is a fast interrupt handler. This is just like 22688 the `interrupt' attribute, except that `freit' is used to return 22689 instead of `reit'. 22690 22691`fastcall' 22692 On the Intel 386, the `fastcall' attribute causes the compiler to 22693 pass the first argument (if of integral type) in the register ECX 22694 and the second argument (if of integral type) in the register EDX. 22695 Subsequent and other typed arguments are passed on the stack. The 22696 called function pops the arguments off the stack. If the number 22697 of arguments is variable all arguments are pushed on the stack. 22698 22699`thiscall' 22700 On the Intel 386, the `thiscall' attribute causes the compiler to 22701 pass the first argument (if of integral type) in the register ECX. 22702 Subsequent and other typed arguments are passed on the stack. The 22703 called function pops the arguments off the stack. If the number 22704 of arguments is variable all arguments are pushed on the stack. 22705 The `thiscall' attribute is intended for C++ non-static member 22706 functions. As a GCC extension, this calling convention can be 22707 used for C functions and for static member methods. 22708 22709`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 22710 The `format' attribute specifies that a function takes `printf', 22711 `scanf', `strftime' or `strfmon' style arguments that should be 22712 type-checked against a format string. For example, the 22713 declaration: 22714 22715 extern int 22716 my_printf (void *my_object, const char *my_format, ...) 22717 __attribute__ ((format (printf, 2, 3))); 22718 22719 causes the compiler to check the arguments in calls to `my_printf' 22720 for consistency with the `printf' style format string argument 22721 `my_format'. 22722 22723 The parameter ARCHETYPE determines how the format string is 22724 interpreted, and should be `printf', `scanf', `strftime', 22725 `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'. (You can 22726 also use `__printf__', `__scanf__', `__strftime__' or 22727 `__strfmon__'.) On MinGW targets, `ms_printf', `ms_scanf', and 22728 `ms_strftime' are also present. ARCHETYPE values such as `printf' 22729 refer to the formats accepted by the system's C runtime library, 22730 while values prefixed with `gnu_' always refer to the formats 22731 accepted by the GNU C Library. On Microsoft Windows targets, 22732 values prefixed with `ms_' refer to the formats accepted by the 22733 `msvcrt.dll' library. The parameter STRING-INDEX specifies which 22734 argument is the format string argument (starting from 1), while 22735 FIRST-TO-CHECK is the number of the first argument to check 22736 against the format string. For functions where the arguments are 22737 not available to be checked (such as `vprintf'), specify the third 22738 parameter as zero. In this case the compiler only checks the 22739 format string for consistency. For `strftime' formats, the third 22740 parameter is required to be zero. Since non-static C++ methods 22741 have an implicit `this' argument, the arguments of such methods 22742 should be counted from two, not one, when giving values for 22743 STRING-INDEX and FIRST-TO-CHECK. 22744 22745 In the example above, the format string (`my_format') is the second 22746 argument of the function `my_print', and the arguments to check 22747 start with the third argument, so the correct parameters for the 22748 format attribute are 2 and 3. 22749 22750 The `format' attribute allows you to identify your own functions 22751 that take format strings as arguments, so that GCC can check the 22752 calls to these functions for errors. The compiler always (unless 22753 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 22754 standard library functions `printf', `fprintf', `sprintf', 22755 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 22756 `vsprintf' whenever such warnings are requested (using 22757 `-Wformat'), so there is no need to modify the header file 22758 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 22759 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 22760 strictly conforming C standard modes, the X/Open function 22761 `strfmon' is also checked as are `printf_unlocked' and 22762 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 22763 Dialect Options. 22764 22765 For Objective-C dialects, `NSString' (or `__NSString__') is 22766 recognized in the same context. Declarations including these 22767 format attributes are parsed for correct syntax, however the 22768 result of checking of such format strings is not yet defined, and 22769 is not carried out by this version of the compiler. 22770 22771 The target may also provide additional types of format checks. 22772 *Note Format Checks Specific to Particular Target Machines: Target 22773 Format Checks. 22774 22775`format_arg (STRING-INDEX)' 22776 The `format_arg' attribute specifies that a function takes a format 22777 string for a `printf', `scanf', `strftime' or `strfmon' style 22778 function and modifies it (for example, to translate it into 22779 another language), so the result can be passed to a `printf', 22780 `scanf', `strftime' or `strfmon' style function (with the 22781 remaining arguments to the format function the same as they would 22782 have been for the unmodified string). For example, the 22783 declaration: 22784 22785 extern char * 22786 my_dgettext (char *my_domain, const char *my_format) 22787 __attribute__ ((format_arg (2))); 22788 22789 causes the compiler to check the arguments in calls to a `printf', 22790 `scanf', `strftime' or `strfmon' type function, whose format 22791 string argument is a call to the `my_dgettext' function, for 22792 consistency with the format string argument `my_format'. If the 22793 `format_arg' attribute had not been specified, all the compiler 22794 could tell in such calls to format functions would be that the 22795 format string argument is not constant; this would generate a 22796 warning when `-Wformat-nonliteral' is used, but the calls could 22797 not be checked without the attribute. 22798 22799 The parameter STRING-INDEX specifies which argument is the format 22800 string argument (starting from one). Since non-static C++ methods 22801 have an implicit `this' argument, the arguments of such methods 22802 should be counted from two. 22803 22804 The `format_arg' attribute allows you to identify your own 22805 functions that modify format strings, so that GCC can check the 22806 calls to `printf', `scanf', `strftime' or `strfmon' type function 22807 whose operands are a call to one of your own function. The 22808 compiler always treats `gettext', `dgettext', and `dcgettext' in 22809 this manner except when strict ISO C support is requested by 22810 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 22811 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 22812 Dialect Options. 22813 22814 For Objective-C dialects, the `format-arg' attribute may refer to 22815 an `NSString' reference for compatibility with the `format' 22816 attribute above. 22817 22818 The target may also allow additional types in `format-arg' 22819 attributes. *Note Format Checks Specific to Particular Target 22820 Machines: Target Format Checks. 22821 22822`function_vector' 22823 Use this attribute on the H8/300, H8/300H, and H8S to indicate 22824 that the specified function should be called through the function 22825 vector. Calling a function through the function vector reduces 22826 code size, however; the function vector has a limited size 22827 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 22828 and H8S) and shares space with the interrupt vector. 22829 22830 On SH2A targets, this attribute declares a function to be called 22831 using the TBR relative addressing mode. The argument to this 22832 attribute is the entry number of the same function in a vector 22833 table containing all the TBR relative addressable functions. For 22834 correct operation the TBR must be setup accordingly to point to 22835 the start of the vector table before any functions with this 22836 attribute are invoked. Usually a good place to do the 22837 initialization is the startup routine. The TBR relative vector 22838 table can have at max 256 function entries. The jumps to these 22839 functions are generated using a SH2A specific, non delayed branch 22840 instruction JSR/N @(disp8,TBR). You must use GAS and GLD from GNU 22841 binutils version 2.7 or later for this attribute to work correctly. 22842 22843 Please refer the example of M16C target, to see the use of this 22844 attribute while declaring a function, 22845 22846 In an application, for a function being called once, this attribute 22847 saves at least 8 bytes of code; and if other successive calls are 22848 being made to the same function, it saves 2 bytes of code per each 22849 of these calls. 22850 22851 On M16C/M32C targets, the `function_vector' attribute declares a 22852 special page subroutine call function. Use of this attribute 22853 reduces the code size by 2 bytes for each call generated to the 22854 subroutine. The argument to the attribute is the vector number 22855 entry from the special page vector table which contains the 16 22856 low-order bits of the subroutine's entry address. Each vector 22857 table has special page number (18 to 255) that is used in `jsrs' 22858 instructions. Jump addresses of the routines are generated by 22859 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 22860 M32C targets), to the 2-byte addresses set in the vector table. 22861 Therefore you need to ensure that all the special page vector 22862 routines should get mapped within the address range 0x0F0000 to 22863 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 22864 22865 In the following example 2 bytes are saved for each call to 22866 function `foo'. 22867 22868 void foo (void) __attribute__((function_vector(0x18))); 22869 void foo (void) 22870 { 22871 } 22872 22873 void bar (void) 22874 { 22875 foo(); 22876 } 22877 22878 If functions are defined in one file and are called in another 22879 file, then be sure to write this declaration in both files. 22880 22881 This attribute is ignored for R8C target. 22882 22883`ifunc ("RESOLVER")' 22884 The `ifunc' attribute is used to mark a function as an indirect 22885 function using the STT_GNU_IFUNC symbol type extension to the ELF 22886 standard. This allows the resolution of the symbol value to be 22887 determined dynamically at load time, and an optimized version of 22888 the routine can be selected for the particular processor or other 22889 system characteristics determined then. To use this attribute, 22890 first define the implementation functions available, and a 22891 resolver function that returns a pointer to the selected 22892 implementation function. The implementation functions' 22893 declarations must match the API of the function being implemented, 22894 the resolver's declaration is be a function returning pointer to 22895 void function returning void: 22896 22897 void *my_memcpy (void *dst, const void *src, size_t len) 22898 { 22899 ... 22900 } 22901 22902 static void (*resolve_memcpy (void)) (void) 22903 { 22904 return my_memcpy; // we'll just always select this routine 22905 } 22906 22907 The exported header file declaring the function the user calls 22908 would contain: 22909 22910 extern void *memcpy (void *, const void *, size_t); 22911 22912 allowing the user to call this as a regular function, unaware of 22913 the implementation. Finally, the indirect function needs to be 22914 defined in the same translation unit as the resolver function: 22915 22916 void *memcpy (void *, const void *, size_t) 22917 __attribute__ ((ifunc ("resolve_memcpy"))); 22918 22919 Indirect functions cannot be weak, and require a recent binutils 22920 (at least version 2.20.1), and GNU C library (at least version 22921 2.11.1). 22922 22923`interrupt' 22924 Use this attribute on the ARM, AVR, CR16, Epiphany, M32C, M32R/D, 22925 m68k, MeP, MIPS, RL78, RX and Xstormy16 ports to indicate that the 22926 specified function is an interrupt handler. The compiler 22927 generates function entry and exit sequences suitable for use in an 22928 interrupt handler when this attribute is present. With Epiphany 22929 targets it may also generate a special section with code to 22930 initialize the interrupt vector table. 22931 22932 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 22933 MicroBlaze, and SH processors can be specified via the 22934 `interrupt_handler' attribute. 22935 22936 Note, on the AVR, the hardware globally disables interrupts when an 22937 interrupt is executed. The first instruction of an interrupt 22938 handler declared with this attribute is a `SEI' instruction to 22939 re-enable interrupts. See also the `signal' function attribute 22940 that does not insert a `SEI' instruction. If both `signal' and 22941 `interrupt' are specified for the same function, `signal' is 22942 silently ignored. 22943 22944 Note, for the ARM, you can specify the kind of interrupt to be 22945 handled by adding an optional parameter to the interrupt attribute 22946 like this: 22947 22948 void f () __attribute__ ((interrupt ("IRQ"))); 22949 22950 Permissible values for this parameter are: `IRQ', `FIQ', `SWI', 22951 `ABORT' and `UNDEF'. 22952 22953 On ARMv7-M the interrupt type is ignored, and the attribute means 22954 the function may be called with a word-aligned stack pointer. 22955 22956 On Epiphany targets one or more optional parameters can be added 22957 like this: 22958 22959 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 22960 22961 Permissible values for these parameters are: `reset', 22962 `software_exception', `page_miss', `timer0', `timer1', `message', 22963 `dma0', `dma1', `wand' and `swi'. Multiple parameters indicate 22964 that multiple entries in the interrupt vector table should be 22965 initialized for this function, i.e. for each parameter NAME, a 22966 jump to the function is emitted in the section ivt_entry_NAME. 22967 The parameter(s) may be omitted entirely, in which case no 22968 interrupt vector table entry is provided. 22969 22970 Note, on Epiphany targets, interrupts are enabled inside the 22971 function unless the `disinterrupt' attribute is also specified. 22972 22973 On Epiphany targets, you can also use the following attribute to 22974 modify the behavior of an interrupt handler: 22975 `forwarder_section' 22976 The interrupt handler may be in external memory which cannot 22977 be reached by a branch instruction, so generate a local 22978 memory trampoline to transfer control. The single parameter 22979 identifies the section where the trampoline is placed. 22980 22981 The following examples are all valid uses of these attributes on 22982 Epiphany targets: 22983 void __attribute__ ((interrupt)) universal_handler (); 22984 void __attribute__ ((interrupt ("dma1"))) dma1_handler (); 22985 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 22986 void __attribute__ ((interrupt ("timer0"), disinterrupt)) 22987 fast_timer_handler (); 22988 void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp"))) 22989 external_dma_handler (); 22990 22991 On MIPS targets, you can use the following attributes to modify 22992 the behavior of an interrupt handler: 22993 `use_shadow_register_set' 22994 Assume that the handler uses a shadow register set, instead of 22995 the main general-purpose registers. 22996 22997 `keep_interrupts_masked' 22998 Keep interrupts masked for the whole function. Without this 22999 attribute, GCC tries to reenable interrupts for as much of 23000 the function as it can. 23001 23002 `use_debug_exception_return' 23003 Return using the `deret' instruction. Interrupt handlers 23004 that don't have this attribute return using `eret' instead. 23005 23006 You can use any combination of these attributes, as shown below: 23007 void __attribute__ ((interrupt)) v0 (); 23008 void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); 23009 void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); 23010 void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); 23011 void __attribute__ ((interrupt, use_shadow_register_set, 23012 keep_interrupts_masked)) v4 (); 23013 void __attribute__ ((interrupt, use_shadow_register_set, 23014 use_debug_exception_return)) v5 (); 23015 void __attribute__ ((interrupt, keep_interrupts_masked, 23016 use_debug_exception_return)) v6 (); 23017 void __attribute__ ((interrupt, use_shadow_register_set, 23018 keep_interrupts_masked, 23019 use_debug_exception_return)) v7 (); 23020 23021 On RL78, use `brk_interrupt' instead of `interrupt' for handlers 23022 intended to be used with the `BRK' opcode (i.e. those that must 23023 end with `RETB' instead of `RETI'). 23024 23025`interrupt_handler' 23026 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 23027 and SH to indicate that the specified function is an interrupt 23028 handler. The compiler generates function entry and exit sequences 23029 suitable for use in an interrupt handler when this attribute is 23030 present. 23031 23032`interrupt_thread' 23033 Use this attribute on fido, a subarchitecture of the m68k, to 23034 indicate that the specified function is an interrupt handler that 23035 is designed to run as a thread. The compiler omits generate 23036 prologue/epilogue sequences and replaces the return instruction 23037 with a `sleep' instruction. This attribute is available only on 23038 fido. 23039 23040`isr' 23041 Use this attribute on ARM to write Interrupt Service Routines. 23042 This is an alias to the `interrupt' attribute above. 23043 23044`kspisusp' 23045 When used together with `interrupt_handler', `exception_handler' 23046 or `nmi_handler', code is generated to load the stack pointer from 23047 the USP register in the function prologue. 23048 23049`l1_text' 23050 This attribute specifies a function to be placed into L1 23051 Instruction SRAM. The function is put into a specific section 23052 named `.l1.text'. With `-mfdpic', function calls with a such 23053 function as the callee or caller uses inlined PLT. 23054 23055`l2' 23056 On the Blackfin, this attribute specifies a function to be placed 23057 into L2 SRAM. The function is put into a specific section named 23058 `.l1.text'. With `-mfdpic', callers of such functions use an 23059 inlined PLT. 23060 23061`leaf' 23062 Calls to external functions with this attribute must return to the 23063 current compilation unit only by return or by exception handling. 23064 In particular, leaf functions are not allowed to call callback 23065 function passed to it from the current compilation unit or 23066 directly call functions exported by the unit or longjmp into the 23067 unit. Leaf function might still call functions from other 23068 compilation units and thus they are not necessarily leaf in the 23069 sense that they contain no function calls at all. 23070 23071 The attribute is intended for library functions to improve 23072 dataflow analysis. The compiler takes the hint that any data not 23073 escaping the current compilation unit can not be used or modified 23074 by the leaf function. For example, the `sin' function is a leaf 23075 function, but `qsort' is not. 23076 23077 Note that leaf functions might invoke signals and signal handlers 23078 might be defined in the current compilation unit and use static 23079 variables. The only compliant way to write such a signal handler 23080 is to declare such variables `volatile'. 23081 23082 The attribute has no effect on functions defined within the 23083 current compilation unit. This is to allow easy merging of 23084 multiple compilation units into one, for example, by using the 23085 link-time optimization. For this reason the attribute is not 23086 allowed on types to annotate indirect calls. 23087 23088`long_call/short_call' 23089 This attribute specifies how a particular function is called on 23090 ARM and Epiphany. Both attributes override the `-mlong-calls' 23091 (*note ARM Options::) command-line switch and `#pragma long_calls' 23092 settings. The `long_call' attribute indicates that the function 23093 might be far away from the call site and require a different (more 23094 expensive) calling sequence. The `short_call' attribute always 23095 places the offset to the function from the call site into the `BL' 23096 instruction directly. 23097 23098`longcall/shortcall' 23099 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 23100 indicates that the function might be far away from the call site 23101 and require a different (more expensive) calling sequence. The 23102 `shortcall' attribute indicates that the function is always close 23103 enough for the shorter calling sequence to be used. These 23104 attributes override both the `-mlongcall' switch and, on the 23105 RS/6000 and PowerPC, the `#pragma longcall' setting. 23106 23107 *Note RS/6000 and PowerPC Options::, for more information on 23108 whether long calls are necessary. 23109 23110`long_call/near/far' 23111 These attributes specify how a particular function is called on 23112 MIPS. The attributes override the `-mlong-calls' (*note MIPS 23113 Options::) command-line switch. The `long_call' and `far' 23114 attributes are synonyms, and cause the compiler to always call the 23115 function by first loading its address into a register, and then 23116 using the contents of that register. The `near' attribute has the 23117 opposite effect; it specifies that non-PIC calls should be made 23118 using the more efficient `jal' instruction. 23119 23120`malloc' 23121 The `malloc' attribute is used to tell the compiler that a function 23122 may be treated as if any non-`NULL' pointer it returns cannot 23123 alias any other pointer valid when the function returns and that 23124 the memory has undefined content. This often improves 23125 optimization. Standard functions with this property include 23126 `malloc' and `calloc'. `realloc'-like functions do not have this 23127 property as the memory pointed to does not have undefined content. 23128 23129`mips16/nomips16' 23130 On MIPS targets, you can use the `mips16' and `nomips16' function 23131 attributes to locally select or turn off MIPS16 code generation. 23132 A function with the `mips16' attribute is emitted as MIPS16 code, 23133 while MIPS16 code generation is disabled for functions with the 23134 `nomips16' attribute. These attributes override the `-mips16' and 23135 `-mno-mips16' options on the command line (*note MIPS Options::). 23136 23137 When compiling files containing mixed MIPS16 and non-MIPS16 code, 23138 the preprocessor symbol `__mips16' reflects the setting on the 23139 command line, not that within individual functions. Mixed MIPS16 23140 and non-MIPS16 code may interact badly with some GCC extensions 23141 such as `__builtin_apply' (*note Constructing Calls::). 23142 23143`model (MODEL-NAME)' 23144 On the M32R/D, use this attribute to set the addressability of an 23145 object, and of the code generated for a function. The identifier 23146 MODEL-NAME is one of `small', `medium', or `large', representing 23147 each of the code models. 23148 23149 Small model objects live in the lower 16MB of memory (so that their 23150 addresses can be loaded with the `ld24' instruction), and are 23151 callable with the `bl' instruction. 23152 23153 Medium model objects may live anywhere in the 32-bit address space 23154 (the compiler generates `seth/add3' instructions to load their 23155 addresses), and are callable with the `bl' instruction. 23156 23157 Large model objects may live anywhere in the 32-bit address space 23158 (the compiler generates `seth/add3' instructions to load their 23159 addresses), and may not be reachable with the `bl' instruction 23160 (the compiler generates the much slower `seth/add3/jl' instruction 23161 sequence). 23162 23163 On IA-64, use this attribute to set the addressability of an 23164 object. At present, the only supported identifier for MODEL-NAME 23165 is `small', indicating addressability via "small" (22-bit) 23166 addresses (so that their addresses can be loaded with the `addl' 23167 instruction). Caveat: such addressing is by definition not 23168 position independent and hence this attribute must not be used for 23169 objects defined by shared libraries. 23170 23171`ms_abi/sysv_abi' 23172 On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI 23173 attribute to indicate which calling convention should be used for 23174 a function. The `ms_abi' attribute tells the compiler to use the 23175 Microsoft ABI, while the `sysv_abi' attribute tells the compiler 23176 to use the ABI used on GNU/Linux and other systems. The default 23177 is to use the Microsoft ABI when targeting Windows. On all other 23178 systems, the default is the x86/AMD ABI. 23179 23180 Note, the `ms_abi' attribute for Microsoft Windows 64-bit targets 23181 currently requires the `-maccumulate-outgoing-args' option. 23182 23183`callee_pop_aggregate_return (NUMBER)' 23184 On 32-bit i?86-*-* targets, you can use this attribute to control 23185 how aggregates are returned in memory. If the caller is 23186 responsible for popping the hidden pointer together with the rest 23187 of the arguments, specify NUMBER equal to zero. If callee is 23188 responsible for popping the hidden pointer, specify NUMBER equal 23189 to one. 23190 23191 The default i386 ABI assumes that the callee pops the stack for 23192 hidden pointer. However, on 32-bit i386 Microsoft Windows targets, 23193 the compiler assumes that the caller pops the stack for hidden 23194 pointer. 23195 23196`ms_hook_prologue' 23197 On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets, 23198 you can use this function attribute to make GCC generate the 23199 "hot-patching" function prologue used in Win32 API functions in 23200 Microsoft Windows XP Service Pack 2 and newer. 23201 23202`hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)' 23203 On S/390 System z targets, you can use this function attribute to 23204 make GCC generate a "hot-patching" function prologue. If the 23205 `-mhotpatch=' command-line option is used at the same time, the 23206 `hotpatch' attribute takes precedence. The first of the two 23207 arguments specifies the number of halfwords to be added before the 23208 function label. A second argument can be used to specify the 23209 number of halfwords to be added after the function label. For 23210 both arguments the maximum allowed value is 1000000. 23211 23212 If both ar guments are zero, hotpatching is disabled. 23213 23214`naked' 23215 Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to 23216 indicate that the specified function does not need 23217 prologue/epilogue sequences generated by the compiler. It is up 23218 to the programmer to provide these sequences. The only statements 23219 that can be safely included in naked functions are `asm' 23220 statements that do not have operands. All other statements, 23221 including declarations of local variables, `if' statements, and so 23222 forth, should be avoided. Naked functions should be used to 23223 implement the body of an assembly function, while allowing the 23224 compiler to construct the requisite function declaration for the 23225 assembler. 23226 23227`near' 23228 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 23229 use the normal calling convention based on `jsr' and `rts'. This 23230 attribute can be used to cancel the effect of the `-mlong-calls' 23231 option. 23232 23233 On MeP targets this attribute causes the compiler to assume the 23234 called function is close enough to use the normal calling 23235 convention, overriding the `-mtf' command-line option. 23236 23237`nesting' 23238 Use this attribute together with `interrupt_handler', 23239 `exception_handler' or `nmi_handler' to indicate that the function 23240 entry code should enable nested interrupts or exceptions. 23241 23242`nmi_handler' 23243 Use this attribute on the Blackfin to indicate that the specified 23244 function is an NMI handler. The compiler generates function entry 23245 and exit sequences suitable for use in an NMI handler when this 23246 attribute is present. 23247 23248`no_instrument_function' 23249 If `-finstrument-functions' is given, profiling function calls are 23250 generated at entry and exit of most user-compiled functions. 23251 Functions with this attribute are not so instrumented. 23252 23253`no_split_stack' 23254 If `-fsplit-stack' is given, functions have a small prologue which 23255 decides whether to split the stack. Functions with the 23256 `no_split_stack' attribute do not have that prologue, and thus may 23257 run with only a small amount of stack space available. 23258 23259`noinline' 23260 This function attribute prevents a function from being considered 23261 for inlining. If the function does not have side-effects, there 23262 are optimizations other than inlining that cause function calls to 23263 be optimized away, although the function call is live. To keep 23264 such calls from being optimized away, put 23265 asm (""); 23266 23267 (*note Extended Asm::) in the called function, to serve as a 23268 special side-effect. 23269 23270`noclone' 23271 This function attribute prevents a function from being considered 23272 for cloning--a mechanism that produces specialized copies of 23273 functions and which is (currently) performed by interprocedural 23274 constant propagation. 23275 23276`nonnull (ARG-INDEX, ...)' 23277 The `nonnull' attribute specifies that some function parameters 23278 should be non-null pointers. For instance, the declaration: 23279 23280 extern void * 23281 my_memcpy (void *dest, const void *src, size_t len) 23282 __attribute__((nonnull (1, 2))); 23283 23284 causes the compiler to check that, in calls to `my_memcpy', 23285 arguments DEST and SRC are non-null. If the compiler determines 23286 that a null pointer is passed in an argument slot marked as 23287 non-null, and the `-Wnonnull' option is enabled, a warning is 23288 issued. The compiler may also choose to make optimizations based 23289 on the knowledge that certain function arguments will never be 23290 null. 23291 23292 If no argument index list is given to the `nonnull' attribute, all 23293 pointer arguments are marked as non-null. To illustrate, the 23294 following declaration is equivalent to the previous example: 23295 23296 extern void * 23297 my_memcpy (void *dest, const void *src, size_t len) 23298 __attribute__((nonnull)); 23299 23300`noreturn' 23301 A few standard library functions, such as `abort' and `exit', 23302 cannot return. GCC knows this automatically. Some programs define 23303 their own functions that never return. You can declare them 23304 `noreturn' to tell the compiler this fact. For example, 23305 23306 void fatal () __attribute__ ((noreturn)); 23307 23308 void 23309 fatal (/* ... */) 23310 { 23311 /* ... */ /* Print error message. */ /* ... */ 23312 exit (1); 23313 } 23314 23315 The `noreturn' keyword tells the compiler to assume that `fatal' 23316 cannot return. It can then optimize without regard to what would 23317 happen if `fatal' ever did return. This makes slightly better 23318 code. More importantly, it helps avoid spurious warnings of 23319 uninitialized variables. 23320 23321 The `noreturn' keyword does not affect the exceptional path when 23322 that applies: a `noreturn'-marked function may still return to the 23323 caller by throwing an exception or calling `longjmp'. 23324 23325 Do not assume that registers saved by the calling function are 23326 restored before calling the `noreturn' function. 23327 23328 It does not make sense for a `noreturn' function to have a return 23329 type other than `void'. 23330 23331 The attribute `noreturn' is not implemented in GCC versions 23332 earlier than 2.5. An alternative way to declare that a function 23333 does not return, which works in the current version and in some 23334 older versions, is as follows: 23335 23336 typedef void voidfn (); 23337 23338 volatile voidfn fatal; 23339 23340 This approach does not work in GNU C++. 23341 23342`nothrow' 23343 The `nothrow' attribute is used to inform the compiler that a 23344 function cannot throw an exception. For example, most functions in 23345 the standard C library can be guaranteed not to throw an exception 23346 with the notable exceptions of `qsort' and `bsearch' that take 23347 function pointer arguments. The `nothrow' attribute is not 23348 implemented in GCC versions earlier than 3.3. 23349 23350`nosave_low_regs' 23351 Use this attribute on SH targets to indicate that an 23352 `interrupt_handler' function should not save and restore registers 23353 R0..R7. This can be used on SH3* and SH4* targets that have a 23354 second R0..R7 register bank for non-reentrant interrupt handlers. 23355 23356`optimize' 23357 The `optimize' attribute is used to specify that a function is to 23358 be compiled with different optimization options than specified on 23359 the command line. Arguments can either be numbers or strings. 23360 Numbers are assumed to be an optimization level. Strings that 23361 begin with `O' are assumed to be an optimization option, while 23362 other options are assumed to be used with a `-f' prefix. You can 23363 also use the `#pragma GCC optimize' pragma to set the optimization 23364 options that affect more than one function. *Note Function 23365 Specific Option Pragmas::, for details about the `#pragma GCC 23366 optimize' pragma. 23367 23368 This can be used for instance to have frequently-executed functions 23369 compiled with more aggressive optimization options that produce 23370 faster and larger code, while other functions can be compiled with 23371 less aggressive options. 23372 23373`OS_main/OS_task' 23374 On AVR, functions with the `OS_main' or `OS_task' attribute do not 23375 save/restore any call-saved register in their prologue/epilogue. 23376 23377 The `OS_main' attribute can be used when there _is guarantee_ that 23378 interrupts are disabled at the time when the function is entered. 23379 This saves resources when the stack pointer has to be changed to 23380 set up a frame for local variables. 23381 23382 The `OS_task' attribute can be used when there is _no guarantee_ 23383 that interrupts are disabled at that time when the function is 23384 entered like for, e.g. task functions in a multi-threading 23385 operating system. In that case, changing the stack pointer 23386 register is guarded by save/clear/restore of the global interrupt 23387 enable flag. 23388 23389 The differences to the `naked' function attribute are: 23390 * `naked' functions do not have a return instruction whereas 23391 `OS_main' and `OS_task' functions have a `RET' or `RETI' 23392 return instruction. 23393 23394 * `naked' functions do not set up a frame for local variables 23395 or a frame pointer whereas `OS_main' and `OS_task' do this as 23396 needed. 23397 23398`pcs' 23399 The `pcs' attribute can be used to control the calling convention 23400 used for a function on ARM. The attribute takes an argument that 23401 specifies the calling convention to use. 23402 23403 When compiling using the AAPCS ABI (or a variant of it) then valid 23404 values for the argument are `"aapcs"' and `"aapcs-vfp"'. In order 23405 to use a variant other than `"aapcs"' then the compiler must be 23406 permitted to use the appropriate co-processor registers (i.e., the 23407 VFP registers must be available in order to use `"aapcs-vfp"'). 23408 For example, 23409 23410 /* Argument passed in r0, and result returned in r0+r1. */ 23411 double f2d (float) __attribute__((pcs("aapcs"))); 23412 23413 Variadic functions always use the `"aapcs"' calling convention and 23414 the compiler rejects attempts to specify an alternative. 23415 23416`pure' 23417 Many functions have no effects except the return value and their 23418 return value depends only on the parameters and/or global 23419 variables. Such a function can be subject to common subexpression 23420 elimination and loop optimization just as an arithmetic operator 23421 would be. These functions should be declared with the attribute 23422 `pure'. For example, 23423 23424 int square (int) __attribute__ ((pure)); 23425 23426 says that the hypothetical function `square' is safe to call fewer 23427 times than the program says. 23428 23429 Some of common examples of pure functions are `strlen' or `memcmp'. 23430 Interesting non-pure functions are functions with infinite loops 23431 or those depending on volatile memory or other system resource, 23432 that may change between two consecutive calls (such as `feof' in a 23433 multithreading environment). 23434 23435 The attribute `pure' is not implemented in GCC versions earlier 23436 than 2.96. 23437 23438`hot' 23439 The `hot' attribute on a function is used to inform the compiler 23440 that the function is a hot spot of the compiled program. The 23441 function is optimized more aggressively and on many target it is 23442 placed into special subsection of the text section so all hot 23443 functions appears close together improving locality. 23444 23445 When profile feedback is available, via `-fprofile-use', hot 23446 functions are automatically detected and this attribute is ignored. 23447 23448 The `hot' attribute on functions is not implemented in GCC versions 23449 earlier than 4.3. 23450 23451 The `hot' attribute on a label is used to inform the compiler that 23452 path following the label are more likely than paths that are not so 23453 annotated. This attribute is used in cases where 23454 `__builtin_expect' cannot be used, for instance with computed goto 23455 or `asm goto'. 23456 23457 The `hot' attribute on labels is not implemented in GCC versions 23458 earlier than 4.8. 23459 23460`cold' 23461 The `cold' attribute on functions is used to inform the compiler 23462 that the function is unlikely to be executed. The function is 23463 optimized for size rather than speed and on many targets it is 23464 placed into special subsection of the text section so all cold 23465 functions appears close together improving code locality of 23466 non-cold parts of program. The paths leading to call of cold 23467 functions within code are marked as unlikely by the branch 23468 prediction mechanism. It is thus useful to mark functions used to 23469 handle unlikely conditions, such as `perror', as cold to improve 23470 optimization of hot functions that do call marked functions in 23471 rare occasions. 23472 23473 When profile feedback is available, via `-fprofile-use', cold 23474 functions are automatically detected and this attribute is ignored. 23475 23476 The `cold' attribute on functions is not implemented in GCC 23477 versions earlier than 4.3. 23478 23479 The `cold' attribute on labels is used to inform the compiler that 23480 the path following the label is unlikely to be executed. This 23481 attribute is used in cases where `__builtin_expect' cannot be 23482 used, for instance with computed goto or `asm goto'. 23483 23484 The `cold' attribute on labels is not implemented in GCC versions 23485 earlier than 4.8. 23486 23487`no_sanitize_address' 23488`no_address_safety_analysis' 23489 The `no_sanitize_address' attribute on functions is used to inform 23490 the compiler that it should not instrument memory accesses in the 23491 function when compiling with the `-fsanitize=address' option. The 23492 `no_address_safety_analysis' is a deprecated alias of the 23493 `no_sanitize_address' attribute, new code should use 23494 `no_sanitize_address'. 23495 23496`regparm (NUMBER)' 23497 On the Intel 386, the `regparm' attribute causes the compiler to 23498 pass arguments number one to NUMBER if they are of integral type 23499 in registers EAX, EDX, and ECX instead of on the stack. Functions 23500 that take a variable number of arguments continue to be passed all 23501 of their arguments on the stack. 23502 23503 Beware that on some ELF systems this attribute is unsuitable for 23504 global functions in shared libraries with lazy binding (which is 23505 the default). Lazy binding sends the first call via resolving 23506 code in the loader, which might assume EAX, EDX and ECX can be 23507 clobbered, as per the standard calling conventions. Solaris 8 is 23508 affected by this. Systems with the GNU C Library version 2.1 or 23509 higher and FreeBSD are believed to be safe since the loaders there 23510 save EAX, EDX and ECX. (Lazy binding can be disabled with the 23511 linker or the loader if desired, to avoid the problem.) 23512 23513`sseregparm' 23514 On the Intel 386 with SSE support, the `sseregparm' attribute 23515 causes the compiler to pass up to 3 floating-point arguments in 23516 SSE registers instead of on the stack. Functions that take a 23517 variable number of arguments continue to pass all of their 23518 floating-point arguments on the stack. 23519 23520`force_align_arg_pointer' 23521 On the Intel x86, the `force_align_arg_pointer' attribute may be 23522 applied to individual function definitions, generating an alternate 23523 prologue and epilogue that realigns the run-time stack if 23524 necessary. This supports mixing legacy codes that run with a 23525 4-byte aligned stack with modern codes that keep a 16-byte stack 23526 for SSE compatibility. 23527 23528`renesas' 23529 On SH targets this attribute specifies that the function or struct 23530 follows the Renesas ABI. 23531 23532`resbank' 23533 On the SH2A target, this attribute enables the high-speed register 23534 saving and restoration using a register bank for 23535 `interrupt_handler' routines. Saving to the bank is performed 23536 automatically after the CPU accepts an interrupt that uses a 23537 register bank. 23538 23539 The nineteen 32-bit registers comprising general register R0 to 23540 R14, control register GBR, and system registers MACH, MACL, and PR 23541 and the vector table address offset are saved into a register 23542 bank. Register banks are stacked in first-in last-out (FILO) 23543 sequence. Restoration from the bank is executed by issuing a 23544 RESBANK instruction. 23545 23546`returns_twice' 23547 The `returns_twice' attribute tells the compiler that a function 23548 may return more than one time. The compiler ensures that all 23549 registers are dead before calling such a function and emits a 23550 warning about the variables that may be clobbered after the second 23551 return from the function. Examples of such functions are `setjmp' 23552 and `vfork'. The `longjmp'-like counterpart of such function, if 23553 any, might need to be marked with the `noreturn' attribute. 23554 23555`saveall' 23556 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 23557 indicate that all registers except the stack pointer should be 23558 saved in the prologue regardless of whether they are used or not. 23559 23560`save_volatiles' 23561 Use this attribute on the MicroBlaze to indicate that the function 23562 is an interrupt handler. All volatile registers (in addition to 23563 non-volatile registers) are saved in the function prologue. If 23564 the function is a leaf function, only volatiles used by the 23565 function are saved. A normal function return is generated instead 23566 of a return from interrupt. 23567 23568`section ("SECTION-NAME")' 23569 Normally, the compiler places the code it generates in the `text' 23570 section. Sometimes, however, you need additional sections, or you 23571 need certain particular functions to appear in special sections. 23572 The `section' attribute specifies that a function lives in a 23573 particular section. For example, the declaration: 23574 23575 extern void foobar (void) __attribute__ ((section ("bar"))); 23576 23577 puts the function `foobar' in the `bar' section. 23578 23579 Some file formats do not support arbitrary sections so the 23580 `section' attribute is not available on all platforms. If you 23581 need to map the entire contents of a module to a particular 23582 section, consider using the facilities of the linker instead. 23583 23584`sentinel' 23585 This function attribute ensures that a parameter in a function 23586 call is an explicit `NULL'. The attribute is only valid on 23587 variadic functions. By default, the sentinel is located at 23588 position zero, the last parameter of the function call. If an 23589 optional integer position argument P is supplied to the attribute, 23590 the sentinel must be located at position P counting backwards from 23591 the end of the argument list. 23592 23593 __attribute__ ((sentinel)) 23594 is equivalent to 23595 __attribute__ ((sentinel(0))) 23596 23597 The attribute is automatically set with a position of 0 for the 23598 built-in functions `execl' and `execlp'. The built-in function 23599 `execle' has the attribute set with a position of 1. 23600 23601 A valid `NULL' in this context is defined as zero with any pointer 23602 type. If your system defines the `NULL' macro with an integer type 23603 then you need to add an explicit cast. GCC replaces `stddef.h' 23604 with a copy that redefines NULL appropriately. 23605 23606 The warnings for missing or incorrect sentinels are enabled with 23607 `-Wformat'. 23608 23609`short_call' 23610 See `long_call/short_call'. 23611 23612`shortcall' 23613 See `longcall/shortcall'. 23614 23615`signal' 23616 Use this attribute on the AVR to indicate that the specified 23617 function is an interrupt handler. The compiler generates function 23618 entry and exit sequences suitable for use in an interrupt handler 23619 when this attribute is present. 23620 23621 See also the `interrupt' function attribute. 23622 23623 The AVR hardware globally disables interrupts when an interrupt is 23624 executed. Interrupt handler functions defined with the `signal' 23625 attribute do not re-enable interrupts. It is save to enable 23626 interrupts in a `signal' handler. This "save" only applies to the 23627 code generated by the compiler and not to the IRQ layout of the 23628 application which is responsibility of the application. 23629 23630 If both `signal' and `interrupt' are specified for the same 23631 function, `signal' is silently ignored. 23632 23633`sp_switch' 23634 Use this attribute on the SH to indicate an `interrupt_handler' 23635 function should switch to an alternate stack. It expects a string 23636 argument that names a global variable holding the address of the 23637 alternate stack. 23638 23639 void *alt_stack; 23640 void f () __attribute__ ((interrupt_handler, 23641 sp_switch ("alt_stack"))); 23642 23643`stdcall' 23644 On the Intel 386, the `stdcall' attribute causes the compiler to 23645 assume that the called function pops off the stack space used to 23646 pass arguments, unless it takes a variable number of arguments. 23647 23648`syscall_linkage' 23649 This attribute is used to modify the IA-64 calling convention by 23650 marking all input registers as live at all function exits. This 23651 makes it possible to restart a system call after an interrupt 23652 without having to save/restore the input registers. This also 23653 prevents kernel data from leaking into application code. 23654 23655`target' 23656 The `target' attribute is used to specify that a function is to be 23657 compiled with different target options than specified on the 23658 command line. This can be used for instance to have functions 23659 compiled with a different ISA (instruction set architecture) than 23660 the default. You can also use the `#pragma GCC target' pragma to 23661 set more than one function to be compiled with specific target 23662 options. *Note Function Specific Option Pragmas::, for details 23663 about the `#pragma GCC target' pragma. 23664 23665 For instance on a 386, you could compile one function with 23666 `target("sse4.1,arch=core2")' and another with 23667 `target("sse4a,arch=amdfam10")'. This is equivalent to compiling 23668 the first function with `-msse4.1' and `-march=core2' options, and 23669 the second function with `-msse4a' and `-march=amdfam10' options. 23670 It is up to the user to make sure that a function is only invoked 23671 on a machine that supports the particular ISA it is compiled for 23672 (for example by using `cpuid' on 386 to determine what feature 23673 bits and architecture family are used). 23674 23675 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 23676 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 23677 23678 On the 386, the following options are allowed: 23679 23680 `abm' 23681 `no-abm' 23682 Enable/disable the generation of the advanced bit 23683 instructions. 23684 23685 `aes' 23686 `no-aes' 23687 Enable/disable the generation of the AES instructions. 23688 23689 `default' 23690 *Note Function Multiversioning::, where it is used to specify 23691 the default function version. 23692 23693 `mmx' 23694 `no-mmx' 23695 Enable/disable the generation of the MMX instructions. 23696 23697 `pclmul' 23698 `no-pclmul' 23699 Enable/disable the generation of the PCLMUL instructions. 23700 23701 `popcnt' 23702 `no-popcnt' 23703 Enable/disable the generation of the POPCNT instruction. 23704 23705 `sse' 23706 `no-sse' 23707 Enable/disable the generation of the SSE instructions. 23708 23709 `sse2' 23710 `no-sse2' 23711 Enable/disable the generation of the SSE2 instructions. 23712 23713 `sse3' 23714 `no-sse3' 23715 Enable/disable the generation of the SSE3 instructions. 23716 23717 `sse4' 23718 `no-sse4' 23719 Enable/disable the generation of the SSE4 instructions (both 23720 SSE4.1 and SSE4.2). 23721 23722 `sse4.1' 23723 `no-sse4.1' 23724 Enable/disable the generation of the sse4.1 instructions. 23725 23726 `sse4.2' 23727 `no-sse4.2' 23728 Enable/disable the generation of the sse4.2 instructions. 23729 23730 `sse4a' 23731 `no-sse4a' 23732 Enable/disable the generation of the SSE4A instructions. 23733 23734 `fma4' 23735 `no-fma4' 23736 Enable/disable the generation of the FMA4 instructions. 23737 23738 `xop' 23739 `no-xop' 23740 Enable/disable the generation of the XOP instructions. 23741 23742 `lwp' 23743 `no-lwp' 23744 Enable/disable the generation of the LWP instructions. 23745 23746 `ssse3' 23747 `no-ssse3' 23748 Enable/disable the generation of the SSSE3 instructions. 23749 23750 `cld' 23751 `no-cld' 23752 Enable/disable the generation of the CLD before string moves. 23753 23754 `fancy-math-387' 23755 `no-fancy-math-387' 23756 Enable/disable the generation of the `sin', `cos', and `sqrt' 23757 instructions on the 387 floating-point unit. 23758 23759 `fused-madd' 23760 `no-fused-madd' 23761 Enable/disable the generation of the fused multiply/add 23762 instructions. 23763 23764 `ieee-fp' 23765 `no-ieee-fp' 23766 Enable/disable the generation of floating point that depends 23767 on IEEE arithmetic. 23768 23769 `inline-all-stringops' 23770 `no-inline-all-stringops' 23771 Enable/disable inlining of string operations. 23772 23773 `inline-stringops-dynamically' 23774 `no-inline-stringops-dynamically' 23775 Enable/disable the generation of the inline code to do small 23776 string operations and calling the library routines for large 23777 operations. 23778 23779 `align-stringops' 23780 `no-align-stringops' 23781 Do/do not align destination of inlined string operations. 23782 23783 `recip' 23784 `no-recip' 23785 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 23786 RSQRTPS instructions followed an additional Newton-Raphson 23787 step instead of doing a floating-point division. 23788 23789 `arch=ARCH' 23790 Specify the architecture to generate code for in compiling 23791 the function. 23792 23793 `tune=TUNE' 23794 Specify the architecture to tune for in compiling the 23795 function. 23796 23797 `fpmath=FPMATH' 23798 Specify which floating-point unit to use. The 23799 `target("fpmath=sse,387")' option must be specified as 23800 `target("fpmath=sse+387")' because the comma would separate 23801 different options. 23802 23803 On the PowerPC, the following options are allowed: 23804 23805 `altivec' 23806 `no-altivec' 23807 Generate code that uses (does not use) AltiVec instructions. 23808 In 32-bit code, you cannot enable AltiVec instructions unless 23809 `-mabi=altivec' is used on the command line. 23810 23811 `cmpb' 23812 `no-cmpb' 23813 Generate code that uses (does not use) the compare bytes 23814 instruction implemented on the POWER6 processor and other 23815 processors that support the PowerPC V2.05 architecture. 23816 23817 `dlmzb' 23818 `no-dlmzb' 23819 Generate code that uses (does not use) the string-search 23820 `dlmzb' instruction on the IBM 405, 440, 464 and 476 23821 processors. This instruction is generated by default when 23822 targeting those processors. 23823 23824 `fprnd' 23825 `no-fprnd' 23826 Generate code that uses (does not use) the FP round to integer 23827 instructions implemented on the POWER5+ processor and other 23828 processors that support the PowerPC V2.03 architecture. 23829 23830 `hard-dfp' 23831 `no-hard-dfp' 23832 Generate code that uses (does not use) the decimal 23833 floating-point instructions implemented on some POWER 23834 processors. 23835 23836 `isel' 23837 `no-isel' 23838 Generate code that uses (does not use) ISEL instruction. 23839 23840 `mfcrf' 23841 `no-mfcrf' 23842 Generate code that uses (does not use) the move from condition 23843 register field instruction implemented on the POWER4 23844 processor and other processors that support the PowerPC V2.01 23845 architecture. 23846 23847 `mfpgpr' 23848 `no-mfpgpr' 23849 Generate code that uses (does not use) the FP move to/from 23850 general purpose register instructions implemented on the 23851 POWER6X processor and other processors that support the 23852 extended PowerPC V2.05 architecture. 23853 23854 `mulhw' 23855 `no-mulhw' 23856 Generate code that uses (does not use) the half-word multiply 23857 and multiply-accumulate instructions on the IBM 405, 440, 464 23858 and 476 processors. These instructions are generated by 23859 default when targeting those processors. 23860 23861 `multiple' 23862 `no-multiple' 23863 Generate code that uses (does not use) the load multiple word 23864 instructions and the store multiple word instructions. 23865 23866 `update' 23867 `no-update' 23868 Generate code that uses (does not use) the load or store 23869 instructions that update the base register to the address of 23870 the calculated memory location. 23871 23872 `popcntb' 23873 `no-popcntb' 23874 Generate code that uses (does not use) the popcount and 23875 double-precision FP reciprocal estimate instruction 23876 implemented on the POWER5 processor and other processors that 23877 support the PowerPC V2.02 architecture. 23878 23879 `popcntd' 23880 `no-popcntd' 23881 Generate code that uses (does not use) the popcount 23882 instruction implemented on the POWER7 processor and other 23883 processors that support the PowerPC V2.06 architecture. 23884 23885 `powerpc-gfxopt' 23886 `no-powerpc-gfxopt' 23887 Generate code that uses (does not use) the optional PowerPC 23888 architecture instructions in the Graphics group, including 23889 floating-point select. 23890 23891 `powerpc-gpopt' 23892 `no-powerpc-gpopt' 23893 Generate code that uses (does not use) the optional PowerPC 23894 architecture instructions in the General Purpose group, 23895 including floating-point square root. 23896 23897 `recip-precision' 23898 `no-recip-precision' 23899 Assume (do not assume) that the reciprocal estimate 23900 instructions provide higher-precision estimates than is 23901 mandated by the powerpc ABI. 23902 23903 `string' 23904 `no-string' 23905 Generate code that uses (does not use) the load string 23906 instructions and the store string word instructions to save 23907 multiple registers and do small block moves. 23908 23909 `vsx' 23910 `no-vsx' 23911 Generate code that uses (does not use) vector/scalar (VSX) 23912 instructions, and also enable the use of built-in functions 23913 that allow more direct access to the VSX instruction set. In 23914 32-bit code, you cannot enable VSX or AltiVec instructions 23915 unless `-mabi=altivec' is used on the command line. 23916 23917 `friz' 23918 `no-friz' 23919 Generate (do not generate) the `friz' instruction when the 23920 `-funsafe-math-optimizations' option is used to optimize 23921 rounding a floating-point value to 64-bit integer and back to 23922 floating point. The `friz' instruction does not return the 23923 same value if the floating-point number is too large to fit 23924 in an integer. 23925 23926 `avoid-indexed-addresses' 23927 `no-avoid-indexed-addresses' 23928 Generate code that tries to avoid (not avoid) the use of 23929 indexed load or store instructions. 23930 23931 `paired' 23932 `no-paired' 23933 Generate code that uses (does not use) the generation of 23934 PAIRED simd instructions. 23935 23936 `longcall' 23937 `no-longcall' 23938 Generate code that assumes (does not assume) that all calls 23939 are far away so that a longer more expensive calling sequence 23940 is required. 23941 23942 `cpu=CPU' 23943 Specify the architecture to generate code for when compiling 23944 the function. If you select the `target("cpu=power7")' 23945 attribute when generating 32-bit code, VSX and AltiVec 23946 instructions are not generated unless you use the 23947 `-mabi=altivec' option on the command line. 23948 23949 `tune=TUNE' 23950 Specify the architecture to tune for when compiling the 23951 function. If you do not specify the `target("tune=TUNE")' 23952 attribute and you do specify the `target("cpu=CPU")' 23953 attribute, compilation tunes for the CPU architecture, and 23954 not the default tuning specified on the command line. 23955 23956 On the 386/x86_64 and PowerPC back ends, you can use either 23957 multiple strings to specify multiple options, or you can separate 23958 the option with a comma (`,'). 23959 23960 On the 386/x86_64 and PowerPC back ends, the inliner does not 23961 inline a function that has different target options than the 23962 caller, unless the callee has a subset of the target options of 23963 the caller. For example a function declared with `target("sse3")' 23964 can inline a function with `target("sse2")', since `-msse3' 23965 implies `-msse2'. 23966 23967 The `target' attribute is not implemented in GCC versions earlier 23968 than 4.4 for the i386/x86_64 and 4.6 for the PowerPC back ends. 23969 It is not currently implemented for other back ends. 23970 23971`tiny_data' 23972 Use this attribute on the H8/300H and H8S to indicate that the 23973 specified variable should be placed into the tiny data section. 23974 The compiler generates more efficient code for loads and stores on 23975 data in the tiny data section. Note the tiny data area is limited 23976 to slightly under 32KB of data. 23977 23978`trap_exit' 23979 Use this attribute on the SH for an `interrupt_handler' to return 23980 using `trapa' instead of `rte'. This attribute expects an integer 23981 argument specifying the trap number to be used. 23982 23983`trapa_handler' 23984 On SH targets this function attribute is similar to 23985 `interrupt_handler' but it does not save and restore all registers. 23986 23987`unused' 23988 This attribute, attached to a function, means that the function is 23989 meant to be possibly unused. GCC does not produce a warning for 23990 this function. 23991 23992`used' 23993 This attribute, attached to a function, means that code must be 23994 emitted for the function even if it appears that the function is 23995 not referenced. This is useful, for example, when the function is 23996 referenced only in inline assembly. 23997 23998 When applied to a member function of a C++ class template, the 23999 attribute also means that the function is instantiated if the 24000 class itself is instantiated. 24001 24002`version_id' 24003 This IA-64 HP-UX attribute, attached to a global variable or 24004 function, renames a symbol to contain a version string, thus 24005 allowing for function level versioning. HP-UX system header files 24006 may use version level functioning for some system calls. 24007 24008 extern int foo () __attribute__((version_id ("20040821"))); 24009 24010 Calls to FOO are mapped to calls to FOO{20040821}. 24011 24012`visibility ("VISIBILITY_TYPE")' 24013 This attribute affects the linkage of the declaration to which it 24014 is attached. There are four supported VISIBILITY_TYPE values: 24015 default, hidden, protected or internal visibility. 24016 24017 void __attribute__ ((visibility ("protected"))) 24018 f () { /* Do something. */; } 24019 int i __attribute__ ((visibility ("hidden"))); 24020 24021 The possible values of VISIBILITY_TYPE correspond to the 24022 visibility settings in the ELF gABI. 24023 24024 "default" 24025 Default visibility is the normal case for the object file 24026 format. This value is available for the visibility attribute 24027 to override other options that may change the assumed 24028 visibility of entities. 24029 24030 On ELF, default visibility means that the declaration is 24031 visible to other modules and, in shared libraries, means that 24032 the declared entity may be overridden. 24033 24034 On Darwin, default visibility means that the declaration is 24035 visible to other modules. 24036 24037 Default visibility corresponds to "external linkage" in the 24038 language. 24039 24040 "hidden" 24041 Hidden visibility indicates that the entity declared has a new 24042 form of linkage, which we call "hidden linkage". Two 24043 declarations of an object with hidden linkage refer to the 24044 same object if they are in the same shared object. 24045 24046 "internal" 24047 Internal visibility is like hidden visibility, but with 24048 additional processor specific semantics. Unless otherwise 24049 specified by the psABI, GCC defines internal visibility to 24050 mean that a function is _never_ called from another module. 24051 Compare this with hidden functions which, while they cannot 24052 be referenced directly by other modules, can be referenced 24053 indirectly via function pointers. By indicating that a 24054 function cannot be called from outside the module, GCC may 24055 for instance omit the load of a PIC register since it is known 24056 that the calling function loaded the correct value. 24057 24058 "protected" 24059 Protected visibility is like default visibility except that it 24060 indicates that references within the defining module bind to 24061 the definition in that module. That is, the declared entity 24062 cannot be overridden by another module. 24063 24064 24065 All visibilities are supported on many, but not all, ELF targets 24066 (supported when the assembler supports the `.visibility' 24067 pseudo-op). Default visibility is supported everywhere. Hidden 24068 visibility is supported on Darwin targets. 24069 24070 The visibility attribute should be applied only to declarations 24071 that would otherwise have external linkage. The attribute should 24072 be applied consistently, so that the same entity should not be 24073 declared with different settings of the attribute. 24074 24075 In C++, the visibility attribute applies to types as well as 24076 functions and objects, because in C++ types have linkage. A class 24077 must not have greater visibility than its non-static data member 24078 types and bases, and class members default to the visibility of 24079 their class. Also, a declaration without explicit visibility is 24080 limited to the visibility of its type. 24081 24082 In C++, you can mark member functions and static member variables 24083 of a class with the visibility attribute. This is useful if you 24084 know a particular method or static member variable should only be 24085 used from one shared object; then you can mark it hidden while the 24086 rest of the class has default visibility. Care must be taken to 24087 avoid breaking the One Definition Rule; for example, it is usually 24088 not useful to mark an inline method as hidden without marking the 24089 whole class as hidden. 24090 24091 A C++ namespace declaration can also have the visibility attribute. 24092 This attribute applies only to the particular namespace body, not 24093 to other definitions of the same namespace; it is equivalent to 24094 using `#pragma GCC visibility' before and after the namespace 24095 definition (*note Visibility Pragmas::). 24096 24097 In C++, if a template argument has limited visibility, this 24098 restriction is implicitly propagated to the template instantiation. 24099 Otherwise, template instantiations and specializations default to 24100 the visibility of their template. 24101 24102 If both the template and enclosing class have explicit visibility, 24103 the visibility from the template is used. 24104 24105`vliw' 24106 On MeP, the `vliw' attribute tells the compiler to emit 24107 instructions in VLIW mode instead of core mode. Note that this 24108 attribute is not allowed unless a VLIW coprocessor has been 24109 configured and enabled through command-line options. 24110 24111`warn_unused_result' 24112 The `warn_unused_result' attribute causes a warning to be emitted 24113 if a caller of the function with this attribute does not use its 24114 return value. This is useful for functions where not checking the 24115 result is either a security problem or always a bug, such as 24116 `realloc'. 24117 24118 int fn () __attribute__ ((warn_unused_result)); 24119 int foo () 24120 { 24121 if (fn () < 0) return -1; 24122 fn (); 24123 return 0; 24124 } 24125 24126 results in warning on line 5. 24127 24128`weak' 24129 The `weak' attribute causes the declaration to be emitted as a weak 24130 symbol rather than a global. This is primarily useful in defining 24131 library functions that can be overridden in user code, though it 24132 can also be used with non-function declarations. Weak symbols are 24133 supported for ELF targets, and also for a.out targets when using 24134 the GNU assembler and linker. 24135 24136`weakref' 24137`weakref ("TARGET")' 24138 The `weakref' attribute marks a declaration as a weak reference. 24139 Without arguments, it should be accompanied by an `alias' attribute 24140 naming the target symbol. Optionally, the TARGET may be given as 24141 an argument to `weakref' itself. In either case, `weakref' 24142 implicitly marks the declaration as `weak'. Without a TARGET, 24143 given as an argument to `weakref' or to `alias', `weakref' is 24144 equivalent to `weak'. 24145 24146 static int x() __attribute__ ((weakref ("y"))); 24147 /* is equivalent to... */ 24148 static int x() __attribute__ ((weak, weakref, alias ("y"))); 24149 /* and to... */ 24150 static int x() __attribute__ ((weakref)); 24151 static int x() __attribute__ ((alias ("y"))); 24152 24153 A weak reference is an alias that does not by itself require a 24154 definition to be given for the target symbol. If the target 24155 symbol is only referenced through weak references, then it becomes 24156 a `weak' undefined symbol. If it is directly referenced, however, 24157 then such strong references prevail, and a definition is required 24158 for the symbol, not necessarily in the same translation unit. 24159 24160 The effect is equivalent to moving all references to the alias to a 24161 separate translation unit, renaming the alias to the aliased 24162 symbol, declaring it as weak, compiling the two separate 24163 translation units and performing a reloadable link on them. 24164 24165 At present, a declaration to which `weakref' is attached can only 24166 be `static'. 24167 24168 24169 You can specify multiple attributes in a declaration by separating them 24170by commas within the double parentheses or by immediately following an 24171attribute declaration with another attribute declaration. 24172 24173 Some people object to the `__attribute__' feature, suggesting that ISO 24174C's `#pragma' should be used instead. At the time `__attribute__' was 24175designed, there were two reasons for not doing this. 24176 24177 1. It is impossible to generate `#pragma' commands from a macro. 24178 24179 2. There is no telling what the same `#pragma' might mean in another 24180 compiler. 24181 24182 These two reasons applied to almost any application that might have 24183been proposed for `#pragma'. It was basically a mistake to use 24184`#pragma' for _anything_. 24185 24186 The ISO C99 standard includes `_Pragma', which now allows pragmas to 24187be generated from macros. In addition, a `#pragma GCC' namespace is 24188now in use for GCC-specific pragmas. However, it has been found 24189convenient to use `__attribute__' to achieve a natural attachment of 24190attributes to their corresponding declarations, whereas `#pragma GCC' 24191is of use for constructs that do not naturally form part of the 24192grammar. *Note Pragmas Accepted by GCC: Pragmas. 24193 24194 24195File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 24196 241976.31 Attribute Syntax 24198===================== 24199 24200This section describes the syntax with which `__attribute__' may be 24201used, and the constructs to which attribute specifiers bind, for the C 24202language. Some details may vary for C++ and Objective-C. Because of 24203infelicities in the grammar for attributes, some forms described here 24204may not be successfully parsed in all cases. 24205 24206 There are some problems with the semantics of attributes in C++. For 24207example, there are no manglings for attributes, although they may affect 24208code generation, so problems may arise when attributed types are used in 24209conjunction with templates or overloading. Similarly, `typeid' does 24210not distinguish between types with different attributes. Support for 24211attributes in C++ may be restricted in future to attributes on 24212declarations only, but not on nested declarators. 24213 24214 *Note Function Attributes::, for details of the semantics of attributes 24215applying to functions. *Note Variable Attributes::, for details of the 24216semantics of attributes applying to variables. *Note Type Attributes::, 24217for details of the semantics of attributes applying to structure, union 24218and enumerated types. 24219 24220 An "attribute specifier" is of the form `__attribute__ 24221((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 24222comma-separated sequence of "attributes", where each attribute is one 24223of the following: 24224 24225 * Empty. Empty attributes are ignored. 24226 24227 * A word (which may be an identifier such as `unused', or a reserved 24228 word such as `const'). 24229 24230 * A word, followed by, in parentheses, parameters for the attribute. 24231 These parameters take one of the following forms: 24232 24233 * An identifier. For example, `mode' attributes use this form. 24234 24235 * An identifier followed by a comma and a non-empty 24236 comma-separated list of expressions. For example, `format' 24237 attributes use this form. 24238 24239 * A possibly empty comma-separated list of expressions. For 24240 example, `format_arg' attributes use this form with the list 24241 being a single integer constant expression, and `alias' 24242 attributes use this form with the list being a single string 24243 constant. 24244 24245 An "attribute specifier list" is a sequence of one or more attribute 24246specifiers, not separated by any other tokens. 24247 24248 In GNU C, an attribute specifier list may appear after the colon 24249following a label, other than a `case' or `default' label. The only 24250attribute it makes sense to use after a label is `unused'. This 24251feature is intended for program-generated code that may contain unused 24252labels, but which is compiled with `-Wall'. It is not normally 24253appropriate to use in it human-written code, though it could be useful 24254in cases where the code that jumps to the label is contained within an 24255`#ifdef' conditional. GNU C++ only permits attributes on labels if the 24256attribute specifier is immediately followed by a semicolon (i.e., the 24257label applies to an empty statement). If the semicolon is missing, C++ 24258label attributes are ambiguous, as it is permissible for a declaration, 24259which could begin with an attribute list, to be labelled in C++. 24260Declarations cannot be labelled in C90 or C99, so the ambiguity does 24261not arise there. 24262 24263 An attribute specifier list may appear as part of a `struct', `union' 24264or `enum' specifier. It may go either immediately after the `struct', 24265`union' or `enum' keyword, or after the closing brace. The former 24266syntax is preferred. Where attribute specifiers follow the closing 24267brace, they are considered to relate to the structure, union or 24268enumerated type defined, not to any enclosing declaration the type 24269specifier appears in, and the type defined is not complete until after 24270the attribute specifiers. 24271 24272 Otherwise, an attribute specifier appears as part of a declaration, 24273counting declarations of unnamed parameters and type names, and relates 24274to that declaration (which may be nested in another declaration, for 24275example in the case of a parameter declaration), or to a particular 24276declarator within a declaration. Where an attribute specifier is 24277applied to a parameter declared as a function or an array, it should 24278apply to the function or array rather than the pointer to which the 24279parameter is implicitly converted, but this is not yet correctly 24280implemented. 24281 24282 Any list of specifiers and qualifiers at the start of a declaration may 24283contain attribute specifiers, whether or not such a list may in that 24284context contain storage class specifiers. (Some attributes, however, 24285are essentially in the nature of storage class specifiers, and only make 24286sense where storage class specifiers may be used; for example, 24287`section'.) There is one necessary limitation to this syntax: the 24288first old-style parameter declaration in a function definition cannot 24289begin with an attribute specifier, because such an attribute applies to 24290the function instead by syntax described below (which, however, is not 24291yet implemented in this case). In some other cases, attribute 24292specifiers are permitted by this grammar but not yet supported by the 24293compiler. All attribute specifiers in this place relate to the 24294declaration as a whole. In the obsolescent usage where a type of `int' 24295is implied by the absence of type specifiers, such a list of specifiers 24296and qualifiers may be an attribute specifier list with no other 24297specifiers or qualifiers. 24298 24299 At present, the first parameter in a function prototype must have some 24300type specifier that is not an attribute specifier; this resolves an 24301ambiguity in the interpretation of `void f(int (__attribute__((foo)) 24302x))', but is subject to change. At present, if the parentheses of a 24303function declarator contain only attributes then those attributes are 24304ignored, rather than yielding an error or warning or implying a single 24305parameter of type int, but this is subject to change. 24306 24307 An attribute specifier list may appear immediately before a declarator 24308(other than the first) in a comma-separated list of declarators in a 24309declaration of more than one identifier using a single list of 24310specifiers and qualifiers. Such attribute specifiers apply only to the 24311identifier before whose declarator they appear. For example, in 24312 24313 __attribute__((noreturn)) void d0 (void), 24314 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 24315 d2 (void) 24316 24317the `noreturn' attribute applies to all the functions declared; the 24318`format' attribute only applies to `d1'. 24319 24320 An attribute specifier list may appear immediately before the comma, 24321`=' or semicolon terminating the declaration of an identifier other 24322than a function definition. Such attribute specifiers apply to the 24323declared object or function. Where an assembler name for an object or 24324function is specified (*note Asm Labels::), the attribute must follow 24325the `asm' specification. 24326 24327 An attribute specifier list may, in future, be permitted to appear 24328after the declarator in a function definition (before any old-style 24329parameter declarations or the function body). 24330 24331 Attribute specifiers may be mixed with type qualifiers appearing inside 24332the `[]' of a parameter array declarator, in the C99 construct by which 24333such qualifiers are applied to the pointer to which the array is 24334implicitly converted. Such attribute specifiers apply to the pointer, 24335not to the array, but at present this is not implemented and they are 24336ignored. 24337 24338 An attribute specifier list may appear at the start of a nested 24339declarator. At present, there are some limitations in this usage: the 24340attributes correctly apply to the declarator, but for most individual 24341attributes the semantics this implies are not implemented. When 24342attribute specifiers follow the `*' of a pointer declarator, they may 24343be mixed with any type qualifiers present. The following describes the 24344formal semantics of this syntax. It makes the most sense if you are 24345familiar with the formal specification of declarators in the ISO C 24346standard. 24347 24348 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 24349where `T' contains declaration specifiers that specify a type TYPE 24350(such as `int') and `D1' is a declarator that contains an identifier 24351IDENT. The type specified for IDENT for derived declarators whose type 24352does not include an attribute specifier is as in the ISO C standard. 24353 24354 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 24355declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 24356TYPE" for IDENT, then `T D1' specifies the type 24357"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 24358 24359 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 24360D', and the declaration `T D' specifies the type 24361"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 24362the type "DERIVED-DECLARATOR-TYPE-LIST 24363TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT. 24364 24365 For example, 24366 24367 void (__attribute__((noreturn)) ****f) (void); 24368 24369specifies the type "pointer to pointer to pointer to pointer to 24370non-returning function returning `void'". As another example, 24371 24372 char *__attribute__((aligned(8))) *f; 24373 24374specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 24375again that this does not work with most attributes; for example, the 24376usage of `aligned' and `noreturn' attributes given above is not yet 24377supported. 24378 24379 For compatibility with existing code written for compiler versions that 24380did not implement attributes on nested declarators, some laxity is 24381allowed in the placing of attributes. If an attribute that only applies 24382to types is applied to a declaration, it is treated as applying to the 24383type of that declaration. If an attribute that only applies to 24384declarations is applied to the type of a declaration, it is treated as 24385applying to that declaration; and, for compatibility with code placing 24386the attributes immediately before the identifier declared, such an 24387attribute applied to a function return type is treated as applying to 24388the function type, and such an attribute applied to an array element 24389type is treated as applying to the array type. If an attribute that 24390only applies to function types is applied to a pointer-to-function 24391type, it is treated as applying to the pointer target type; if such an 24392attribute is applied to a function return type that is not a 24393pointer-to-function type, it is treated as applying to the function 24394type. 24395 24396 24397File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 24398 243996.32 Prototypes and Old-Style Function Definitions 24400================================================== 24401 24402GNU C extends ISO C to allow a function prototype to override a later 24403old-style non-prototype definition. Consider the following example: 24404 24405 /* Use prototypes unless the compiler is old-fashioned. */ 24406 #ifdef __STDC__ 24407 #define P(x) x 24408 #else 24409 #define P(x) () 24410 #endif 24411 24412 /* Prototype function declaration. */ 24413 int isroot P((uid_t)); 24414 24415 /* Old-style function definition. */ 24416 int 24417 isroot (x) /* ??? lossage here ??? */ 24418 uid_t x; 24419 { 24420 return x == 0; 24421 } 24422 24423 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 24424this example, because subword arguments in old-style non-prototype 24425definitions are promoted. Therefore in this example the function 24426definition's argument is really an `int', which does not match the 24427prototype argument type of `short'. 24428 24429 This restriction of ISO C makes it hard to write code that is portable 24430to traditional C compilers, because the programmer does not know 24431whether the `uid_t' type is `short', `int', or `long'. Therefore, in 24432cases like these GNU C allows a prototype to override a later old-style 24433definition. More precisely, in GNU C, a function prototype argument 24434type overrides the argument type specified by a later old-style 24435definition if the former type is the same as the latter type before 24436promotion. Thus in GNU C the above example is equivalent to the 24437following: 24438 24439 int isroot (uid_t); 24440 24441 int 24442 isroot (uid_t x) 24443 { 24444 return x == 0; 24445 } 24446 24447GNU C++ does not support old-style function definitions, so this 24448extension is irrelevant. 24449 24450 24451File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 24452 244536.33 C++ Style Comments 24454======================= 24455 24456In GNU C, you may use C++ style comments, which start with `//' and 24457continue until the end of the line. Many other C implementations allow 24458such comments, and they are included in the 1999 C standard. However, 24459C++ style comments are not recognized if you specify an `-std' option 24460specifying a version of ISO C before C99, or `-ansi' (equivalent to 24461`-std=c90'). 24462 24463 24464File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 24465 244666.34 Dollar Signs in Identifier Names 24467===================================== 24468 24469In GNU C, you may normally use dollar signs in identifier names. This 24470is because many traditional C implementations allow such identifiers. 24471However, dollar signs in identifiers are not supported on a few target 24472machines, typically because the target assembler does not allow them. 24473 24474 24475File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 24476 244776.35 The Character <ESC> in Constants 24478===================================== 24479 24480You can use the sequence `\e' in a string or character constant to 24481stand for the ASCII character <ESC>. 24482 24483 24484File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 24485 244866.36 Specifying Attributes of Variables 24487======================================= 24488 24489The keyword `__attribute__' allows you to specify special attributes of 24490variables or structure fields. This keyword is followed by an 24491attribute specification inside double parentheses. Some attributes are 24492currently defined generically for variables. Other attributes are 24493defined for variables on particular target systems. Other attributes 24494are available for functions (*note Function Attributes::) and for types 24495(*note Type Attributes::). Other front ends might define more 24496attributes (*note Extensions to the C++ Language: C++ Extensions.). 24497 24498 You may also specify attributes with `__' preceding and following each 24499keyword. This allows you to use them in header files without being 24500concerned about a possible macro of the same name. For example, you 24501may use `__aligned__' instead of `aligned'. 24502 24503 *Note Attribute Syntax::, for details of the exact syntax for using 24504attributes. 24505 24506`aligned (ALIGNMENT)' 24507 This attribute specifies a minimum alignment for the variable or 24508 structure field, measured in bytes. For example, the declaration: 24509 24510 int x __attribute__ ((aligned (16))) = 0; 24511 24512 causes the compiler to allocate the global variable `x' on a 24513 16-byte boundary. On a 68040, this could be used in conjunction 24514 with an `asm' expression to access the `move16' instruction which 24515 requires 16-byte aligned operands. 24516 24517 You can also specify the alignment of structure fields. For 24518 example, to create a double-word aligned `int' pair, you could 24519 write: 24520 24521 struct foo { int x[2] __attribute__ ((aligned (8))); }; 24522 24523 This is an alternative to creating a union with a `double' member, 24524 which forces the union to be double-word aligned. 24525 24526 As in the preceding examples, you can explicitly specify the 24527 alignment (in bytes) that you wish the compiler to use for a given 24528 variable or structure field. Alternatively, you can leave out the 24529 alignment factor and just ask the compiler to align a variable or 24530 field to the default alignment for the target architecture you are 24531 compiling for. The default alignment is sufficient for all scalar 24532 types, but may not be enough for all vector types on a target that 24533 supports vector operations. The default alignment is fixed for a 24534 particular target ABI. 24535 24536 GCC also provides a target specific macro `__BIGGEST_ALIGNMENT__', 24537 which is the largest alignment ever used for any data type on the 24538 target machine you are compiling for. For example, you could 24539 write: 24540 24541 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 24542 24543 The compiler automatically sets the alignment for the declared 24544 variable or field to `__BIGGEST_ALIGNMENT__'. Doing this can 24545 often make copy operations more efficient, because the compiler can 24546 use whatever instructions copy the biggest chunks of memory when 24547 performing copies to or from the variables or fields that you have 24548 aligned this way. Note that the value of `__BIGGEST_ALIGNMENT__' 24549 may change depending on command-line options. 24550 24551 When used on a struct, or struct member, the `aligned' attribute 24552 can only increase the alignment; in order to decrease it, the 24553 `packed' attribute must be specified as well. When used as part 24554 of a typedef, the `aligned' attribute can both increase and 24555 decrease alignment, and specifying the `packed' attribute 24556 generates a warning. 24557 24558 Note that the effectiveness of `aligned' attributes may be limited 24559 by inherent limitations in your linker. On many systems, the 24560 linker is only able to arrange for variables to be aligned up to a 24561 certain maximum alignment. (For some linkers, the maximum 24562 supported alignment may be very very small.) If your linker is 24563 only able to align variables up to a maximum of 8-byte alignment, 24564 then specifying `aligned(16)' in an `__attribute__' still only 24565 provides you with 8-byte alignment. See your linker documentation 24566 for further information. 24567 24568 The `aligned' attribute can also be used for functions (*note 24569 Function Attributes::.) 24570 24571`cleanup (CLEANUP_FUNCTION)' 24572 The `cleanup' attribute runs a function when the variable goes out 24573 of scope. This attribute can only be applied to auto function 24574 scope variables; it may not be applied to parameters or variables 24575 with static storage duration. The function must take one 24576 parameter, a pointer to a type compatible with the variable. The 24577 return value of the function (if any) is ignored. 24578 24579 If `-fexceptions' is enabled, then CLEANUP_FUNCTION is run during 24580 the stack unwinding that happens during the processing of the 24581 exception. Note that the `cleanup' attribute does not allow the 24582 exception to be caught, only to perform an action. It is 24583 undefined what happens if CLEANUP_FUNCTION does not return 24584 normally. 24585 24586`common' 24587`nocommon' 24588 The `common' attribute requests GCC to place a variable in 24589 "common" storage. The `nocommon' attribute requests the 24590 opposite--to allocate space for it directly. 24591 24592 These attributes override the default chosen by the `-fno-common' 24593 and `-fcommon' flags respectively. 24594 24595`deprecated' 24596`deprecated (MSG)' 24597 The `deprecated' attribute results in a warning if the variable is 24598 used anywhere in the source file. This is useful when identifying 24599 variables that are expected to be removed in a future version of a 24600 program. The warning also includes the location of the declaration 24601 of the deprecated variable, to enable users to easily find further 24602 information about why the variable is deprecated, or what they 24603 should do instead. Note that the warning only occurs for uses: 24604 24605 extern int old_var __attribute__ ((deprecated)); 24606 extern int old_var; 24607 int new_fn () { return old_var; } 24608 24609 results in a warning on line 3 but not line 2. The optional MSG 24610 argument, which must be a string, is printed in the warning if 24611 present. 24612 24613 The `deprecated' attribute can also be used for functions and 24614 types (*note Function Attributes::, *note Type Attributes::.) 24615 24616`mode (MODE)' 24617 This attribute specifies the data type for the 24618 declaration--whichever type corresponds to the mode MODE. This in 24619 effect lets you request an integer or floating-point type 24620 according to its width. 24621 24622 You may also specify a mode of `byte' or `__byte__' to indicate 24623 the mode corresponding to a one-byte integer, `word' or `__word__' 24624 for the mode of a one-word integer, and `pointer' or `__pointer__' 24625 for the mode used to represent pointers. 24626 24627`packed' 24628 The `packed' attribute specifies that a variable or structure field 24629 should have the smallest possible alignment--one byte for a 24630 variable, and one bit for a field, unless you specify a larger 24631 value with the `aligned' attribute. 24632 24633 Here is a structure in which the field `x' is packed, so that it 24634 immediately follows `a': 24635 24636 struct foo 24637 { 24638 char a; 24639 int x[2] __attribute__ ((packed)); 24640 }; 24641 24642 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' 24643 attribute on bit-fields of type `char'. This has been fixed in 24644 GCC 4.4 but the change can lead to differences in the structure 24645 layout. See the documentation of `-Wpacked-bitfield-compat' for 24646 more information. 24647 24648`section ("SECTION-NAME")' 24649 Normally, the compiler places the objects it generates in sections 24650 like `data' and `bss'. Sometimes, however, you need additional 24651 sections, or you need certain particular variables to appear in 24652 special sections, for example to map to special hardware. The 24653 `section' attribute specifies that a variable (or function) lives 24654 in a particular section. For example, this small program uses 24655 several specific section names: 24656 24657 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 24658 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 24659 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 24660 int init_data __attribute__ ((section ("INITDATA"))); 24661 24662 main() 24663 { 24664 /* Initialize stack pointer */ 24665 init_sp (stack + sizeof (stack)); 24666 24667 /* Initialize initialized data */ 24668 memcpy (&init_data, &data, &edata - &data); 24669 24670 /* Turn on the serial ports */ 24671 init_duart (&a); 24672 init_duart (&b); 24673 } 24674 24675 Use the `section' attribute with _global_ variables and not 24676 _local_ variables, as shown in the example. 24677 24678 You may use the `section' attribute with initialized or 24679 uninitialized global variables but the linker requires each object 24680 be defined once, with the exception that uninitialized variables 24681 tentatively go in the `common' (or `bss') section and can be 24682 multiply "defined". Using the `section' attribute changes what 24683 section the variable goes into and may cause the linker to issue 24684 an error if an uninitialized variable has multiple definitions. 24685 You can force a variable to be initialized with the `-fno-common' 24686 flag or the `nocommon' attribute. 24687 24688 Some file formats do not support arbitrary sections so the 24689 `section' attribute is not available on all platforms. If you 24690 need to map the entire contents of a module to a particular 24691 section, consider using the facilities of the linker instead. 24692 24693`shared' 24694 On Microsoft Windows, in addition to putting variable definitions 24695 in a named section, the section can also be shared among all 24696 running copies of an executable or DLL. For example, this small 24697 program defines shared data by putting it in a named section 24698 `shared' and marking the section shareable: 24699 24700 int foo __attribute__((section ("shared"), shared)) = 0; 24701 24702 int 24703 main() 24704 { 24705 /* Read and write foo. All running 24706 copies see the same value. */ 24707 return 0; 24708 } 24709 24710 You may only use the `shared' attribute along with `section' 24711 attribute with a fully-initialized global definition because of 24712 the way linkers work. See `section' attribute for more 24713 information. 24714 24715 The `shared' attribute is only available on Microsoft Windows. 24716 24717`tls_model ("TLS_MODEL")' 24718 The `tls_model' attribute sets thread-local storage model (*note 24719 Thread-Local::) of a particular `__thread' variable, overriding 24720 `-ftls-model=' command-line switch on a per-variable basis. The 24721 TLS_MODEL argument should be one of `global-dynamic', 24722 `local-dynamic', `initial-exec' or `local-exec'. 24723 24724 Not all targets support this attribute. 24725 24726`unused' 24727 This attribute, attached to a variable, means that the variable is 24728 meant to be possibly unused. GCC does not produce a warning for 24729 this variable. 24730 24731`used' 24732 This attribute, attached to a variable, means that the variable 24733 must be emitted even if it appears that the variable is not 24734 referenced. 24735 24736 When applied to a static data member of a C++ class template, the 24737 attribute also means that the member is instantiated if the class 24738 itself is instantiated. 24739 24740`vector_size (BYTES)' 24741 This attribute specifies the vector size for the variable, 24742 measured in bytes. For example, the declaration: 24743 24744 int foo __attribute__ ((vector_size (16))); 24745 24746 causes the compiler to set the mode for `foo', to be 16 bytes, 24747 divided into `int' sized units. Assuming a 32-bit int (a vector of 24748 4 units of 4 bytes), the corresponding mode of `foo' is V4SI. 24749 24750 This attribute is only applicable to integral and float scalars, 24751 although arrays, pointers, and function return values are allowed 24752 in conjunction with this construct. 24753 24754 Aggregates with this attribute are invalid, even if they are of 24755 the same size as a corresponding scalar. For example, the 24756 declaration: 24757 24758 struct S { int a; }; 24759 struct S __attribute__ ((vector_size (16))) foo; 24760 24761 is invalid even if the size of the structure is the same as the 24762 size of the `int'. 24763 24764`selectany' 24765 The `selectany' attribute causes an initialized global variable to 24766 have link-once semantics. When multiple definitions of the 24767 variable are encountered by the linker, the first is selected and 24768 the remainder are discarded. Following usage by the Microsoft 24769 compiler, the linker is told _not_ to warn about size or content 24770 differences of the multiple definitions. 24771 24772 Although the primary usage of this attribute is for POD types, the 24773 attribute can also be applied to global C++ objects that are 24774 initialized by a constructor. In this case, the static 24775 initialization and destruction code for the object is emitted in 24776 each translation defining the object, but the calls to the 24777 constructor and destructor are protected by a link-once guard 24778 variable. 24779 24780 The `selectany' attribute is only available on Microsoft Windows 24781 targets. You can use `__declspec (selectany)' as a synonym for 24782 `__attribute__ ((selectany))' for compatibility with other 24783 compilers. 24784 24785`weak' 24786 The `weak' attribute is described in *note Function Attributes::. 24787 24788`dllimport' 24789 The `dllimport' attribute is described in *note Function 24790 Attributes::. 24791 24792`dllexport' 24793 The `dllexport' attribute is described in *note Function 24794 Attributes::. 24795 24796 247976.36.1 AVR Variable Attributes 24798------------------------------ 24799 24800`progmem' 24801 The `progmem' attribute is used on the AVR to place read-only data 24802 in the non-volatile program memory (flash). The `progmem' 24803 attribute accomplishes this by putting respective variables into a 24804 section whose name starts with `.progmem'. 24805 24806 This attribute works similar to the `section' attribute but adds 24807 additional checking. Notice that just like the `section' 24808 attribute, `progmem' affects the location of the data but not how 24809 this data is accessed. 24810 24811 In order to read data located with the `progmem' attribute 24812 (inline) assembler must be used. 24813 /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */ 24814 #include <avr/pgmspace.h> 24815 24816 /* Locate var in flash memory */ 24817 const int var[2] PROGMEM = { 1, 2 }; 24818 24819 int read_var (int i) 24820 { 24821 /* Access var[] by accessor macro from avr/pgmspace.h */ 24822 return (int) pgm_read_word (& var[i]); 24823 } 24824 24825 AVR is a Harvard architecture processor and data and read-only data 24826 normally resides in the data memory (RAM). 24827 24828 See also the *note AVR Named Address Spaces:: section for an 24829 alternate way to locate and access data in flash memory. 24830 248316.36.2 Blackfin Variable Attributes 24832----------------------------------- 24833 24834Three attributes are currently defined for the Blackfin. 24835 24836`l1_data' 24837`l1_data_A' 24838`l1_data_B' 24839 Use these attributes on the Blackfin to place the variable into L1 24840 Data SRAM. Variables with `l1_data' attribute are put into the 24841 specific section named `.l1.data'. Those with `l1_data_A' 24842 attribute are put into the specific section named `.l1.data.A'. 24843 Those with `l1_data_B' attribute are put into the specific section 24844 named `.l1.data.B'. 24845 24846`l2' 24847 Use this attribute on the Blackfin to place the variable into L2 24848 SRAM. Variables with `l2' attribute are put into the specific 24849 section named `.l2.data'. 24850 248516.36.3 M32R/D Variable Attributes 24852--------------------------------- 24853 24854One attribute is currently defined for the M32R/D. 24855 24856`model (MODEL-NAME)' 24857 Use this attribute on the M32R/D to set the addressability of an 24858 object. The identifier MODEL-NAME is one of `small', `medium', or 24859 `large', representing each of the code models. 24860 24861 Small model objects live in the lower 16MB of memory (so that their 24862 addresses can be loaded with the `ld24' instruction). 24863 24864 Medium and large model objects may live anywhere in the 32-bit 24865 address space (the compiler generates `seth/add3' instructions to 24866 load their addresses). 24867 248686.36.4 MeP Variable Attributes 24869------------------------------ 24870 24871The MeP target has a number of addressing modes and busses. The `near' 24872space spans the standard memory space's first 16 megabytes (24 bits). 24873The `far' space spans the entire 32-bit memory space. The `based' 24874space is a 128-byte region in the memory space that is addressed 24875relative to the `$tp' register. The `tiny' space is a 65536-byte 24876region relative to the `$gp' register. In addition to these memory 24877regions, the MeP target has a separate 16-bit control bus which is 24878specified with `cb' attributes. 24879 24880`based' 24881 Any variable with the `based' attribute is assigned to the 24882 `.based' section, and is accessed with relative to the `$tp' 24883 register. 24884 24885`tiny' 24886 Likewise, the `tiny' attribute assigned variables to the `.tiny' 24887 section, relative to the `$gp' register. 24888 24889`near' 24890 Variables with the `near' attribute are assumed to have addresses 24891 that fit in a 24-bit addressing mode. This is the default for 24892 large variables (`-mtiny=4' is the default) but this attribute can 24893 override `-mtiny=' for small variables, or override `-ml'. 24894 24895`far' 24896 Variables with the `far' attribute are addressed using a full 24897 32-bit address. Since this covers the entire memory space, this 24898 allows modules to make no assumptions about where variables might 24899 be stored. 24900 24901`io' 24902`io (ADDR)' 24903 Variables with the `io' attribute are used to address 24904 memory-mapped peripherals. If an address is specified, the 24905 variable is assigned that address, else it is not assigned an 24906 address (it is assumed some other module assigns an address). 24907 Example: 24908 24909 int timer_count __attribute__((io(0x123))); 24910 24911`cb' 24912`cb (ADDR)' 24913 Variables with the `cb' attribute are used to access the control 24914 bus, using special instructions. `addr' indicates the control bus 24915 address. Example: 24916 24917 int cpu_clock __attribute__((cb(0x123))); 24918 24919 249206.36.5 i386 Variable Attributes 24921------------------------------- 24922 24923Two attributes are currently defined for i386 configurations: 24924`ms_struct' and `gcc_struct' 24925 24926`ms_struct' 24927`gcc_struct' 24928 If `packed' is used on a structure, or if bit-fields are used, it 24929 may be that the Microsoft ABI lays out the structure differently 24930 than the way GCC normally does. Particularly when moving packed 24931 data between functions compiled with GCC and the native Microsoft 24932 compiler (either via function call or as data in a file), it may 24933 be necessary to access either format. 24934 24935 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 24936 Windows X86 compilers to match the native Microsoft compiler. 24937 24938 The Microsoft structure layout algorithm is fairly simple with the 24939 exception of the bit-field packing. The padding and alignment of 24940 members of structures and whether a bit-field can straddle a 24941 storage-unit boundary are determine by these rules: 24942 24943 1. Structure members are stored sequentially in the order in 24944 which they are declared: the first member has the lowest 24945 memory address and the last member the highest. 24946 24947 2. Every data object has an alignment requirement. The 24948 alignment requirement for all data except structures, unions, 24949 and arrays is either the size of the object or the current 24950 packing size (specified with either the `aligned' attribute 24951 or the `pack' pragma), whichever is less. For structures, 24952 unions, and arrays, the alignment requirement is the largest 24953 alignment requirement of its members. Every object is 24954 allocated an offset so that: 24955 24956 offset % alignment_requirement == 0 24957 24958 3. Adjacent bit-fields are packed into the same 1-, 2-, or 24959 4-byte allocation unit if the integral types are the same 24960 size and if the next bit-field fits into the current 24961 allocation unit without crossing the boundary imposed by the 24962 common alignment requirements of the bit-fields. 24963 24964 MSVC interprets zero-length bit-fields in the following ways: 24965 24966 1. If a zero-length bit-field is inserted between two bit-fields 24967 that are normally coalesced, the bit-fields are not coalesced. 24968 24969 For example: 24970 24971 struct 24972 { 24973 unsigned long bf_1 : 12; 24974 unsigned long : 0; 24975 unsigned long bf_2 : 12; 24976 } t1; 24977 24978 The size of `t1' is 8 bytes with the zero-length bit-field. 24979 If the zero-length bit-field were removed, `t1''s size would 24980 be 4 bytes. 24981 24982 2. If a zero-length bit-field is inserted after a bit-field, 24983 `foo', and the alignment of the zero-length bit-field is 24984 greater than the member that follows it, `bar', `bar' is 24985 aligned as the type of the zero-length bit-field. 24986 24987 For example: 24988 24989 struct 24990 { 24991 char foo : 4; 24992 short : 0; 24993 char bar; 24994 } t2; 24995 24996 struct 24997 { 24998 char foo : 4; 24999 short : 0; 25000 double bar; 25001 } t3; 25002 25003 For `t2', `bar' is placed at offset 2, rather than offset 1. 25004 Accordingly, the size of `t2' is 4. For `t3', the zero-length 25005 bit-field does not affect the alignment of `bar' or, as a 25006 result, the size of the structure. 25007 25008 Taking this into account, it is important to note the 25009 following: 25010 25011 1. If a zero-length bit-field follows a normal bit-field, 25012 the type of the zero-length bit-field may affect the 25013 alignment of the structure as whole. For example, `t2' 25014 has a size of 4 bytes, since the zero-length bit-field 25015 follows a normal bit-field, and is of type short. 25016 25017 2. Even if a zero-length bit-field is not followed by a 25018 normal bit-field, it may still affect the alignment of 25019 the structure: 25020 25021 struct 25022 { 25023 char foo : 6; 25024 long : 0; 25025 } t4; 25026 25027 Here, `t4' takes up 4 bytes. 25028 25029 3. Zero-length bit-fields following non-bit-field members are 25030 ignored: 25031 25032 struct 25033 { 25034 char foo; 25035 long : 0; 25036 char bar; 25037 } t5; 25038 25039 Here, `t5' takes up 2 bytes. 25040 250416.36.6 PowerPC Variable Attributes 25042---------------------------------- 25043 25044Three attributes currently are defined for PowerPC configurations: 25045`altivec', `ms_struct' and `gcc_struct'. 25046 25047 For full documentation of the struct attributes please see the 25048documentation in *note i386 Variable Attributes::. 25049 25050 For documentation of `altivec' attribute please see the documentation 25051in *note PowerPC Type Attributes::. 25052 250536.36.7 SPU Variable Attributes 25054------------------------------ 25055 25056The SPU supports the `spu_vector' attribute for variables. For 25057documentation of this attribute please see the documentation in *note 25058SPU Type Attributes::. 25059 250606.36.8 Xstormy16 Variable Attributes 25061------------------------------------ 25062 25063One attribute is currently defined for xstormy16 configurations: 25064`below100'. 25065 25066`below100' 25067 If a variable has the `below100' attribute (`BELOW100' is allowed 25068 also), GCC places the variable in the first 0x100 bytes of memory 25069 and use special opcodes to access it. Such variables are placed 25070 in either the `.bss_below100' section or the `.data_below100' 25071 section. 25072 25073 25074 25075File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 25076 250776.37 Specifying Attributes of Types 25078=================================== 25079 25080The keyword `__attribute__' allows you to specify special attributes of 25081`struct' and `union' types when you define such types. This keyword is 25082followed by an attribute specification inside double parentheses. 25083Seven attributes are currently defined for types: `aligned', `packed', 25084`transparent_union', `unused', `deprecated', `visibility', and 25085`may_alias'. Other attributes are defined for functions (*note 25086Function Attributes::) and for variables (*note Variable Attributes::). 25087 25088 You may also specify any one of these attributes with `__' preceding 25089and following its keyword. This allows you to use these attributes in 25090header files without being concerned about a possible macro of the same 25091name. For example, you may use `__aligned__' instead of `aligned'. 25092 25093 You may specify type attributes in an enum, struct or union type 25094declaration or definition, or for other types in a `typedef' 25095declaration. 25096 25097 For an enum, struct or union type, you may specify attributes either 25098between the enum, struct or union tag and the name of the type, or just 25099past the closing curly brace of the _definition_. The former syntax is 25100preferred. 25101 25102 *Note Attribute Syntax::, for details of the exact syntax for using 25103attributes. 25104 25105`aligned (ALIGNMENT)' 25106 This attribute specifies a minimum alignment (in bytes) for 25107 variables of the specified type. For example, the declarations: 25108 25109 struct S { short f[3]; } __attribute__ ((aligned (8))); 25110 typedef int more_aligned_int __attribute__ ((aligned (8))); 25111 25112 force the compiler to ensure (as far as it can) that each variable 25113 whose type is `struct S' or `more_aligned_int' is allocated and 25114 aligned _at least_ on a 8-byte boundary. On a SPARC, having all 25115 variables of type `struct S' aligned to 8-byte boundaries allows 25116 the compiler to use the `ldd' and `std' (doubleword load and 25117 store) instructions when copying one variable of type `struct S' to 25118 another, thus improving run-time efficiency. 25119 25120 Note that the alignment of any given `struct' or `union' type is 25121 required by the ISO C standard to be at least a perfect multiple of 25122 the lowest common multiple of the alignments of all of the members 25123 of the `struct' or `union' in question. This means that you _can_ 25124 effectively adjust the alignment of a `struct' or `union' type by 25125 attaching an `aligned' attribute to any one of the members of such 25126 a type, but the notation illustrated in the example above is a 25127 more obvious, intuitive, and readable way to request the compiler 25128 to adjust the alignment of an entire `struct' or `union' type. 25129 25130 As in the preceding example, you can explicitly specify the 25131 alignment (in bytes) that you wish the compiler to use for a given 25132 `struct' or `union' type. Alternatively, you can leave out the 25133 alignment factor and just ask the compiler to align a type to the 25134 maximum useful alignment for the target machine you are compiling 25135 for. For example, you could write: 25136 25137 struct S { short f[3]; } __attribute__ ((aligned)); 25138 25139 Whenever you leave out the alignment factor in an `aligned' 25140 attribute specification, the compiler automatically sets the 25141 alignment for the type to the largest alignment that is ever used 25142 for any data type on the target machine you are compiling for. 25143 Doing this can often make copy operations more efficient, because 25144 the compiler can use whatever instructions copy the biggest chunks 25145 of memory when performing copies to or from the variables that 25146 have types that you have aligned this way. 25147 25148 In the example above, if the size of each `short' is 2 bytes, then 25149 the size of the entire `struct S' type is 6 bytes. The smallest 25150 power of two that is greater than or equal to that is 8, so the 25151 compiler sets the alignment for the entire `struct S' type to 8 25152 bytes. 25153 25154 Note that although you can ask the compiler to select a 25155 time-efficient alignment for a given type and then declare only 25156 individual stand-alone objects of that type, the compiler's 25157 ability to select a time-efficient alignment is primarily useful 25158 only when you plan to create arrays of variables having the 25159 relevant (efficiently aligned) type. If you declare or use arrays 25160 of variables of an efficiently-aligned type, then it is likely 25161 that your program also does pointer arithmetic (or subscripting, 25162 which amounts to the same thing) on pointers to the relevant type, 25163 and the code that the compiler generates for these pointer 25164 arithmetic operations is often more efficient for 25165 efficiently-aligned types than for other types. 25166 25167 The `aligned' attribute can only increase the alignment; but you 25168 can decrease it by specifying `packed' as well. See below. 25169 25170 Note that the effectiveness of `aligned' attributes may be limited 25171 by inherent limitations in your linker. On many systems, the 25172 linker is only able to arrange for variables to be aligned up to a 25173 certain maximum alignment. (For some linkers, the maximum 25174 supported alignment may be very very small.) If your linker is 25175 only able to align variables up to a maximum of 8-byte alignment, 25176 then specifying `aligned(16)' in an `__attribute__' still only 25177 provides you with 8-byte alignment. See your linker documentation 25178 for further information. 25179 25180`packed' 25181 This attribute, attached to `struct' or `union' type definition, 25182 specifies that each member (other than zero-width bit-fields) of 25183 the structure or union is placed to minimize the memory required. 25184 When attached to an `enum' definition, it indicates that the 25185 smallest integral type should be used. 25186 25187 Specifying this attribute for `struct' and `union' types is 25188 equivalent to specifying the `packed' attribute on each of the 25189 structure or union members. Specifying the `-fshort-enums' flag 25190 on the line is equivalent to specifying the `packed' attribute on 25191 all `enum' definitions. 25192 25193 In the following example `struct my_packed_struct''s members are 25194 packed closely together, but the internal layout of its `s' member 25195 is not packed--to do that, `struct my_unpacked_struct' needs to be 25196 packed too. 25197 25198 struct my_unpacked_struct 25199 { 25200 char c; 25201 int i; 25202 }; 25203 25204 struct __attribute__ ((__packed__)) my_packed_struct 25205 { 25206 char c; 25207 int i; 25208 struct my_unpacked_struct s; 25209 }; 25210 25211 You may only specify this attribute on the definition of an `enum', 25212 `struct' or `union', not on a `typedef' that does not also define 25213 the enumerated type, structure or union. 25214 25215`transparent_union' 25216 This attribute, attached to a `union' type definition, indicates 25217 that any function parameter having that union type causes calls to 25218 that function to be treated in a special way. 25219 25220 First, the argument corresponding to a transparent union type can 25221 be of any type in the union; no cast is required. Also, if the 25222 union contains a pointer type, the corresponding argument can be a 25223 null pointer constant or a void pointer expression; and if the 25224 union contains a void pointer type, the corresponding argument can 25225 be any pointer expression. If the union member type is a pointer, 25226 qualifiers like `const' on the referenced type must be respected, 25227 just as with normal pointer conversions. 25228 25229 Second, the argument is passed to the function using the calling 25230 conventions of the first member of the transparent union, not the 25231 calling conventions of the union itself. All members of the union 25232 must have the same machine representation; this is necessary for 25233 this argument passing to work properly. 25234 25235 Transparent unions are designed for library functions that have 25236 multiple interfaces for compatibility reasons. For example, 25237 suppose the `wait' function must accept either a value of type 25238 `int *' to comply with POSIX, or a value of type `union wait *' to 25239 comply with the 4.1BSD interface. If `wait''s parameter were 25240 `void *', `wait' would accept both kinds of arguments, but it 25241 would also accept any other pointer type and this would make 25242 argument type checking less useful. Instead, `<sys/wait.h>' might 25243 define the interface as follows: 25244 25245 typedef union __attribute__ ((__transparent_union__)) 25246 { 25247 int *__ip; 25248 union wait *__up; 25249 } wait_status_ptr_t; 25250 25251 pid_t wait (wait_status_ptr_t); 25252 25253 This interface allows either `int *' or `union wait *' arguments 25254 to be passed, using the `int *' calling convention. The program 25255 can call `wait' with arguments of either type: 25256 25257 int w1 () { int w; return wait (&w); } 25258 int w2 () { union wait w; return wait (&w); } 25259 25260 With this interface, `wait''s implementation might look like this: 25261 25262 pid_t wait (wait_status_ptr_t p) 25263 { 25264 return waitpid (-1, p.__ip, 0); 25265 } 25266 25267`unused' 25268 When attached to a type (including a `union' or a `struct'), this 25269 attribute means that variables of that type are meant to appear 25270 possibly unused. GCC does not produce a warning for any variables 25271 of that type, even if the variable appears to do nothing. This is 25272 often the case with lock or thread classes, which are usually 25273 defined and then not referenced, but contain constructors and 25274 destructors that have nontrivial bookkeeping functions. 25275 25276`deprecated' 25277`deprecated (MSG)' 25278 The `deprecated' attribute results in a warning if the type is 25279 used anywhere in the source file. This is useful when identifying 25280 types that are expected to be removed in a future version of a 25281 program. If possible, the warning also includes the location of 25282 the declaration of the deprecated type, to enable users to easily 25283 find further information about why the type is deprecated, or what 25284 they should do instead. Note that the warnings only occur for 25285 uses and then only if the type is being applied to an identifier 25286 that itself is not being declared as deprecated. 25287 25288 typedef int T1 __attribute__ ((deprecated)); 25289 T1 x; 25290 typedef T1 T2; 25291 T2 y; 25292 typedef T1 T3 __attribute__ ((deprecated)); 25293 T3 z __attribute__ ((deprecated)); 25294 25295 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 25296 warning is issued for line 4 because T2 is not explicitly 25297 deprecated. Line 5 has no warning because T3 is explicitly 25298 deprecated. Similarly for line 6. The optional MSG argument, 25299 which must be a string, is printed in the warning if present. 25300 25301 The `deprecated' attribute can also be used for functions and 25302 variables (*note Function Attributes::, *note Variable 25303 Attributes::.) 25304 25305`may_alias' 25306 Accesses through pointers to types with this attribute are not 25307 subject to type-based alias analysis, but are instead assumed to 25308 be able to alias any other type of objects. In the context of 25309 section 6.5 paragraph 7 of the C99 standard, an lvalue expression 25310 dereferencing such a pointer is treated like having a character 25311 type. See `-fstrict-aliasing' for more information on aliasing 25312 issues. This extension exists to support some vector APIs, in 25313 which pointers to one vector type are permitted to alias pointers 25314 to a different vector type. 25315 25316 Note that an object of a type with this attribute does not have any 25317 special semantics. 25318 25319 Example of use: 25320 25321 typedef short __attribute__((__may_alias__)) short_a; 25322 25323 int 25324 main (void) 25325 { 25326 int a = 0x12345678; 25327 short_a *b = (short_a *) &a; 25328 25329 b[1] = 0; 25330 25331 if (a == 0x12345678) 25332 abort(); 25333 25334 exit(0); 25335 } 25336 25337 If you replaced `short_a' with `short' in the variable 25338 declaration, the above program would abort when compiled with 25339 `-fstrict-aliasing', which is on by default at `-O2' or above in 25340 recent GCC versions. 25341 25342`visibility' 25343 In C++, attribute visibility (*note Function Attributes::) can 25344 also be applied to class, struct, union and enum types. Unlike 25345 other type attributes, the attribute must appear between the 25346 initial keyword and the name of the type; it cannot appear after 25347 the body of the type. 25348 25349 Note that the type visibility is applied to vague linkage entities 25350 associated with the class (vtable, typeinfo node, etc.). In 25351 particular, if a class is thrown as an exception in one shared 25352 object and caught in another, the class must have default 25353 visibility. Otherwise the two shared objects are unable to use 25354 the same typeinfo node and exception handling will break. 25355 25356 25357 To specify multiple attributes, separate them by commas within the 25358double parentheses: for example, `__attribute__ ((aligned (16), 25359packed))'. 25360 253616.37.1 ARM Type Attributes 25362-------------------------- 25363 25364On those ARM targets that support `dllimport' (such as Symbian OS), you 25365can use the `notshared' attribute to indicate that the virtual table 25366and other similar data for a class should not be exported from a DLL. 25367For example: 25368 25369 class __declspec(notshared) C { 25370 public: 25371 __declspec(dllimport) C(); 25372 virtual void f(); 25373 } 25374 25375 __declspec(dllexport) 25376 C::C() {} 25377 25378In this code, `C::C' is exported from the current DLL, but the virtual 25379table for `C' is not exported. (You can use `__attribute__' instead of 25380`__declspec' if you prefer, but most Symbian OS code uses `__declspec'.) 25381 253826.37.2 MeP Type Attributes 25383-------------------------- 25384 25385Many of the MeP variable attributes may be applied to types as well. 25386Specifically, the `based', `tiny', `near', and `far' attributes may be 25387applied to either. The `io' and `cb' attributes may not be applied to 25388types. 25389 253906.37.3 i386 Type Attributes 25391--------------------------- 25392 25393Two attributes are currently defined for i386 configurations: 25394`ms_struct' and `gcc_struct'. 25395 25396`ms_struct' 25397`gcc_struct' 25398 If `packed' is used on a structure, or if bit-fields are used it 25399 may be that the Microsoft ABI packs them differently than GCC 25400 normally packs them. Particularly when moving packed data between 25401 functions compiled with GCC and the native Microsoft compiler 25402 (either via function call or as data in a file), it may be 25403 necessary to access either format. 25404 25405 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 25406 Windows X86 compilers to match the native Microsoft compiler. 25407 254086.37.4 PowerPC Type Attributes 25409------------------------------ 25410 25411Three attributes currently are defined for PowerPC configurations: 25412`altivec', `ms_struct' and `gcc_struct'. 25413 25414 For full documentation of the `ms_struct' and `gcc_struct' attributes 25415please see the documentation in *note i386 Type Attributes::. 25416 25417 The `altivec' attribute allows one to declare AltiVec vector data 25418types supported by the AltiVec Programming Interface Manual. The 25419attribute requires an argument to specify one of three vector types: 25420`vector__', `pixel__' (always followed by unsigned short), and `bool__' 25421(always followed by unsigned). 25422 25423 __attribute__((altivec(vector__))) 25424 __attribute__((altivec(pixel__))) unsigned short 25425 __attribute__((altivec(bool__))) unsigned 25426 25427 These attributes mainly are intended to support the `__vector', 25428`__pixel', and `__bool' AltiVec keywords. 25429 254306.37.5 SPU Type Attributes 25431-------------------------- 25432 25433The SPU supports the `spu_vector' attribute for types. This attribute 25434allows one to declare vector data types supported by the 25435Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 25436to support the `__vector' keyword. 25437 25438 25439File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 25440 254416.38 Inquiring on Alignment of Types or Variables 25442================================================= 25443 25444The keyword `__alignof__' allows you to inquire about how an object is 25445aligned, or the minimum alignment usually required by a type. Its 25446syntax is just like `sizeof'. 25447 25448 For example, if the target machine requires a `double' value to be 25449aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 25450is true on many RISC machines. On more traditional machine designs, 25451`__alignof__ (double)' is 4 or even 2. 25452 25453 Some machines never actually require alignment; they allow reference 25454to any data type even at an odd address. For these machines, 25455`__alignof__' reports the smallest alignment that GCC gives the data 25456type, usually as mandated by the target ABI. 25457 25458 If the operand of `__alignof__' is an lvalue rather than a type, its 25459value is the required alignment for its type, taking into account any 25460minimum alignment specified with GCC's `__attribute__' extension (*note 25461Variable Attributes::). For example, after this declaration: 25462 25463 struct foo { int x; char y; } foo1; 25464 25465the value of `__alignof__ (foo1.y)' is 1, even though its actual 25466alignment is probably 2 or 4, the same as `__alignof__ (int)'. 25467 25468 It is an error to ask for the alignment of an incomplete type. 25469 25470 25471File: gcc.info, Node: Inline, Next: Volatiles, Prev: Alignment, Up: C Extensions 25472 254736.39 An Inline Function is As Fast As a Macro 25474============================================= 25475 25476By declaring a function inline, you can direct GCC to make calls to 25477that function faster. One way GCC can achieve this is to integrate 25478that function's code into the code for its callers. This makes 25479execution faster by eliminating the function-call overhead; in 25480addition, if any of the actual argument values are constant, their 25481known values may permit simplifications at compile time so that not all 25482of the inline function's code needs to be included. The effect on code 25483size is less predictable; object code may be larger or smaller with 25484function inlining, depending on the particular case. You can also 25485direct GCC to try to integrate all "simple enough" functions into their 25486callers with the option `-finline-functions'. 25487 25488 GCC implements three different semantics of declaring a function 25489inline. One is available with `-std=gnu89' or `-fgnu89-inline' or when 25490`gnu_inline' attribute is present on all inline declarations, another 25491when `-std=c99', `-std=c11', `-std=gnu99' or `-std=gnu11' (without 25492`-fgnu89-inline'), and the third is used when compiling C++. 25493 25494 To declare a function inline, use the `inline' keyword in its 25495declaration, like this: 25496 25497 static inline int 25498 inc (int *a) 25499 { 25500 return (*a)++; 25501 } 25502 25503 If you are writing a header file to be included in ISO C90 programs, 25504write `__inline__' instead of `inline'. *Note Alternate Keywords::. 25505 25506 The three types of inlining behave similarly in two important cases: 25507when the `inline' keyword is used on a `static' function, like the 25508example above, and when a function is first declared without using the 25509`inline' keyword and then is defined with `inline', like this: 25510 25511 extern int inc (int *a); 25512 inline int 25513 inc (int *a) 25514 { 25515 return (*a)++; 25516 } 25517 25518 In both of these common cases, the program behaves the same as if you 25519had not used the `inline' keyword, except for its speed. 25520 25521 When a function is both inline and `static', if all calls to the 25522function are integrated into the caller, and the function's address is 25523never used, then the function's own assembler code is never referenced. 25524In this case, GCC does not actually output assembler code for the 25525function, unless you specify the option `-fkeep-inline-functions'. 25526Some calls cannot be integrated for various reasons (in particular, 25527calls that precede the function's definition cannot be integrated, and 25528neither can recursive calls within the definition). If there is a 25529nonintegrated call, then the function is compiled to assembler code as 25530usual. The function must also be compiled as usual if the program 25531refers to its address, because that can't be inlined. 25532 25533 Note that certain usages in a function definition can make it 25534unsuitable for inline substitution. Among these usages are: variadic 25535functions, use of `alloca', use of variable-length data types (*note 25536Variable Length::), use of computed goto (*note Labels as Values::), 25537use of nonlocal goto, and nested functions (*note Nested Functions::). 25538Using `-Winline' warns when a function marked `inline' could not be 25539substituted, and gives the reason for the failure. 25540 25541 As required by ISO C++, GCC considers member functions defined within 25542the body of a class to be marked inline even if they are not explicitly 25543declared with the `inline' keyword. You can override this with 25544`-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 25545Dialect Options. 25546 25547 GCC does not inline any functions when not optimizing unless you 25548specify the `always_inline' attribute for the function, like this: 25549 25550 /* Prototype. */ 25551 inline void foo (const char) __attribute__((always_inline)); 25552 25553 The remainder of this section is specific to GNU C90 inlining. 25554 25555 When an inline function is not `static', then the compiler must assume 25556that there may be calls from other source files; since a global symbol 25557can be defined only once in any program, the function must not be 25558defined in the other source files, so the calls therein cannot be 25559integrated. Therefore, a non-`static' inline function is always 25560compiled on its own in the usual fashion. 25561 25562 If you specify both `inline' and `extern' in the function definition, 25563then the definition is used only for inlining. In no case is the 25564function compiled on its own, not even if you refer to its address 25565explicitly. Such an address becomes an external reference, as if you 25566had only declared the function, and had not defined it. 25567 25568 This combination of `inline' and `extern' has almost the effect of a 25569macro. The way to use it is to put a function definition in a header 25570file with these keywords, and put another copy of the definition 25571(lacking `inline' and `extern') in a library file. The definition in 25572the header file causes most calls to the function to be inlined. If 25573any uses of the function remain, they refer to the single copy in the 25574library. 25575 25576 25577File: gcc.info, Node: Volatiles, Next: Extended Asm, Prev: Inline, Up: C Extensions 25578 255796.40 When is a Volatile Object Accessed? 25580======================================== 25581 25582C has the concept of volatile objects. These are normally accessed by 25583pointers and used for accessing hardware or inter-thread communication. 25584The standard encourages compilers to refrain from optimizations 25585concerning accesses to volatile objects, but leaves it implementation 25586defined as to what constitutes a volatile access. The minimum 25587requirement is that at a sequence point all previous accesses to 25588volatile objects have stabilized and no subsequent accesses have 25589occurred. Thus an implementation is free to reorder and combine 25590volatile accesses that occur between sequence points, but cannot do so 25591for accesses across a sequence point. The use of volatile does not 25592allow you to violate the restriction on updating objects multiple times 25593between two sequence points. 25594 25595 Accesses to non-volatile objects are not ordered with respect to 25596volatile accesses. You cannot use a volatile object as a memory 25597barrier to order a sequence of writes to non-volatile memory. For 25598instance: 25599 25600 int *ptr = SOMETHING; 25601 volatile int vobj; 25602 *ptr = SOMETHING; 25603 vobj = 1; 25604 25605Unless *PTR and VOBJ can be aliased, it is not guaranteed that the 25606write to *PTR occurs by the time the update of VOBJ happens. If you 25607need this guarantee, you must use a stronger memory barrier such as: 25608 25609 int *ptr = SOMETHING; 25610 volatile int vobj; 25611 *ptr = SOMETHING; 25612 asm volatile ("" : : : "memory"); 25613 vobj = 1; 25614 25615 A scalar volatile object is read when it is accessed in a void context: 25616 25617 volatile int *src = SOMEVALUE; 25618 *src; 25619 25620 Such expressions are rvalues, and GCC implements this as a read of the 25621volatile object being pointed to. 25622 25623 Assignments are also expressions and have an rvalue. However when 25624assigning to a scalar volatile, the volatile object is not reread, 25625regardless of whether the assignment expression's rvalue is used or 25626not. If the assignment's rvalue is used, the value is that assigned to 25627the volatile object. For instance, there is no read of VOBJ in all the 25628following cases: 25629 25630 int obj; 25631 volatile int vobj; 25632 vobj = SOMETHING; 25633 obj = vobj = SOMETHING; 25634 obj ? vobj = ONETHING : vobj = ANOTHERTHING; 25635 obj = (SOMETHING, vobj = ANOTHERTHING); 25636 25637 If you need to read the volatile object after an assignment has 25638occurred, you must use a separate expression with an intervening 25639sequence point. 25640 25641 As bit-fields are not individually addressable, volatile bit-fields may 25642be implicitly read when written to, or when adjacent bit-fields are 25643accessed. Bit-field operations may be optimized such that adjacent 25644bit-fields are only partially accessed, if they straddle a storage unit 25645boundary. For these reasons it is unwise to use volatile bit-fields to 25646access hardware. 25647 25648 25649File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Volatiles, Up: C Extensions 25650 256516.41 Assembler Instructions with C Expression Operands 25652====================================================== 25653 25654In an assembler instruction using `asm', you can specify the operands 25655of the instruction using C expressions. This means you need not guess 25656which registers or memory locations contain the data you want to use. 25657 25658 You must specify an assembler instruction template much like what 25659appears in a machine description, plus an operand constraint string for 25660each operand. 25661 25662 For example, here is how to use the 68881's `fsinx' instruction: 25663 25664 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 25665 25666Here `angle' is the C expression for the input operand while `result' 25667is that of the output operand. Each has `"f"' as its operand 25668constraint, saying that a floating-point register is required. The `=' 25669in `=f' indicates that the operand is an output; all output operands' 25670constraints must use `='. The constraints use the same language used 25671in the machine description (*note Constraints::). 25672 25673 Each operand is described by an operand-constraint string followed by 25674the C expression in parentheses. A colon separates the assembler 25675template from the first output operand and another separates the last 25676output operand from the first input, if any. Commas separate the 25677operands within each group. The total number of operands is currently 25678limited to 30; this limitation may be lifted in some future version of 25679GCC. 25680 25681 If there are no output operands but there are input operands, you must 25682place two consecutive colons surrounding the place where the output 25683operands would go. 25684 25685 As of GCC version 3.1, it is also possible to specify input and output 25686operands using symbolic names which can be referenced within the 25687assembler code. These names are specified inside square brackets 25688preceding the constraint string, and can be referenced inside the 25689assembler code using `%[NAME]' instead of a percentage sign followed by 25690the operand number. Using named operands the above example could look 25691like: 25692 25693 asm ("fsinx %[angle],%[output]" 25694 : [output] "=f" (result) 25695 : [angle] "f" (angle)); 25696 25697Note that the symbolic operand names have no relation whatsoever to 25698other C identifiers. You may use any name you like, even those of 25699existing C symbols, but you must ensure that no two operands within the 25700same assembler construct use the same symbolic name. 25701 25702 Output operand expressions must be lvalues; the compiler can check 25703this. The input operands need not be lvalues. The compiler cannot 25704check whether the operands have data types that are reasonable for the 25705instruction being executed. It does not parse the assembler instruction 25706template and does not know what it means or even whether it is valid 25707assembler input. The extended `asm' feature is most often used for 25708machine instructions the compiler itself does not know exist. If the 25709output expression cannot be directly addressed (for example, it is a 25710bit-field), your constraint must allow a register. In that case, GCC 25711uses the register as the output of the `asm', and then stores that 25712register into the output. 25713 25714 The ordinary output operands must be write-only; GCC assumes that the 25715values in these operands before the instruction are dead and need not 25716be generated. Extended asm supports input-output or read-write 25717operands. Use the constraint character `+' to indicate such an operand 25718and list it with the output operands. 25719 25720 You may, as an alternative, logically split its function into two 25721separate operands, one input operand and one write-only output operand. 25722The connection between them is expressed by constraints that say they 25723need to be in the same location when the instruction executes. You can 25724use the same C expression for both operands, or different expressions. 25725For example, here we write the (fictitious) `combine' instruction with 25726`bar' as its read-only source operand and `foo' as its read-write 25727destination: 25728 25729 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 25730 25731The constraint `"0"' for operand 1 says that it must occupy the same 25732location as operand 0. A number in constraint is allowed only in an 25733input operand and it must refer to an output operand. 25734 25735 Only a number in the constraint can guarantee that one operand is in 25736the same place as another. The mere fact that `foo' is the value of 25737both operands is not enough to guarantee that they are in the same 25738place in the generated assembler code. The following does not work 25739reliably: 25740 25741 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 25742 25743 Various optimizations or reloading could cause operands 0 and 1 to be 25744in different registers; GCC knows no reason not to do so. For example, 25745the compiler might find a copy of the value of `foo' in one register and 25746use it for operand 1, but generate the output operand 0 in a different 25747register (copying it afterward to `foo''s own address). Of course, 25748since the register for operand 1 is not even mentioned in the assembler 25749code, the result will not work, but GCC can't tell that. 25750 25751 As of GCC version 3.1, one may write `[NAME]' instead of the operand 25752number for a matching constraint. For example: 25753 25754 asm ("cmoveq %1,%2,%[result]" 25755 : [result] "=r"(result) 25756 : "r" (test), "r"(new), "[result]"(old)); 25757 25758 Sometimes you need to make an `asm' operand be a specific register, 25759but there's no matching constraint letter for that register _by 25760itself_. To force the operand into that register, use a local variable 25761for the operand and specify the register in the variable declaration. 25762*Note Explicit Reg Vars::. Then for the `asm' operand, use any 25763register constraint letter that matches the register: 25764 25765 register int *p1 asm ("r0") = ...; 25766 register int *p2 asm ("r1") = ...; 25767 register int *result asm ("r0"); 25768 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 25769 25770 In the above example, beware that a register that is call-clobbered by 25771the target ABI will be overwritten by any function call in the 25772assignment, including library calls for arithmetic operators. Also a 25773register may be clobbered when generating some operations, like 25774variable shift, memory copy or memory move on x86. Assuming it is a 25775call-clobbered register, this may happen to `r0' above by the 25776assignment to `p2'. If you have to use such a register, use temporary 25777variables for expressions between the register assignment and use: 25778 25779 int t1 = ...; 25780 register int *p1 asm ("r0") = ...; 25781 register int *p2 asm ("r1") = t1; 25782 register int *result asm ("r0"); 25783 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 25784 25785 Some instructions clobber specific hard registers. To describe this, 25786write a third colon after the input operands, followed by the names of 25787the clobbered hard registers (given as strings). Here is a realistic 25788example for the VAX: 25789 25790 asm volatile ("movc3 %0,%1,%2" 25791 : /* no outputs */ 25792 : "g" (from), "g" (to), "g" (count) 25793 : "r0", "r1", "r2", "r3", "r4", "r5"); 25794 25795 You may not write a clobber description in a way that overlaps with an 25796input or output operand. For example, you may not have an operand 25797describing a register class with one member if you mention that register 25798in the clobber list. Variables declared to live in specific registers 25799(*note Explicit Reg Vars::), and used as asm input or output operands 25800must have no part mentioned in the clobber description. There is no 25801way for you to specify that an input operand is modified without also 25802specifying it as an output operand. Note that if all the output 25803operands you specify are for this purpose (and hence unused), you then 25804also need to specify `volatile' for the `asm' construct, as described 25805below, to prevent GCC from deleting the `asm' statement as unused. 25806 25807 If you refer to a particular hardware register from the assembler code, 25808you probably have to list the register after the third colon to tell 25809the compiler the register's value is modified. In some assemblers, the 25810register names begin with `%'; to produce one `%' in the assembler 25811code, you must write `%%' in the input. 25812 25813 If your assembler instruction can alter the condition code register, 25814add `cc' to the list of clobbered registers. GCC on some machines 25815represents the condition codes as a specific hardware register; `cc' 25816serves to name this register. On other machines, the condition code is 25817handled differently, and specifying `cc' has no effect. But it is 25818valid no matter what the machine. 25819 25820 If your assembler instructions access memory in an unpredictable 25821fashion, add `memory' to the list of clobbered registers. This causes 25822GCC to not keep memory values cached in registers across the assembler 25823instruction and not optimize stores or loads to that memory. You also 25824should add the `volatile' keyword if the memory affected is not listed 25825in the inputs or outputs of the `asm', as the `memory' clobber does not 25826count as a side-effect of the `asm'. If you know how large the 25827accessed memory is, you can add it as input or output but if this is 25828not known, you should add `memory'. As an example, if you access ten 25829bytes of a string, you can use a memory input like: 25830 25831 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 25832 25833 Note that in the following example the memory input is necessary, 25834otherwise GCC might optimize the store to `x' away: 25835 int foo () 25836 { 25837 int x = 42; 25838 int *y = &x; 25839 int result; 25840 asm ("magic stuff accessing an 'int' pointed to by '%1'" 25841 : "=&d" (r) : "a" (y), "m" (*y)); 25842 return result; 25843 } 25844 25845 You can put multiple assembler instructions together in a single `asm' 25846template, separated by the characters normally used in assembly code 25847for the system. A combination that works in most places is a newline 25848to break the line, plus a tab character to move to the instruction field 25849(written as `\n\t'). Sometimes semicolons can be used, if the 25850assembler allows semicolons as a line-breaking character. Note that 25851some assembler dialects use semicolons to start a comment. The input 25852operands are guaranteed not to use any of the clobbered registers, and 25853neither do the output operands' addresses, so you can read and write 25854the clobbered registers as many times as you like. Here is an example 25855of multiple instructions in a template; it assumes the subroutine 25856`_foo' accepts arguments in registers 9 and 10: 25857 25858 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 25859 : /* no outputs */ 25860 : "g" (from), "g" (to) 25861 : "r9", "r10"); 25862 25863 Unless an output operand has the `&' constraint modifier, GCC may 25864allocate it in the same register as an unrelated input operand, on the 25865assumption the inputs are consumed before the outputs are produced. 25866This assumption may be false if the assembler code actually consists of 25867more than one instruction. In such a case, use `&' for each output 25868operand that may not overlap an input. *Note Modifiers::. 25869 25870 If you want to test the condition code produced by an assembler 25871instruction, you must include a branch and a label in the `asm' 25872construct, as follows: 25873 25874 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 25875 : "g" (result) 25876 : "g" (input)); 25877 25878This assumes your assembler supports local labels, as the GNU assembler 25879and most Unix assemblers do. 25880 25881 Speaking of labels, jumps from one `asm' to another are not supported. 25882The compiler's optimizers do not know about these jumps, and therefore 25883they cannot take account of them when deciding how to optimize. *Note 25884Extended asm with goto::. 25885 25886 Usually the most convenient way to use these `asm' instructions is to 25887encapsulate them in macros that look like functions. For example, 25888 25889 #define sin(x) \ 25890 ({ double __value, __arg = (x); \ 25891 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 25892 __value; }) 25893 25894Here the variable `__arg' is used to make sure that the instruction 25895operates on a proper `double' value, and to accept only those arguments 25896`x' that can convert automatically to a `double'. 25897 25898 Another way to make sure the instruction operates on the correct data 25899type is to use a cast in the `asm'. This is different from using a 25900variable `__arg' in that it converts more different types. For 25901example, if the desired type is `int', casting the argument to `int' 25902accepts a pointer with no complaint, while assigning the argument to an 25903`int' variable named `__arg' warns about using a pointer unless the 25904caller explicitly casts it. 25905 25906 If an `asm' has output operands, GCC assumes for optimization purposes 25907the instruction has no side effects except to change the output 25908operands. This does not mean instructions with a side effect cannot be 25909used, but you must be careful, because the compiler may eliminate them 25910if the output operands aren't used, or move them out of loops, or 25911replace two with one if they constitute a common subexpression. Also, 25912if your instruction does have a side effect on a variable that otherwise 25913appears not to change, the old value of the variable may be reused later 25914if it happens to be found in a register. 25915 25916 You can prevent an `asm' instruction from being deleted by writing the 25917keyword `volatile' after the `asm'. For example: 25918 25919 #define get_and_set_priority(new) \ 25920 ({ int __old; \ 25921 asm volatile ("get_and_set_priority %0, %1" \ 25922 : "=g" (__old) : "g" (new)); \ 25923 __old; }) 25924 25925The `volatile' keyword indicates that the instruction has important 25926side-effects. GCC does not delete a volatile `asm' if it is reachable. 25927(The instruction can still be deleted if GCC can prove that control 25928flow never reaches the location of the instruction.) Note that even a 25929volatile `asm' instruction can be moved relative to other code, 25930including across jump instructions. For example, on many targets there 25931is a system register that can be set to control the rounding mode of 25932floating-point operations. You might try setting it with a volatile 25933`asm', like this PowerPC example: 25934 25935 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 25936 sum = x + y; 25937 25938This does not work reliably, as the compiler may move the addition back 25939before the volatile `asm'. To make it work you need to add an 25940artificial dependency to the `asm' referencing a variable in the code 25941you don't want moved, for example: 25942 25943 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 25944 sum = x + y; 25945 25946 Similarly, you can't expect a sequence of volatile `asm' instructions 25947to remain perfectly consecutive. If you want consecutive output, use a 25948single `asm'. Also, GCC performs some optimizations across a volatile 25949`asm' instruction; GCC does not "forget everything" when it encounters 25950a volatile `asm' instruction the way some other compilers do. 25951 25952 An `asm' instruction without any output operands is treated 25953identically to a volatile `asm' instruction. 25954 25955 It is a natural idea to look for a way to give access to the condition 25956code left by the assembler instruction. However, when we attempted to 25957implement this, we found no way to make it work reliably. The problem 25958is that output operands might need reloading, which result in 25959additional following "store" instructions. On most machines, these 25960instructions alter the condition code before there is time to test it. 25961This problem doesn't arise for ordinary "test" and "compare" 25962instructions because they don't have any output operands. 25963 25964 For reasons similar to those described above, it is not possible to 25965give an assembler instruction access to the condition code left by 25966previous instructions. 25967 25968 As of GCC version 4.5, `asm goto' may be used to have the assembly 25969jump to one or more C labels. In this form, a fifth section after the 25970clobber list contains a list of all C labels to which the assembly may 25971jump. Each label operand is implicitly self-named. The `asm' is also 25972assumed to fall through to the next statement. 25973 25974 This form of `asm' is restricted to not have outputs. This is due to 25975a internal restriction in the compiler that control transfer 25976instructions cannot have outputs. This restriction on `asm goto' may 25977be lifted in some future version of the compiler. In the meantime, 25978`asm goto' may include a memory clobber, and so leave outputs in memory. 25979 25980 int frob(int x) 25981 { 25982 int y; 25983 asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5" 25984 : : "r"(x), "r"(&y) : "r5", "memory" : error); 25985 return y; 25986 error: 25987 return -1; 25988 } 25989 25990In this (inefficient) example, the `frob' instruction sets the carry 25991bit to indicate an error. The `jc' instruction detects this and 25992branches to the `error' label. Finally, the output of the `frob' 25993instruction (`%r5') is stored into the memory for variable `y', which 25994is later read by the `return' statement. 25995 25996 void doit(void) 25997 { 25998 int i = 0; 25999 asm goto ("mfsr %%r1, 123; jmp %%r1;" 26000 ".pushsection doit_table;" 26001 ".long %l0, %l1, %l2, %l3;" 26002 ".popsection" 26003 : : : "r1" : label1, label2, label3, label4); 26004 __builtin_unreachable (); 26005 26006 label1: 26007 f1(); 26008 return; 26009 label2: 26010 f2(); 26011 return; 26012 label3: 26013 i = 1; 26014 label4: 26015 f3(i); 26016 } 26017 26018In this (also inefficient) example, the `mfsr' instruction reads an 26019address from some out-of-band machine register, and the following `jmp' 26020instruction branches to that address. The address read by the `mfsr' 26021instruction is assumed to have been previously set via some 26022application-specific mechanism to be one of the four values stored in 26023the `doit_table' section. Finally, the `asm' is followed by a call to 26024`__builtin_unreachable' to indicate that the `asm' does not in fact 26025fall through. 26026 26027 #define TRACE1(NUM) \ 26028 do { \ 26029 asm goto ("0: nop;" \ 26030 ".pushsection trace_table;" \ 26031 ".long 0b, %l0;" \ 26032 ".popsection" \ 26033 : : : : trace#NUM); \ 26034 if (0) { trace#NUM: trace(); } \ 26035 } while (0) 26036 #define TRACE TRACE1(__COUNTER__) 26037 26038In this example (which in fact inspired the `asm goto' feature) we want 26039on rare occasions to call the `trace' function; on other occasions we'd 26040like to keep the overhead to the absolute minimum. The normal code 26041path consists of a single `nop' instruction. However, we record the 26042address of this `nop' together with the address of a label that calls 26043the `trace' function. This allows the `nop' instruction to be patched 26044at run time to be an unconditional branch to the stored label. It is 26045assumed that an optimizing compiler moves the labeled block out of 26046line, to optimize the fall through path from the `asm'. 26047 26048 If you are writing a header file that should be includable in ISO C 26049programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 26050 260516.41.1 Size of an `asm' 26052----------------------- 26053 26054Some targets require that GCC track the size of each instruction used in 26055order to generate correct code. Because the final length of an `asm' 26056is only known by the assembler, GCC must make an estimate as to how big 26057it will be. The estimate is formed by counting the number of 26058statements in the pattern of the `asm' and multiplying that by the 26059length of the longest instruction on that processor. Statements in the 26060`asm' are identified by newline characters and whatever statement 26061separator characters are supported by the assembler; on most processors 26062this is the `;' character. 26063 26064 Normally, GCC's estimate is perfectly adequate to ensure that correct 26065code is generated, but it is possible to confuse the compiler if you use 26066pseudo instructions or assembler macros that expand into multiple real 26067instructions or if you use assembler directives that expand to more 26068space in the object file than is needed for a single instruction. If 26069this happens then the assembler produces a diagnostic saying that a 26070label is unreachable. 26071 260726.41.2 i386 floating-point asm operands 26073--------------------------------------- 26074 26075On i386 targets, there are several rules on the usage of stack-like 26076registers in the operands of an `asm'. These rules apply only to the 26077operands that are stack-like registers: 26078 26079 1. Given a set of input registers that die in an `asm', it is 26080 necessary to know which are implicitly popped by the `asm', and 26081 which must be explicitly popped by GCC. 26082 26083 An input register that is implicitly popped by the `asm' must be 26084 explicitly clobbered, unless it is constrained to match an output 26085 operand. 26086 26087 2. For any input register that is implicitly popped by an `asm', it is 26088 necessary to know how to adjust the stack to compensate for the 26089 pop. If any non-popped input is closer to the top of the 26090 reg-stack than the implicitly popped register, it would not be 26091 possible to know what the stack looked like--it's not clear how 26092 the rest of the stack "slides up". 26093 26094 All implicitly popped input registers must be closer to the top of 26095 the reg-stack than any input that is not implicitly popped. 26096 26097 It is possible that if an input dies in an `asm', the compiler 26098 might use the input register for an output reload. Consider this 26099 example: 26100 26101 asm ("foo" : "=t" (a) : "f" (b)); 26102 26103 This code says that input `b' is not popped by the `asm', and that 26104 the `asm' pushes a result onto the reg-stack, i.e., the stack is 26105 one deeper after the `asm' than it was before. But, it is 26106 possible that reload may think that it can use the same register 26107 for both the input and the output. 26108 26109 To prevent this from happening, if any input operand uses the `f' 26110 constraint, all output register constraints must use the `&' 26111 early-clobber modifier. 26112 26113 The example above would be correctly written as: 26114 26115 asm ("foo" : "=&t" (a) : "f" (b)); 26116 26117 3. Some operands need to be in particular places on the stack. All 26118 output operands fall in this category--GCC has no other way to 26119 know which registers the outputs appear in unless you indicate 26120 this in the constraints. 26121 26122 Output operands must specifically indicate which register an output 26123 appears in after an `asm'. `=f' is not allowed: the operand 26124 constraints must select a class with a single register. 26125 26126 4. Output operands may not be "inserted" between existing stack 26127 registers. Since no 387 opcode uses a read/write operand, all 26128 output operands are dead before the `asm', and are pushed by the 26129 `asm'. It makes no sense to push anywhere but the top of the 26130 reg-stack. 26131 26132 Output operands must start at the top of the reg-stack: output 26133 operands may not "skip" a register. 26134 26135 5. Some `asm' statements may need extra stack space for internal 26136 calculations. This can be guaranteed by clobbering stack registers 26137 unrelated to the inputs and outputs. 26138 26139 26140 Here are a couple of reasonable `asm's to want to write. This `asm' 26141takes one input, which is internally popped, and produces two outputs. 26142 26143 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 26144 26145This `asm' takes two inputs, which are popped by the `fyl2xp1' opcode, 26146and replaces them with one output. The `st(1)' clobber is necessary 26147for the compiler to know that `fyl2xp1' pops both inputs. 26148 26149 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 26150 26151 26152File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 26153 261546.42 Constraints for `asm' Operands 26155=================================== 26156 26157Here are specific details on what constraint letters you can use with 26158`asm' operands. Constraints can say whether an operand may be in a 26159register, and which kinds of register; whether the operand can be a 26160memory reference, and which kinds of address; whether the operand may 26161be an immediate constant, and which possible values it may have. 26162Constraints can also require two operands to match. Side-effects 26163aren't allowed in operands of inline `asm', unless `<' or `>' 26164constraints are used, because there is no guarantee that the 26165side-effects will happen exactly once in an instruction that can update 26166the addressing register. 26167 26168* Menu: 26169 26170* Simple Constraints:: Basic use of constraints. 26171* Multi-Alternative:: When an insn has two alternative constraint-patterns. 26172* Modifiers:: More precise control over effects of constraints. 26173* Machine Constraints:: Special constraints for some particular machines. 26174 26175 26176File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 26177 261786.42.1 Simple Constraints 26179------------------------- 26180 26181The simplest kind of constraint is a string full of letters, each of 26182which describes one kind of operand that is permitted. Here are the 26183letters that are allowed: 26184 26185whitespace 26186 Whitespace characters are ignored and can be inserted at any 26187 position except the first. This enables each alternative for 26188 different operands to be visually aligned in the machine 26189 description even if they have different number of constraints and 26190 modifiers. 26191 26192`m' 26193 A memory operand is allowed, with any kind of address that the 26194 machine supports in general. Note that the letter used for the 26195 general memory constraint can be re-defined by a back end using 26196 the `TARGET_MEM_CONSTRAINT' macro. 26197 26198`o' 26199 A memory operand is allowed, but only if the address is 26200 "offsettable". This means that adding a small integer (actually, 26201 the width in bytes of the operand, as determined by its machine 26202 mode) may be added to the address and the result is also a valid 26203 memory address. 26204 26205 For example, an address which is constant is offsettable; so is an 26206 address that is the sum of a register and a constant (as long as a 26207 slightly larger constant is also within the range of 26208 address-offsets supported by the machine); but an autoincrement or 26209 autodecrement address is not offsettable. More complicated 26210 indirect/indexed addresses may or may not be offsettable depending 26211 on the other addressing modes that the machine supports. 26212 26213 Note that in an output operand which can be matched by another 26214 operand, the constraint letter `o' is valid only when accompanied 26215 by both `<' (if the target machine has predecrement addressing) 26216 and `>' (if the target machine has preincrement addressing). 26217 26218`V' 26219 A memory operand that is not offsettable. In other words, 26220 anything that would fit the `m' constraint but not the `o' 26221 constraint. 26222 26223`<' 26224 A memory operand with autodecrement addressing (either 26225 predecrement or postdecrement) is allowed. In inline `asm' this 26226 constraint is only allowed if the operand is used exactly once in 26227 an instruction that can handle the side-effects. Not using an 26228 operand with `<' in constraint string in the inline `asm' pattern 26229 at all or using it in multiple instructions isn't valid, because 26230 the side-effects wouldn't be performed or would be performed more 26231 than once. Furthermore, on some targets the operand with `<' in 26232 constraint string must be accompanied by special instruction 26233 suffixes like `%U0' instruction suffix on PowerPC or `%P0' on 26234 IA-64. 26235 26236`>' 26237 A memory operand with autoincrement addressing (either 26238 preincrement or postincrement) is allowed. In inline `asm' the 26239 same restrictions as for `<' apply. 26240 26241`r' 26242 A register operand is allowed provided that it is in a general 26243 register. 26244 26245`i' 26246 An immediate integer operand (one with constant value) is allowed. 26247 This includes symbolic constants whose values will be known only at 26248 assembly time or later. 26249 26250`n' 26251 An immediate integer operand with a known numeric value is allowed. 26252 Many systems cannot support assembly-time constants for operands 26253 less than a word wide. Constraints for these operands should use 26254 `n' rather than `i'. 26255 26256`I', `J', `K', ... `P' 26257 Other letters in the range `I' through `P' may be defined in a 26258 machine-dependent fashion to permit immediate integer operands with 26259 explicit integer values in specified ranges. For example, on the 26260 68000, `I' is defined to stand for the range of values 1 to 8. 26261 This is the range permitted as a shift count in the shift 26262 instructions. 26263 26264`E' 26265 An immediate floating operand (expression code `const_double') is 26266 allowed, but only if the target floating point format is the same 26267 as that of the host machine (on which the compiler is running). 26268 26269`F' 26270 An immediate floating operand (expression code `const_double' or 26271 `const_vector') is allowed. 26272 26273`G', `H' 26274 `G' and `H' may be defined in a machine-dependent fashion to 26275 permit immediate floating operands in particular ranges of values. 26276 26277`s' 26278 An immediate integer operand whose value is not an explicit 26279 integer is allowed. 26280 26281 This might appear strange; if an insn allows a constant operand 26282 with a value not known at compile time, it certainly must allow 26283 any known value. So why use `s' instead of `i'? Sometimes it 26284 allows better code to be generated. 26285 26286 For example, on the 68000 in a fullword instruction it is possible 26287 to use an immediate operand; but if the immediate value is between 26288 -128 and 127, better code results from loading the value into a 26289 register and using the register. This is because the load into 26290 the register can be done with a `moveq' instruction. We arrange 26291 for this to happen by defining the letter `K' to mean "any integer 26292 outside the range -128 to 127", and then specifying `Ks' in the 26293 operand constraints. 26294 26295`g' 26296 Any register, memory or immediate integer operand is allowed, 26297 except for registers that are not general registers. 26298 26299`X' 26300 Any operand whatsoever is allowed. 26301 26302`0', `1', `2', ... `9' 26303 An operand that matches the specified operand number is allowed. 26304 If a digit is used together with letters within the same 26305 alternative, the digit should come last. 26306 26307 This number is allowed to be more than a single digit. If multiple 26308 digits are encountered consecutively, they are interpreted as a 26309 single decimal integer. There is scant chance for ambiguity, 26310 since to-date it has never been desirable that `10' be interpreted 26311 as matching either operand 1 _or_ operand 0. Should this be 26312 desired, one can use multiple alternatives instead. 26313 26314 This is called a "matching constraint" and what it really means is 26315 that the assembler has only a single operand that fills two roles 26316 which `asm' distinguishes. For example, an add instruction uses 26317 two input operands and an output operand, but on most CISC 26318 machines an add instruction really has only two operands, one of 26319 them an input-output operand: 26320 26321 addl #35,r12 26322 26323 Matching constraints are used in these circumstances. More 26324 precisely, the two operands that match must include one input-only 26325 operand and one output-only operand. Moreover, the digit must be a 26326 smaller number than the number of the operand that uses it in the 26327 constraint. 26328 26329`p' 26330 An operand that is a valid memory address is allowed. This is for 26331 "load address" and "push address" instructions. 26332 26333 `p' in the constraint must be accompanied by `address_operand' as 26334 the predicate in the `match_operand'. This predicate interprets 26335 the mode specified in the `match_operand' as the mode of the memory 26336 reference for which the address would be valid. 26337 26338OTHER-LETTERS 26339 Other letters can be defined in machine-dependent fashion to stand 26340 for particular classes of registers or other arbitrary operand 26341 types. `d', `a' and `f' are defined on the 68000/68020 to stand 26342 for data, address and floating point registers. 26343 26344 26345File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 26346 263476.42.2 Multiple Alternative Constraints 26348--------------------------------------- 26349 26350Sometimes a single instruction has multiple alternative sets of possible 26351operands. For example, on the 68000, a logical-or instruction can 26352combine register or an immediate value into memory, or it can combine 26353any kind of operand into a register; but it cannot combine one memory 26354location into another. 26355 26356 These constraints are represented as multiple alternatives. An 26357alternative can be described by a series of letters for each operand. 26358The overall constraint for an operand is made from the letters for this 26359operand from the first alternative, a comma, the letters for this 26360operand from the second alternative, a comma, and so on until the last 26361alternative. 26362 26363 If all the operands fit any one alternative, the instruction is valid. 26364Otherwise, for each alternative, the compiler counts how many 26365instructions must be added to copy the operands so that that 26366alternative applies. The alternative requiring the least copying is 26367chosen. If two alternatives need the same amount of copying, the one 26368that comes first is chosen. These choices can be altered with the `?' 26369and `!' characters: 26370 26371`?' 26372 Disparage slightly the alternative that the `?' appears in, as a 26373 choice when no alternative applies exactly. The compiler regards 26374 this alternative as one unit more costly for each `?' that appears 26375 in it. 26376 26377`!' 26378 Disparage severely the alternative that the `!' appears in. This 26379 alternative can still be used if it fits without reloading, but if 26380 reloading is needed, some other alternative will be used. 26381 26382 26383File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 26384 263856.42.3 Constraint Modifier Characters 26386------------------------------------- 26387 26388Here are constraint modifier characters. 26389 26390`=' 26391 Means that this operand is write-only for this instruction: the 26392 previous value is discarded and replaced by output data. 26393 26394`+' 26395 Means that this operand is both read and written by the 26396 instruction. 26397 26398 When the compiler fixes up the operands to satisfy the constraints, 26399 it needs to know which operands are inputs to the instruction and 26400 which are outputs from it. `=' identifies an output; `+' 26401 identifies an operand that is both input and output; all other 26402 operands are assumed to be input only. 26403 26404 If you specify `=' or `+' in a constraint, you put it in the first 26405 character of the constraint string. 26406 26407`&' 26408 Means (in a particular alternative) that this operand is an 26409 "earlyclobber" operand, which is modified before the instruction is 26410 finished using the input operands. Therefore, this operand may 26411 not lie in a register that is used as an input operand or as part 26412 of any memory address. 26413 26414 `&' applies only to the alternative in which it is written. In 26415 constraints with multiple alternatives, sometimes one alternative 26416 requires `&' while others do not. See, for example, the `movdf' 26417 insn of the 68000. 26418 26419 An input operand can be tied to an earlyclobber operand if its only 26420 use as an input occurs before the early result is written. Adding 26421 alternatives of this form often allows GCC to produce better code 26422 when only some of the inputs can be affected by the earlyclobber. 26423 See, for example, the `mulsi3' insn of the ARM. 26424 26425 `&' does not obviate the need to write `='. 26426 26427`%' 26428 Declares the instruction to be commutative for this operand and the 26429 following operand. This means that the compiler may interchange 26430 the two operands if that is the cheapest way to make all operands 26431 fit the constraints. GCC can only handle one commutative pair in 26432 an asm; if you use more, the compiler may fail. Note that you 26433 need not use the modifier if the two alternatives are strictly 26434 identical; this would only waste time in the reload pass. The 26435 modifier is not operational after register allocation, so the 26436 result of `define_peephole2' and `define_split's performed after 26437 reload cannot rely on `%' to make the intended insn match. 26438 26439`#' 26440 Says that all following characters, up to the next comma, are to be 26441 ignored as a constraint. They are significant only for choosing 26442 register preferences. 26443 26444`*' 26445 Says that the following character should be ignored when choosing 26446 register preferences. `*' has no effect on the meaning of the 26447 constraint as a constraint, and no effect on reloading. For LRA 26448 `*' additionally disparages slightly the alternative if the 26449 following character matches the operand. 26450 26451 26452 26453File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 26454 264556.42.4 Constraints for Particular Machines 26456------------------------------------------ 26457 26458Whenever possible, you should use the general-purpose constraint letters 26459in `asm' arguments, since they will convey meaning more readily to 26460people reading your code. Failing that, use the constraint letters 26461that usually have very similar meanings across architectures. The most 26462commonly used constraints are `m' and `r' (for memory and 26463general-purpose registers respectively; *note Simple Constraints::), and 26464`I', usually the letter indicating the most common immediate-constant 26465format. 26466 26467 Each architecture defines additional constraints. These constraints 26468are used by the compiler itself for instruction generation, as well as 26469for `asm' statements; therefore, some of the constraints are not 26470particularly useful for `asm'. Here is a summary of some of the 26471machine-dependent constraints available on some particular machines; it 26472includes both constraints that are useful for `asm' and constraints 26473that aren't. The compiler source file mentioned in the table heading 26474for each architecture is the definitive reference for the meanings of 26475that architecture's constraints. 26476 26477_AArch64 family--`config/aarch64/constraints.md'_ 26478 26479 `k' 26480 The stack pointer register (`SP') 26481 26482 `w' 26483 Floating point or SIMD vector register 26484 26485 `I' 26486 Integer constant that is valid as an immediate operand in an 26487 `ADD' instruction 26488 26489 `J' 26490 Integer constant that is valid as an immediate operand in a 26491 `SUB' instruction (once negated) 26492 26493 `K' 26494 Integer constant that can be used with a 32-bit logical 26495 instruction 26496 26497 `L' 26498 Integer constant that can be used with a 64-bit logical 26499 instruction 26500 26501 `M' 26502 Integer constant that is valid as an immediate operand in a 26503 32-bit `MOV' pseudo instruction. The `MOV' may be assembled 26504 to one of several different machine instructions depending on 26505 the value 26506 26507 `N' 26508 Integer constant that is valid as an immediate operand in a 26509 64-bit `MOV' pseudo instruction 26510 26511 `S' 26512 An absolute symbolic address or a label reference 26513 26514 `Y' 26515 Floating point constant zero 26516 26517 `Z' 26518 Integer constant zero 26519 26520 `Usa' 26521 An absolute symbolic address 26522 26523 `Ush' 26524 The high part (bits 12 and upwards) of the pc-relative 26525 address of a symbol within 4GB of the instruction 26526 26527 `Q' 26528 A memory address which uses a single base register with no 26529 offset 26530 26531 `Ump' 26532 A memory address suitable for a load/store pair instruction 26533 in SI, DI, SF and DF modes 26534 26535 26536_ARM family--`config/arm/constraints.md'_ 26537 26538 `w' 26539 VFP floating-point register 26540 26541 `G' 26542 The floating-point constant 0.0 26543 26544 `I' 26545 Integer that is valid as an immediate operand in a data 26546 processing instruction. That is, an integer in the range 0 26547 to 255 rotated by a multiple of 2 26548 26549 `J' 26550 Integer in the range -4095 to 4095 26551 26552 `K' 26553 Integer that satisfies constraint `I' when inverted (ones 26554 complement) 26555 26556 `L' 26557 Integer that satisfies constraint `I' when negated (twos 26558 complement) 26559 26560 `M' 26561 Integer in the range 0 to 32 26562 26563 `Q' 26564 A memory reference where the exact address is in a single 26565 register (``m'' is preferable for `asm' statements) 26566 26567 `R' 26568 An item in the constant pool 26569 26570 `S' 26571 A symbol in the text segment of the current file 26572 26573 `Uv' 26574 A memory reference suitable for VFP load/store insns 26575 (reg+constant offset) 26576 26577 `Uy' 26578 A memory reference suitable for iWMMXt load/store 26579 instructions. 26580 26581 `Uq' 26582 A memory reference suitable for the ARMv4 ldrsb instruction. 26583 26584_AVR family--`config/avr/constraints.md'_ 26585 26586 `l' 26587 Registers from r0 to r15 26588 26589 `a' 26590 Registers from r16 to r23 26591 26592 `d' 26593 Registers from r16 to r31 26594 26595 `w' 26596 Registers from r24 to r31. These registers can be used in 26597 `adiw' command 26598 26599 `e' 26600 Pointer register (r26-r31) 26601 26602 `b' 26603 Base pointer register (r28-r31) 26604 26605 `q' 26606 Stack pointer register (SPH:SPL) 26607 26608 `t' 26609 Temporary register r0 26610 26611 `x' 26612 Register pair X (r27:r26) 26613 26614 `y' 26615 Register pair Y (r29:r28) 26616 26617 `z' 26618 Register pair Z (r31:r30) 26619 26620 `I' 26621 Constant greater than -1, less than 64 26622 26623 `J' 26624 Constant greater than -64, less than 1 26625 26626 `K' 26627 Constant integer 2 26628 26629 `L' 26630 Constant integer 0 26631 26632 `M' 26633 Constant that fits in 8 bits 26634 26635 `N' 26636 Constant integer -1 26637 26638 `O' 26639 Constant integer 8, 16, or 24 26640 26641 `P' 26642 Constant integer 1 26643 26644 `G' 26645 A floating point constant 0.0 26646 26647 `Q' 26648 A memory address based on Y or Z pointer with displacement. 26649 26650_Epiphany--`config/epiphany/constraints.md'_ 26651 26652 `U16' 26653 An unsigned 16-bit constant. 26654 26655 `K' 26656 An unsigned 5-bit constant. 26657 26658 `L' 26659 A signed 11-bit constant. 26660 26661 `Cm1' 26662 A signed 11-bit constant added to -1. Can only match when 26663 the `-m1reg-REG' option is active. 26664 26665 `Cl1' 26666 Left-shift of -1, i.e., a bit mask with a block of leading 26667 ones, the rest being a block of trailing zeroes. Can only 26668 match when the `-m1reg-REG' option is active. 26669 26670 `Cr1' 26671 Right-shift of -1, i.e., a bit mask with a trailing block of 26672 ones, the rest being zeroes. Or to put it another way, one 26673 less than a power of two. Can only match when the 26674 `-m1reg-REG' option is active. 26675 26676 `Cal' 26677 Constant for arithmetic/logical operations. This is like 26678 `i', except that for position independent code, no symbols / 26679 expressions needing relocations are allowed. 26680 26681 `Csy' 26682 Symbolic constant for call/jump instruction. 26683 26684 `Rcs' 26685 The register class usable in short insns. This is a register 26686 class constraint, and can thus drive register allocation. 26687 This constraint won't match unless `-mprefer-short-insn-regs' 26688 is in effect. 26689 26690 `Rsc' 26691 The the register class of registers that can be used to hold a 26692 sibcall call address. I.e., a caller-saved register. 26693 26694 `Rct' 26695 Core control register class. 26696 26697 `Rgs' 26698 The register group usable in short insns. This constraint 26699 does not use a register class, so that it only passively 26700 matches suitable registers, and doesn't drive register 26701 allocation. 26702 26703 `Rra' 26704 Matches the return address if it can be replaced with the 26705 link register. 26706 26707 `Rcc' 26708 Matches the integer condition code register. 26709 26710 `Sra' 26711 Matches the return address if it is in a stack slot. 26712 26713 `Cfm' 26714 Matches control register values to switch fp mode, which are 26715 encapsulated in `UNSPEC_FP_MODE'. 26716 26717_CR16 Architecture--`config/cr16/cr16.h'_ 26718 26719 `b' 26720 Registers from r0 to r14 (registers without stack pointer) 26721 26722 `t' 26723 Register from r0 to r11 (all 16-bit registers) 26724 26725 `p' 26726 Register from r12 to r15 (all 32-bit registers) 26727 26728 `I' 26729 Signed constant that fits in 4 bits 26730 26731 `J' 26732 Signed constant that fits in 5 bits 26733 26734 `K' 26735 Signed constant that fits in 6 bits 26736 26737 `L' 26738 Unsigned constant that fits in 4 bits 26739 26740 `M' 26741 Signed constant that fits in 32 bits 26742 26743 `N' 26744 Check for 64 bits wide constants for add/sub instructions 26745 26746 `G' 26747 Floating point constant that is legal for store immediate 26748 26749_Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 26750 26751 `a' 26752 General register 1 26753 26754 `f' 26755 Floating point register 26756 26757 `q' 26758 Shift amount register 26759 26760 `x' 26761 Floating point register (deprecated) 26762 26763 `y' 26764 Upper floating point register (32-bit), floating point 26765 register (64-bit) 26766 26767 `Z' 26768 Any register 26769 26770 `I' 26771 Signed 11-bit integer constant 26772 26773 `J' 26774 Signed 14-bit integer constant 26775 26776 `K' 26777 Integer constant that can be deposited with a `zdepi' 26778 instruction 26779 26780 `L' 26781 Signed 5-bit integer constant 26782 26783 `M' 26784 Integer constant 0 26785 26786 `N' 26787 Integer constant that can be loaded with a `ldil' instruction 26788 26789 `O' 26790 Integer constant whose value plus one is a power of 2 26791 26792 `P' 26793 Integer constant that can be used for `and' operations in 26794 `depi' and `extru' instructions 26795 26796 `S' 26797 Integer constant 31 26798 26799 `U' 26800 Integer constant 63 26801 26802 `G' 26803 Floating-point constant 0.0 26804 26805 `A' 26806 A `lo_sum' data-linkage-table memory operand 26807 26808 `Q' 26809 A memory operand that can be used as the destination operand 26810 of an integer store instruction 26811 26812 `R' 26813 A scaled or unscaled indexed memory operand 26814 26815 `T' 26816 A memory operand for floating-point loads and stores 26817 26818 `W' 26819 A register indirect memory operand 26820 26821_picoChip family--`picochip.h'_ 26822 26823 `k' 26824 Stack register. 26825 26826 `f' 26827 Pointer register. A register which can be used to access 26828 memory without supplying an offset. Any other register can 26829 be used to access memory, but will need a constant offset. 26830 In the case of the offset being zero, it is more efficient to 26831 use a pointer register, since this reduces code size. 26832 26833 `t' 26834 A twin register. A register which may be paired with an 26835 adjacent register to create a 32-bit register. 26836 26837 `a' 26838 Any absolute memory address (e.g., symbolic constant, symbolic 26839 constant + offset). 26840 26841 `I' 26842 4-bit signed integer. 26843 26844 `J' 26845 4-bit unsigned integer. 26846 26847 `K' 26848 8-bit signed integer. 26849 26850 `M' 26851 Any constant whose absolute value is no greater than 4-bits. 26852 26853 `N' 26854 10-bit signed integer 26855 26856 `O' 26857 16-bit signed integer. 26858 26859 26860_PowerPC and IBM RS6000--`config/rs6000/constraints.md'_ 26861 26862 `b' 26863 Address base register 26864 26865 `d' 26866 Floating point register (containing 64-bit value) 26867 26868 `f' 26869 Floating point register (containing 32-bit value) 26870 26871 `v' 26872 Altivec vector register 26873 26874 `wa' 26875 Any VSX register if the -mvsx option was used or NO_REGS. 26876 26877 When using any of the register constraints (`wa', `wd', `wf', 26878 `wg', `wh', `wi', `wj', `wk', `wl', `wm', `ws', `wt', `wu', 26879 `wv', `ww', or `wy') that take VSX registers, you must use 26880 `%x<n>' in the template so that the correct register is used. 26881 Otherwise the register number output in the assembly file 26882 will be incorrect if an Altivec register is an operand of a 26883 VSX instruction that expects VSX register numbering. 26884 26885 asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3)); 26886 26887 is correct, but: 26888 26889 asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3)); 26890 26891 is not correct. 26892 26893 `wd' 26894 VSX vector register to hold vector double data or NO_REGS. 26895 26896 `wf' 26897 VSX vector register to hold vector float data or NO_REGS. 26898 26899 `wg' 26900 If `-mmfpgpr' was used, a floating point register or NO_REGS. 26901 26902 `wh' 26903 Floating point register if direct moves are available, or 26904 NO_REGS. 26905 26906 `wi' 26907 FP or VSX register to hold 64-bit integers for VSX insns or 26908 NO_REGS. 26909 26910 `wj' 26911 FP or VSX register to hold 64-bit integers for direct moves 26912 or NO_REGS. 26913 26914 `wk' 26915 FP or VSX register to hold 64-bit doubles for direct moves or 26916 NO_REGS. 26917 26918 `wl' 26919 Floating point register if the LFIWAX instruction is enabled 26920 or NO_REGS. 26921 26922 `wm' 26923 VSX register if direct move instructions are enabled, or 26924 NO_REGS. 26925 26926 `wn' 26927 No register (NO_REGS). 26928 26929 `wr' 26930 General purpose register if 64-bit instructions are enabled 26931 or NO_REGS. 26932 26933 `ws' 26934 VSX vector register to hold scalar double values or NO_REGS. 26935 26936 `wt' 26937 VSX vector register to hold 128 bit integer or NO_REGS. 26938 26939 `wu' 26940 Altivec register to use for float/32-bit int loads/stores or 26941 NO_REGS. 26942 26943 `wv' 26944 Altivec register to use for double loads/stores or NO_REGS. 26945 26946 `ww' 26947 FP or VSX register to perform float operations under `-mvsx' 26948 or NO_REGS. 26949 26950 `wx' 26951 Floating point register if the STFIWX instruction is enabled 26952 or NO_REGS. 26953 26954 `wy' 26955 FP or VSX register to perform ISA 2.07 float ops or NO_REGS. 26956 26957 `wz' 26958 Floating point register if the LFIWZX instruction is enabled 26959 or NO_REGS. 26960 26961 `wQ' 26962 A memory address that will work with the `lq' and `stq' 26963 instructions. 26964 26965 `h' 26966 `MQ', `CTR', or `LINK' register 26967 26968 `q' 26969 `MQ' register 26970 26971 `c' 26972 `CTR' register 26973 26974 `l' 26975 `LINK' register 26976 26977 `x' 26978 `CR' register (condition register) number 0 26979 26980 `y' 26981 `CR' register (condition register) 26982 26983 `z' 26984 `XER[CA]' carry bit (part of the XER register) 26985 26986 `I' 26987 Signed 16-bit constant 26988 26989 `J' 26990 Unsigned 16-bit constant shifted left 16 bits (use `L' 26991 instead for `SImode' constants) 26992 26993 `K' 26994 Unsigned 16-bit constant 26995 26996 `L' 26997 Signed 16-bit constant shifted left 16 bits 26998 26999 `M' 27000 Constant larger than 31 27001 27002 `N' 27003 Exact power of 2 27004 27005 `O' 27006 Zero 27007 27008 `P' 27009 Constant whose negation is a signed 16-bit constant 27010 27011 `G' 27012 Floating point constant that can be loaded into a register 27013 with one instruction per word 27014 27015 `H' 27016 Integer/Floating point constant that can be loaded into a 27017 register using three instructions 27018 27019 `m' 27020 Memory operand. Normally, `m' does not allow addresses that 27021 update the base register. If `<' or `>' constraint is also 27022 used, they are allowed and therefore on PowerPC targets in 27023 that case it is only safe to use `m<>' in an `asm' statement 27024 if that `asm' statement accesses the operand exactly once. 27025 The `asm' statement must also use `%U<OPNO>' as a placeholder 27026 for the "update" flag in the corresponding load or store 27027 instruction. For example: 27028 27029 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 27030 27031 is correct but: 27032 27033 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 27034 27035 is not. 27036 27037 `es' 27038 A "stable" memory operand; that is, one which does not 27039 include any automodification of the base register. This used 27040 to be useful when `m' allowed automodification of the base 27041 register, but as those are now only allowed when `<' or `>' 27042 is used, `es' is basically the same as `m' without `<' and 27043 `>'. 27044 27045 `Q' 27046 Memory operand that is an offset from a register (it is 27047 usually better to use `m' or `es' in `asm' statements) 27048 27049 `Z' 27050 Memory operand that is an indexed or indirect from a register 27051 (it is usually better to use `m' or `es' in `asm' statements) 27052 27053 `R' 27054 AIX TOC entry 27055 27056 `a' 27057 Address operand that is an indexed or indirect from a 27058 register (`p' is preferable for `asm' statements) 27059 27060 `S' 27061 Constant suitable as a 64-bit mask operand 27062 27063 `T' 27064 Constant suitable as a 32-bit mask operand 27065 27066 `U' 27067 System V Release 4 small data area reference 27068 27069 `t' 27070 AND masks that can be performed by two rldic{l, r} 27071 instructions 27072 27073 `W' 27074 Vector constant that does not require memory 27075 27076 `j' 27077 Vector constant that is all zeros. 27078 27079 27080_Intel 386--`config/i386/constraints.md'_ 27081 27082 `R' 27083 Legacy register--the eight integer registers available on all 27084 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 27085 27086 `q' 27087 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 27088 `c', and `d'; in 64-bit mode, any integer register. 27089 27090 `Q' 27091 Any register accessible as `Rh': `a', `b', `c', and `d'. 27092 27093 `a' 27094 The `a' register. 27095 27096 `b' 27097 The `b' register. 27098 27099 `c' 27100 The `c' register. 27101 27102 `d' 27103 The `d' register. 27104 27105 `S' 27106 The `si' register. 27107 27108 `D' 27109 The `di' register. 27110 27111 `A' 27112 The `a' and `d' registers. This class is used for 27113 instructions that return double word results in the `ax:dx' 27114 register pair. Single word values will be allocated either 27115 in `ax' or `dx'. For example on i386 the following 27116 implements `rdtsc': 27117 27118 unsigned long long rdtsc (void) 27119 { 27120 unsigned long long tick; 27121 __asm__ __volatile__("rdtsc":"=A"(tick)); 27122 return tick; 27123 } 27124 27125 This is not correct on x86_64 as it would allocate tick in 27126 either `ax' or `dx'. You have to use the following variant 27127 instead: 27128 27129 unsigned long long rdtsc (void) 27130 { 27131 unsigned int tickl, tickh; 27132 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 27133 return ((unsigned long long)tickh << 32)|tickl; 27134 } 27135 27136 `f' 27137 Any 80387 floating-point (stack) register. 27138 27139 `t' 27140 Top of 80387 floating-point stack (`%st(0)'). 27141 27142 `u' 27143 Second from top of 80387 floating-point stack (`%st(1)'). 27144 27145 `y' 27146 Any MMX register. 27147 27148 `x' 27149 Any SSE register. 27150 27151 `Yz' 27152 First SSE register (`%xmm0'). 27153 27154 `I' 27155 Integer constant in the range 0 ... 31, for 32-bit shifts. 27156 27157 `J' 27158 Integer constant in the range 0 ... 63, for 64-bit shifts. 27159 27160 `K' 27161 Signed 8-bit integer constant. 27162 27163 `L' 27164 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 27165 27166 `M' 27167 0, 1, 2, or 3 (shifts for the `lea' instruction). 27168 27169 `N' 27170 Unsigned 8-bit integer constant (for `in' and `out' 27171 instructions). 27172 27173 `G' 27174 Standard 80387 floating point constant. 27175 27176 `C' 27177 Standard SSE floating point constant. 27178 27179 `e' 27180 32-bit signed integer constant, or a symbolic reference known 27181 to fit that range (for immediate operands in sign-extending 27182 x86-64 instructions). 27183 27184 `Z' 27185 32-bit unsigned integer constant, or a symbolic reference 27186 known to fit that range (for immediate operands in 27187 zero-extending x86-64 instructions). 27188 27189 27190_Intel IA-64--`config/ia64/ia64.h'_ 27191 27192 `a' 27193 General register `r0' to `r3' for `addl' instruction 27194 27195 `b' 27196 Branch register 27197 27198 `c' 27199 Predicate register (`c' as in "conditional") 27200 27201 `d' 27202 Application register residing in M-unit 27203 27204 `e' 27205 Application register residing in I-unit 27206 27207 `f' 27208 Floating-point register 27209 27210 `m' 27211 Memory operand. If used together with `<' or `>', the 27212 operand can have postincrement and postdecrement which 27213 require printing with `%Pn' on IA-64. 27214 27215 `G' 27216 Floating-point constant 0.0 or 1.0 27217 27218 `I' 27219 14-bit signed integer constant 27220 27221 `J' 27222 22-bit signed integer constant 27223 27224 `K' 27225 8-bit signed integer constant for logical instructions 27226 27227 `L' 27228 8-bit adjusted signed integer constant for compare pseudo-ops 27229 27230 `M' 27231 6-bit unsigned integer constant for shift counts 27232 27233 `N' 27234 9-bit signed integer constant for load and store 27235 postincrements 27236 27237 `O' 27238 The constant zero 27239 27240 `P' 27241 0 or -1 for `dep' instruction 27242 27243 `Q' 27244 Non-volatile memory for floating-point loads and stores 27245 27246 `R' 27247 Integer constant in the range 1 to 4 for `shladd' instruction 27248 27249 `S' 27250 Memory operand except postincrement and postdecrement. This 27251 is now roughly the same as `m' when not used together with `<' 27252 or `>'. 27253 27254_FRV--`config/frv/frv.h'_ 27255 27256 `a' 27257 Register in the class `ACC_REGS' (`acc0' to `acc7'). 27258 27259 `b' 27260 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 27261 27262 `c' 27263 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 27264 to `icc3'). 27265 27266 `d' 27267 Register in the class `GPR_REGS' (`gr0' to `gr63'). 27268 27269 `e' 27270 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 27271 registers are excluded not in the class but through the use 27272 of a machine mode larger than 4 bytes. 27273 27274 `f' 27275 Register in the class `FPR_REGS' (`fr0' to `fr63'). 27276 27277 `h' 27278 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 27279 registers are excluded not in the class but through the use 27280 of a machine mode larger than 4 bytes. 27281 27282 `l' 27283 Register in the class `LR_REG' (the `lr' register). 27284 27285 `q' 27286 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 27287 Register numbers not divisible by 4 are excluded not in the 27288 class but through the use of a machine mode larger than 8 27289 bytes. 27290 27291 `t' 27292 Register in the class `ICC_REGS' (`icc0' to `icc3'). 27293 27294 `u' 27295 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 27296 27297 `v' 27298 Register in the class `ICR_REGS' (`cc4' to `cc7'). 27299 27300 `w' 27301 Register in the class `FCR_REGS' (`cc0' to `cc3'). 27302 27303 `x' 27304 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 27305 Register numbers not divisible by 4 are excluded not in the 27306 class but through the use of a machine mode larger than 8 27307 bytes. 27308 27309 `z' 27310 Register in the class `SPR_REGS' (`lcr' and `lr'). 27311 27312 `A' 27313 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 27314 27315 `B' 27316 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 27317 27318 `C' 27319 Register in the class `CR_REGS' (`cc0' to `cc7'). 27320 27321 `G' 27322 Floating point constant zero 27323 27324 `I' 27325 6-bit signed integer constant 27326 27327 `J' 27328 10-bit signed integer constant 27329 27330 `L' 27331 16-bit signed integer constant 27332 27333 `M' 27334 16-bit unsigned integer constant 27335 27336 `N' 27337 12-bit signed integer constant that is negative--i.e. in the 27338 range of -2048 to -1 27339 27340 `O' 27341 Constant zero 27342 27343 `P' 27344 12-bit signed integer constant that is greater than 27345 zero--i.e. in the range of 1 to 2047. 27346 27347 27348_Blackfin family--`config/bfin/constraints.md'_ 27349 27350 `a' 27351 P register 27352 27353 `d' 27354 D register 27355 27356 `z' 27357 A call clobbered P register. 27358 27359 `qN' 27360 A single register. If N is in the range 0 to 7, the 27361 corresponding D register. If it is `A', then the register P0. 27362 27363 `D' 27364 Even-numbered D register 27365 27366 `W' 27367 Odd-numbered D register 27368 27369 `e' 27370 Accumulator register. 27371 27372 `A' 27373 Even-numbered accumulator register. 27374 27375 `B' 27376 Odd-numbered accumulator register. 27377 27378 `b' 27379 I register 27380 27381 `v' 27382 B register 27383 27384 `f' 27385 M register 27386 27387 `c' 27388 Registers used for circular buffering, i.e. I, B, or L 27389 registers. 27390 27391 `C' 27392 The CC register. 27393 27394 `t' 27395 LT0 or LT1. 27396 27397 `k' 27398 LC0 or LC1. 27399 27400 `u' 27401 LB0 or LB1. 27402 27403 `x' 27404 Any D, P, B, M, I or L register. 27405 27406 `y' 27407 Additional registers typically used only in prologues and 27408 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 27409 USP. 27410 27411 `w' 27412 Any register except accumulators or CC. 27413 27414 `Ksh' 27415 Signed 16 bit integer (in the range -32768 to 32767) 27416 27417 `Kuh' 27418 Unsigned 16 bit integer (in the range 0 to 65535) 27419 27420 `Ks7' 27421 Signed 7 bit integer (in the range -64 to 63) 27422 27423 `Ku7' 27424 Unsigned 7 bit integer (in the range 0 to 127) 27425 27426 `Ku5' 27427 Unsigned 5 bit integer (in the range 0 to 31) 27428 27429 `Ks4' 27430 Signed 4 bit integer (in the range -8 to 7) 27431 27432 `Ks3' 27433 Signed 3 bit integer (in the range -3 to 4) 27434 27435 `Ku3' 27436 Unsigned 3 bit integer (in the range 0 to 7) 27437 27438 `PN' 27439 Constant N, where N is a single-digit constant in the range 0 27440 to 4. 27441 27442 `PA' 27443 An integer equal to one of the MACFLAG_XXX constants that is 27444 suitable for use with either accumulator. 27445 27446 `PB' 27447 An integer equal to one of the MACFLAG_XXX constants that is 27448 suitable for use only with accumulator A1. 27449 27450 `M1' 27451 Constant 255. 27452 27453 `M2' 27454 Constant 65535. 27455 27456 `J' 27457 An integer constant with exactly a single bit set. 27458 27459 `L' 27460 An integer constant with all bits set except exactly one. 27461 27462 `H' 27463 27464 `Q' 27465 Any SYMBOL_REF. 27466 27467_M32C--`config/m32c/m32c.c'_ 27468 27469 `Rsp' 27470 `Rfb' 27471 `Rsb' 27472 `$sp', `$fb', `$sb'. 27473 27474 `Rcr' 27475 Any control register, when they're 16 bits wide (nothing if 27476 control registers are 24 bits wide) 27477 27478 `Rcl' 27479 Any control register, when they're 24 bits wide. 27480 27481 `R0w' 27482 `R1w' 27483 `R2w' 27484 `R3w' 27485 $r0, $r1, $r2, $r3. 27486 27487 `R02' 27488 $r0 or $r2, or $r2r0 for 32 bit values. 27489 27490 `R13' 27491 $r1 or $r3, or $r3r1 for 32 bit values. 27492 27493 `Rdi' 27494 A register that can hold a 64 bit value. 27495 27496 `Rhl' 27497 $r0 or $r1 (registers with addressable high/low bytes) 27498 27499 `R23' 27500 $r2 or $r3 27501 27502 `Raa' 27503 Address registers 27504 27505 `Raw' 27506 Address registers when they're 16 bits wide. 27507 27508 `Ral' 27509 Address registers when they're 24 bits wide. 27510 27511 `Rqi' 27512 Registers that can hold QI values. 27513 27514 `Rad' 27515 Registers that can be used with displacements ($a0, $a1, $sb). 27516 27517 `Rsi' 27518 Registers that can hold 32 bit values. 27519 27520 `Rhi' 27521 Registers that can hold 16 bit values. 27522 27523 `Rhc' 27524 Registers chat can hold 16 bit values, including all control 27525 registers. 27526 27527 `Rra' 27528 $r0 through R1, plus $a0 and $a1. 27529 27530 `Rfl' 27531 The flags register. 27532 27533 `Rmm' 27534 The memory-based pseudo-registers $mem0 through $mem15. 27535 27536 `Rpi' 27537 Registers that can hold pointers (16 bit registers for r8c, 27538 m16c; 24 bit registers for m32cm, m32c). 27539 27540 `Rpa' 27541 Matches multiple registers in a PARALLEL to form a larger 27542 register. Used to match function return values. 27543 27544 `Is3' 27545 -8 ... 7 27546 27547 `IS1' 27548 -128 ... 127 27549 27550 `IS2' 27551 -32768 ... 32767 27552 27553 `IU2' 27554 0 ... 65535 27555 27556 `In4' 27557 -8 ... -1 or 1 ... 8 27558 27559 `In5' 27560 -16 ... -1 or 1 ... 16 27561 27562 `In6' 27563 -32 ... -1 or 1 ... 32 27564 27565 `IM2' 27566 -65536 ... -1 27567 27568 `Ilb' 27569 An 8 bit value with exactly one bit set. 27570 27571 `Ilw' 27572 A 16 bit value with exactly one bit set. 27573 27574 `Sd' 27575 The common src/dest memory addressing modes. 27576 27577 `Sa' 27578 Memory addressed using $a0 or $a1. 27579 27580 `Si' 27581 Memory addressed with immediate addresses. 27582 27583 `Ss' 27584 Memory addressed using the stack pointer ($sp). 27585 27586 `Sf' 27587 Memory addressed using the frame base register ($fb). 27588 27589 `Ss' 27590 Memory addressed using the small base register ($sb). 27591 27592 `S1' 27593 $r1h 27594 27595_MeP--`config/mep/constraints.md'_ 27596 27597 `a' 27598 The $sp register. 27599 27600 `b' 27601 The $tp register. 27602 27603 `c' 27604 Any control register. 27605 27606 `d' 27607 Either the $hi or the $lo register. 27608 27609 `em' 27610 Coprocessor registers that can be directly loaded ($c0-$c15). 27611 27612 `ex' 27613 Coprocessor registers that can be moved to each other. 27614 27615 `er' 27616 Coprocessor registers that can be moved to core registers. 27617 27618 `h' 27619 The $hi register. 27620 27621 `j' 27622 The $rpc register. 27623 27624 `l' 27625 The $lo register. 27626 27627 `t' 27628 Registers which can be used in $tp-relative addressing. 27629 27630 `v' 27631 The $gp register. 27632 27633 `x' 27634 The coprocessor registers. 27635 27636 `y' 27637 The coprocessor control registers. 27638 27639 `z' 27640 The $0 register. 27641 27642 `A' 27643 User-defined register set A. 27644 27645 `B' 27646 User-defined register set B. 27647 27648 `C' 27649 User-defined register set C. 27650 27651 `D' 27652 User-defined register set D. 27653 27654 `I' 27655 Offsets for $gp-rel addressing. 27656 27657 `J' 27658 Constants that can be used directly with boolean insns. 27659 27660 `K' 27661 Constants that can be moved directly to registers. 27662 27663 `L' 27664 Small constants that can be added to registers. 27665 27666 `M' 27667 Long shift counts. 27668 27669 `N' 27670 Small constants that can be compared to registers. 27671 27672 `O' 27673 Constants that can be loaded into the top half of registers. 27674 27675 `S' 27676 Signed 8-bit immediates. 27677 27678 `T' 27679 Symbols encoded for $tp-rel or $gp-rel addressing. 27680 27681 `U' 27682 Non-constant addresses for loading/saving coprocessor 27683 registers. 27684 27685 `W' 27686 The top half of a symbol's value. 27687 27688 `Y' 27689 A register indirect address without offset. 27690 27691 `Z' 27692 Symbolic references to the control bus. 27693 27694 27695_MicroBlaze--`config/microblaze/constraints.md'_ 27696 27697 `d' 27698 A general register (`r0' to `r31'). 27699 27700 `z' 27701 A status register (`rmsr', `$fcc1' to `$fcc7'). 27702 27703 27704_MIPS--`config/mips/constraints.md'_ 27705 27706 `d' 27707 An address register. This is equivalent to `r' unless 27708 generating MIPS16 code. 27709 27710 `f' 27711 A floating-point register (if available). 27712 27713 `h' 27714 Formerly the `hi' register. This constraint is no longer 27715 supported. 27716 27717 `l' 27718 The `lo' register. Use this register to store values that are 27719 no bigger than a word. 27720 27721 `x' 27722 The concatenated `hi' and `lo' registers. Use this register 27723 to store doubleword values. 27724 27725 `c' 27726 A register suitable for use in an indirect jump. This will 27727 always be `$25' for `-mabicalls'. 27728 27729 `v' 27730 Register `$3'. Do not use this constraint in new code; it is 27731 retained only for compatibility with glibc. 27732 27733 `y' 27734 Equivalent to `r'; retained for backwards compatibility. 27735 27736 `z' 27737 A floating-point condition code register. 27738 27739 `I' 27740 A signed 16-bit constant (for arithmetic instructions). 27741 27742 `J' 27743 Integer zero. 27744 27745 `K' 27746 An unsigned 16-bit constant (for logic instructions). 27747 27748 `L' 27749 A signed 32-bit constant in which the lower 16 bits are zero. 27750 Such constants can be loaded using `lui'. 27751 27752 `M' 27753 A constant that cannot be loaded using `lui', `addiu' or 27754 `ori'. 27755 27756 `N' 27757 A constant in the range -65535 to -1 (inclusive). 27758 27759 `O' 27760 A signed 15-bit constant. 27761 27762 `P' 27763 A constant in the range 1 to 65535 (inclusive). 27764 27765 `G' 27766 Floating-point zero. 27767 27768 `R' 27769 An address that can be used in a non-macro load or store. 27770 27771_Motorola 680x0--`config/m68k/constraints.md'_ 27772 27773 `a' 27774 Address register 27775 27776 `d' 27777 Data register 27778 27779 `f' 27780 68881 floating-point register, if available 27781 27782 `I' 27783 Integer in the range 1 to 8 27784 27785 `J' 27786 16-bit signed number 27787 27788 `K' 27789 Signed number whose magnitude is greater than 0x80 27790 27791 `L' 27792 Integer in the range -8 to -1 27793 27794 `M' 27795 Signed number whose magnitude is greater than 0x100 27796 27797 `N' 27798 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 27799 27800 `O' 27801 16 (for rotate using swap) 27802 27803 `P' 27804 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 27805 27806 `R' 27807 Numbers that mov3q can handle 27808 27809 `G' 27810 Floating point constant that is not a 68881 constant 27811 27812 `S' 27813 Operands that satisfy 'm' when -mpcrel is in effect 27814 27815 `T' 27816 Operands that satisfy 's' when -mpcrel is not in effect 27817 27818 `Q' 27819 Address register indirect addressing mode 27820 27821 `U' 27822 Register offset addressing 27823 27824 `W' 27825 const_call_operand 27826 27827 `Cs' 27828 symbol_ref or const 27829 27830 `Ci' 27831 const_int 27832 27833 `C0' 27834 const_int 0 27835 27836 `Cj' 27837 Range of signed numbers that don't fit in 16 bits 27838 27839 `Cmvq' 27840 Integers valid for mvq 27841 27842 `Capsw' 27843 Integers valid for a moveq followed by a swap 27844 27845 `Cmvz' 27846 Integers valid for mvz 27847 27848 `Cmvs' 27849 Integers valid for mvs 27850 27851 `Ap' 27852 push_operand 27853 27854 `Ac' 27855 Non-register operands allowed in clr 27856 27857 27858_Moxie--`config/moxie/constraints.md'_ 27859 27860 `A' 27861 An absolute address 27862 27863 `B' 27864 An offset address 27865 27866 `W' 27867 A register indirect memory operand 27868 27869 `I' 27870 A constant in the range of 0 to 255. 27871 27872 `N' 27873 A constant in the range of 0 to -255. 27874 27875 27876_PDP-11--`config/pdp11/constraints.md'_ 27877 27878 `a' 27879 Floating point registers AC0 through AC3. These can be 27880 loaded from/to memory with a single instruction. 27881 27882 `d' 27883 Odd numbered general registers (R1, R3, R5). These are used 27884 for 16-bit multiply operations. 27885 27886 `f' 27887 Any of the floating point registers (AC0 through AC5). 27888 27889 `G' 27890 Floating point constant 0. 27891 27892 `I' 27893 An integer constant that fits in 16 bits. 27894 27895 `J' 27896 An integer constant whose low order 16 bits are zero. 27897 27898 `K' 27899 An integer constant that does not meet the constraints for 27900 codes `I' or `J'. 27901 27902 `L' 27903 The integer constant 1. 27904 27905 `M' 27906 The integer constant -1. 27907 27908 `N' 27909 The integer constant 0. 27910 27911 `O' 27912 Integer constants -4 through -1 and 1 through 4; shifts by 27913 these amounts are handled as multiple single-bit shifts 27914 rather than a single variable-length shift. 27915 27916 `Q' 27917 A memory reference which requires an additional word (address 27918 or offset) after the opcode. 27919 27920 `R' 27921 A memory reference that is encoded within the opcode. 27922 27923 27924_RL78--`config/rl78/constraints.md'_ 27925 27926 `Int3' 27927 An integer constant in the range 1 ... 7. 27928 27929 `Int8' 27930 An integer constant in the range 0 ... 255. 27931 27932 `J' 27933 An integer constant in the range -255 ... 0 27934 27935 `K' 27936 The integer constant 1. 27937 27938 `L' 27939 The integer constant -1. 27940 27941 `M' 27942 The integer constant 0. 27943 27944 `N' 27945 The integer constant 2. 27946 27947 `O' 27948 The integer constant -2. 27949 27950 `P' 27951 An integer constant in the range 1 ... 15. 27952 27953 `Qbi' 27954 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 27955 27956 `Qsc' 27957 The synthetic compare types-gt, lt, ge, and le. 27958 27959 `Wab' 27960 A memory reference with an absolute address. 27961 27962 `Wbc' 27963 A memory reference using `BC' as a base register, with an 27964 optional offset. 27965 27966 `Wca' 27967 A memory reference using `AX', `BC', `DE', or `HL' for the 27968 address, for calls. 27969 27970 `Wcv' 27971 A memory reference using any 16-bit register pair for the 27972 address, for calls. 27973 27974 `Wd2' 27975 A memory reference using `DE' as a base register, with an 27976 optional offset. 27977 27978 `Wde' 27979 A memory reference using `DE' as a base register, without any 27980 offset. 27981 27982 `Wfr' 27983 Any memory reference to an address in the far address space. 27984 27985 `Wh1' 27986 A memory reference using `HL' as a base register, with an 27987 optional one-byte offset. 27988 27989 `Whb' 27990 A memory reference using `HL' as a base register, with `B' or 27991 `C' as the index register. 27992 27993 `Whl' 27994 A memory reference using `HL' as a base register, without any 27995 offset. 27996 27997 `Ws1' 27998 A memory reference using `SP' as a base register, with an 27999 optional one-byte offset. 28000 28001 `Y' 28002 Any memory reference to an address in the near address space. 28003 28004 `A' 28005 The `AX' register. 28006 28007 `B' 28008 The `BC' register. 28009 28010 `D' 28011 The `DE' register. 28012 28013 `R' 28014 `A' through `L' registers. 28015 28016 `S' 28017 The `SP' register. 28018 28019 `T' 28020 The `HL' register. 28021 28022 `Z08W' 28023 The 16-bit `R8' register. 28024 28025 `Z10W' 28026 The 16-bit `R10' register. 28027 28028 `Zint' 28029 The registers reserved for interrupts (`R24' to `R31'). 28030 28031 `a' 28032 The `A' register. 28033 28034 `b' 28035 The `B' register. 28036 28037 `c' 28038 The `C' register. 28039 28040 `d' 28041 The `D' register. 28042 28043 `e' 28044 The `E' register. 28045 28046 `h' 28047 The `H' register. 28048 28049 `l' 28050 The `L' register. 28051 28052 `v' 28053 The virtual registers. 28054 28055 `w' 28056 The `PSW' register. 28057 28058 `x' 28059 The `X' register. 28060 28061 28062_RX--`config/rx/constraints.md'_ 28063 28064 `Q' 28065 An address which does not involve register indirect 28066 addressing or pre/post increment/decrement addressing. 28067 28068 `Symbol' 28069 A symbol reference. 28070 28071 `Int08' 28072 A constant in the range -256 to 255, inclusive. 28073 28074 `Sint08' 28075 A constant in the range -128 to 127, inclusive. 28076 28077 `Sint16' 28078 A constant in the range -32768 to 32767, inclusive. 28079 28080 `Sint24' 28081 A constant in the range -8388608 to 8388607, inclusive. 28082 28083 `Uint04' 28084 A constant in the range 0 to 15, inclusive. 28085 28086 28087_SPARC--`config/sparc/sparc.h'_ 28088 28089 `f' 28090 Floating-point register on the SPARC-V8 architecture and 28091 lower floating-point register on the SPARC-V9 architecture. 28092 28093 `e' 28094 Floating-point register. It is equivalent to `f' on the 28095 SPARC-V8 architecture and contains both lower and upper 28096 floating-point registers on the SPARC-V9 architecture. 28097 28098 `c' 28099 Floating-point condition code register. 28100 28101 `d' 28102 Lower floating-point register. It is only valid on the 28103 SPARC-V9 architecture when the Visual Instruction Set is 28104 available. 28105 28106 `b' 28107 Floating-point register. It is only valid on the SPARC-V9 28108 architecture when the Visual Instruction Set is available. 28109 28110 `h' 28111 64-bit global or out register for the SPARC-V8+ architecture. 28112 28113 `C' 28114 The constant all-ones, for floating-point. 28115 28116 `A' 28117 Signed 5-bit constant 28118 28119 `D' 28120 A vector constant 28121 28122 `I' 28123 Signed 13-bit constant 28124 28125 `J' 28126 Zero 28127 28128 `K' 28129 32-bit constant with the low 12 bits clear (a constant that 28130 can be loaded with the `sethi' instruction) 28131 28132 `L' 28133 A constant in the range supported by `movcc' instructions 28134 (11-bit signed immediate) 28135 28136 `M' 28137 A constant in the range supported by `movrcc' instructions 28138 (10-bit signed immediate) 28139 28140 `N' 28141 Same as `K', except that it verifies that bits that are not 28142 in the lower 32-bit range are all zero. Must be used instead 28143 of `K' for modes wider than `SImode' 28144 28145 `O' 28146 The constant 4096 28147 28148 `G' 28149 Floating-point zero 28150 28151 `H' 28152 Signed 13-bit constant, sign-extended to 32 or 64 bits 28153 28154 `P' 28155 The constant -1 28156 28157 `Q' 28158 Floating-point constant whose integral representation can be 28159 moved into an integer register using a single sethi 28160 instruction 28161 28162 `R' 28163 Floating-point constant whose integral representation can be 28164 moved into an integer register using a single mov instruction 28165 28166 `S' 28167 Floating-point constant whose integral representation can be 28168 moved into an integer register using a high/lo_sum 28169 instruction sequence 28170 28171 `T' 28172 Memory address aligned to an 8-byte boundary 28173 28174 `U' 28175 Even register 28176 28177 `W' 28178 Memory address for `e' constraint registers 28179 28180 `w' 28181 Memory address with only a base register 28182 28183 `Y' 28184 Vector zero 28185 28186 28187_SPU--`config/spu/spu.h'_ 28188 28189 `a' 28190 An immediate which can be loaded with the il/ila/ilh/ilhu 28191 instructions. const_int is treated as a 64 bit value. 28192 28193 `c' 28194 An immediate for and/xor/or instructions. const_int is 28195 treated as a 64 bit value. 28196 28197 `d' 28198 An immediate for the `iohl' instruction. const_int is 28199 treated as a 64 bit value. 28200 28201 `f' 28202 An immediate which can be loaded with `fsmbi'. 28203 28204 `A' 28205 An immediate which can be loaded with the il/ila/ilh/ilhu 28206 instructions. const_int is treated as a 32 bit value. 28207 28208 `B' 28209 An immediate for most arithmetic instructions. const_int is 28210 treated as a 32 bit value. 28211 28212 `C' 28213 An immediate for and/xor/or instructions. const_int is 28214 treated as a 32 bit value. 28215 28216 `D' 28217 An immediate for the `iohl' instruction. const_int is 28218 treated as a 32 bit value. 28219 28220 `I' 28221 A constant in the range [-64, 63] for shift/rotate 28222 instructions. 28223 28224 `J' 28225 An unsigned 7-bit constant for conversion/nop/channel 28226 instructions. 28227 28228 `K' 28229 A signed 10-bit constant for most arithmetic instructions. 28230 28231 `M' 28232 A signed 16 bit immediate for `stop'. 28233 28234 `N' 28235 An unsigned 16-bit constant for `iohl' and `fsmbi'. 28236 28237 `O' 28238 An unsigned 7-bit constant whose 3 least significant bits are 28239 0. 28240 28241 `P' 28242 An unsigned 3-bit constant for 16-byte rotates and shifts 28243 28244 `R' 28245 Call operand, reg, for indirect calls 28246 28247 `S' 28248 Call operand, symbol, for relative calls. 28249 28250 `T' 28251 Call operand, const_int, for absolute calls. 28252 28253 `U' 28254 An immediate which can be loaded with the il/ila/ilh/ilhu 28255 instructions. const_int is sign extended to 128 bit. 28256 28257 `W' 28258 An immediate for shift and rotate instructions. const_int is 28259 treated as a 32 bit value. 28260 28261 `Y' 28262 An immediate for and/xor/or instructions. const_int is sign 28263 extended as a 128 bit. 28264 28265 `Z' 28266 An immediate for the `iohl' instruction. const_int is sign 28267 extended to 128 bit. 28268 28269 28270_S/390 and zSeries--`config/s390/s390.h'_ 28271 28272 `a' 28273 Address register (general purpose register except r0) 28274 28275 `c' 28276 Condition code register 28277 28278 `d' 28279 Data register (arbitrary general purpose register) 28280 28281 `f' 28282 Floating-point register 28283 28284 `I' 28285 Unsigned 8-bit constant (0-255) 28286 28287 `J' 28288 Unsigned 12-bit constant (0-4095) 28289 28290 `K' 28291 Signed 16-bit constant (-32768-32767) 28292 28293 `L' 28294 Value appropriate as displacement. 28295 `(0..4095)' 28296 for short displacement 28297 28298 `(-524288..524287)' 28299 for long displacement 28300 28301 `M' 28302 Constant integer with a value of 0x7fffffff. 28303 28304 `N' 28305 Multiple letter constraint followed by 4 parameter letters. 28306 `0..9:' 28307 number of the part counting from most to least 28308 significant 28309 28310 `H,Q:' 28311 mode of the part 28312 28313 `D,S,H:' 28314 mode of the containing operand 28315 28316 `0,F:' 28317 value of the other parts (F--all bits set) 28318 The constraint matches if the specified part of a constant 28319 has a value different from its other parts. 28320 28321 `Q' 28322 Memory reference without index register and with short 28323 displacement. 28324 28325 `R' 28326 Memory reference with index register and short displacement. 28327 28328 `S' 28329 Memory reference without index register but with long 28330 displacement. 28331 28332 `T' 28333 Memory reference with index register and long displacement. 28334 28335 `U' 28336 Pointer with short displacement. 28337 28338 `W' 28339 Pointer with long displacement. 28340 28341 `Y' 28342 Shift count operand. 28343 28344 28345_Score family--`config/score/score.h'_ 28346 28347 `d' 28348 Registers from r0 to r32. 28349 28350 `e' 28351 Registers from r0 to r16. 28352 28353 `t' 28354 r8--r11 or r22--r27 registers. 28355 28356 `h' 28357 hi register. 28358 28359 `l' 28360 lo register. 28361 28362 `x' 28363 hi + lo register. 28364 28365 `q' 28366 cnt register. 28367 28368 `y' 28369 lcb register. 28370 28371 `z' 28372 scb register. 28373 28374 `a' 28375 cnt + lcb + scb register. 28376 28377 `c' 28378 cr0--cr15 register. 28379 28380 `b' 28381 cp1 registers. 28382 28383 `f' 28384 cp2 registers. 28385 28386 `i' 28387 cp3 registers. 28388 28389 `j' 28390 cp1 + cp2 + cp3 registers. 28391 28392 `I' 28393 High 16-bit constant (32-bit constant with 16 LSBs zero). 28394 28395 `J' 28396 Unsigned 5 bit integer (in the range 0 to 31). 28397 28398 `K' 28399 Unsigned 16 bit integer (in the range 0 to 65535). 28400 28401 `L' 28402 Signed 16 bit integer (in the range -32768 to 32767). 28403 28404 `M' 28405 Unsigned 14 bit integer (in the range 0 to 16383). 28406 28407 `N' 28408 Signed 14 bit integer (in the range -8192 to 8191). 28409 28410 `Z' 28411 Any SYMBOL_REF. 28412 28413_Xstormy16--`config/stormy16/stormy16.h'_ 28414 28415 `a' 28416 Register r0. 28417 28418 `b' 28419 Register r1. 28420 28421 `c' 28422 Register r2. 28423 28424 `d' 28425 Register r8. 28426 28427 `e' 28428 Registers r0 through r7. 28429 28430 `t' 28431 Registers r0 and r1. 28432 28433 `y' 28434 The carry register. 28435 28436 `z' 28437 Registers r8 and r9. 28438 28439 `I' 28440 A constant between 0 and 3 inclusive. 28441 28442 `J' 28443 A constant that has exactly one bit set. 28444 28445 `K' 28446 A constant that has exactly one bit clear. 28447 28448 `L' 28449 A constant between 0 and 255 inclusive. 28450 28451 `M' 28452 A constant between -255 and 0 inclusive. 28453 28454 `N' 28455 A constant between -3 and 0 inclusive. 28456 28457 `O' 28458 A constant between 1 and 4 inclusive. 28459 28460 `P' 28461 A constant between -4 and -1 inclusive. 28462 28463 `Q' 28464 A memory reference that is a stack push. 28465 28466 `R' 28467 A memory reference that is a stack pop. 28468 28469 `S' 28470 A memory reference that refers to a constant address of known 28471 value. 28472 28473 `T' 28474 The register indicated by Rx (not implemented yet). 28475 28476 `U' 28477 A constant that is not between 2 and 15 inclusive. 28478 28479 `Z' 28480 The constant 0. 28481 28482 28483_TI C6X family--`config/c6x/constraints.md'_ 28484 28485 `a' 28486 Register file A (A0-A31). 28487 28488 `b' 28489 Register file B (B0-B31). 28490 28491 `A' 28492 Predicate registers in register file A (A0-A2 on C64X and 28493 higher, A1 and A2 otherwise). 28494 28495 `B' 28496 Predicate registers in register file B (B0-B2). 28497 28498 `C' 28499 A call-used register in register file B (B0-B9, B16-B31). 28500 28501 `Da' 28502 Register file A, excluding predicate registers (A3-A31, plus 28503 A0 if not C64X or higher). 28504 28505 `Db' 28506 Register file B, excluding predicate registers (B3-B31). 28507 28508 `Iu4' 28509 Integer constant in the range 0 ... 15. 28510 28511 `Iu5' 28512 Integer constant in the range 0 ... 31. 28513 28514 `In5' 28515 Integer constant in the range -31 ... 0. 28516 28517 `Is5' 28518 Integer constant in the range -16 ... 15. 28519 28520 `I5x' 28521 Integer constant that can be the operand of an ADDA or a SUBA 28522 insn. 28523 28524 `IuB' 28525 Integer constant in the range 0 ... 65535. 28526 28527 `IsB' 28528 Integer constant in the range -32768 ... 32767. 28529 28530 `IsC' 28531 Integer constant in the range -2^20 ... 2^20 - 1. 28532 28533 `Jc' 28534 Integer constant that is a valid mask for the clr instruction. 28535 28536 `Js' 28537 Integer constant that is a valid mask for the set instruction. 28538 28539 `Q' 28540 Memory location with A base register. 28541 28542 `R' 28543 Memory location with B base register. 28544 28545 `Z' 28546 Register B14 (aka DP). 28547 28548 28549_TILE-Gx--`config/tilegx/constraints.md'_ 28550 28551 `R00' 28552 `R01' 28553 `R02' 28554 `R03' 28555 `R04' 28556 `R05' 28557 `R06' 28558 `R07' 28559 `R08' 28560 `R09' 28561 `R10' 28562 Each of these represents a register constraint for an 28563 individual register, from r0 to r10. 28564 28565 `I' 28566 Signed 8-bit integer constant. 28567 28568 `J' 28569 Signed 16-bit integer constant. 28570 28571 `K' 28572 Unsigned 16-bit integer constant. 28573 28574 `L' 28575 Integer constant that fits in one signed byte when 28576 incremented by one (-129 ... 126). 28577 28578 `m' 28579 Memory operand. If used together with `<' or `>', the 28580 operand can have postincrement which requires printing with 28581 `%In' and `%in' on TILE-Gx. For example: 28582 28583 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 28584 28585 `M' 28586 A bit mask suitable for the BFINS instruction. 28587 28588 `N' 28589 Integer constant that is a byte tiled out eight times. 28590 28591 `O' 28592 The integer zero constant. 28593 28594 `P' 28595 Integer constant that is a sign-extended byte tiled out as 28596 four shorts. 28597 28598 `Q' 28599 Integer constant that fits in one signed byte when incremented 28600 (-129 ... 126), but excluding -1. 28601 28602 `S' 28603 Integer constant that has all 1 bits consecutive and starting 28604 at bit 0. 28605 28606 `T' 28607 A 16-bit fragment of a got, tls, or pc-relative reference. 28608 28609 `U' 28610 Memory operand except postincrement. This is roughly the 28611 same as `m' when not used together with `<' or `>'. 28612 28613 `W' 28614 An 8-element vector constant with identical elements. 28615 28616 `Y' 28617 A 4-element vector constant with identical elements. 28618 28619 `Z0' 28620 The integer constant 0xffffffff. 28621 28622 `Z1' 28623 The integer constant 0xffffffff00000000. 28624 28625 28626_TILEPro--`config/tilepro/constraints.md'_ 28627 28628 `R00' 28629 `R01' 28630 `R02' 28631 `R03' 28632 `R04' 28633 `R05' 28634 `R06' 28635 `R07' 28636 `R08' 28637 `R09' 28638 `R10' 28639 Each of these represents a register constraint for an 28640 individual register, from r0 to r10. 28641 28642 `I' 28643 Signed 8-bit integer constant. 28644 28645 `J' 28646 Signed 16-bit integer constant. 28647 28648 `K' 28649 Nonzero integer constant with low 16 bits zero. 28650 28651 `L' 28652 Integer constant that fits in one signed byte when 28653 incremented by one (-129 ... 126). 28654 28655 `m' 28656 Memory operand. If used together with `<' or `>', the 28657 operand can have postincrement which requires printing with 28658 `%In' and `%in' on TILEPro. For example: 28659 28660 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 28661 28662 `M' 28663 A bit mask suitable for the MM instruction. 28664 28665 `N' 28666 Integer constant that is a byte tiled out four times. 28667 28668 `O' 28669 The integer zero constant. 28670 28671 `P' 28672 Integer constant that is a sign-extended byte tiled out as 28673 two shorts. 28674 28675 `Q' 28676 Integer constant that fits in one signed byte when incremented 28677 (-129 ... 126), but excluding -1. 28678 28679 `T' 28680 A symbolic operand, or a 16-bit fragment of a got, tls, or 28681 pc-relative reference. 28682 28683 `U' 28684 Memory operand except postincrement. This is roughly the 28685 same as `m' when not used together with `<' or `>'. 28686 28687 `W' 28688 A 4-element vector constant with identical elements. 28689 28690 `Y' 28691 A 2-element vector constant with identical elements. 28692 28693 28694_Xtensa--`config/xtensa/constraints.md'_ 28695 28696 `a' 28697 General-purpose 32-bit register 28698 28699 `b' 28700 One-bit boolean register 28701 28702 `A' 28703 MAC16 40-bit accumulator register 28704 28705 `I' 28706 Signed 12-bit integer constant, for use in MOVI instructions 28707 28708 `J' 28709 Signed 8-bit integer constant, for use in ADDI instructions 28710 28711 `K' 28712 Integer constant valid for BccI instructions 28713 28714 `L' 28715 Unsigned constant valid for BccUI instructions 28716 28717 28718 28719 28720File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 28721 287226.43 Controlling Names Used in Assembler Code 28723============================================= 28724 28725You can specify the name to be used in the assembler code for a C 28726function or variable by writing the `asm' (or `__asm__') keyword after 28727the declarator as follows: 28728 28729 int foo asm ("myfoo") = 2; 28730 28731This specifies that the name to be used for the variable `foo' in the 28732assembler code should be `myfoo' rather than the usual `_foo'. 28733 28734 On systems where an underscore is normally prepended to the name of a C 28735function or variable, this feature allows you to define names for the 28736linker that do not start with an underscore. 28737 28738 It does not make sense to use this feature with a non-static local 28739variable since such variables do not have assembler names. If you are 28740trying to put the variable in a particular register, see *note Explicit 28741Reg Vars::. GCC presently accepts such code with a warning, but will 28742probably be changed to issue an error, rather than a warning, in the 28743future. 28744 28745 You cannot use `asm' in this way in a function _definition_; but you 28746can get the same effect by writing a declaration for the function 28747before its definition and putting `asm' there, like this: 28748 28749 extern func () asm ("FUNC"); 28750 28751 func (x, y) 28752 int x, y; 28753 /* ... */ 28754 28755 It is up to you to make sure that the assembler names you choose do not 28756conflict with any other assembler symbols. Also, you must not use a 28757register name; that would produce completely invalid assembler code. 28758GCC does not as yet have the ability to store static variables in 28759registers. Perhaps that will be added. 28760 28761 28762File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 28763 287646.44 Variables in Specified Registers 28765===================================== 28766 28767GNU C allows you to put a few global variables into specified hardware 28768registers. You can also specify the register in which an ordinary 28769register variable should be allocated. 28770 28771 * Global register variables reserve registers throughout the program. 28772 This may be useful in programs such as programming language 28773 interpreters that have a couple of global variables that are 28774 accessed very often. 28775 28776 * Local register variables in specific registers do not reserve the 28777 registers, except at the point where they are used as input or 28778 output operands in an `asm' statement and the `asm' statement 28779 itself is not deleted. The compiler's data flow analysis is 28780 capable of determining where the specified registers contain live 28781 values, and where they are available for other uses. Stores into 28782 local register variables may be deleted when they appear to be 28783 dead according to dataflow analysis. References to local register 28784 variables may be deleted or moved or simplified. 28785 28786 These local variables are sometimes convenient for use with the 28787 extended `asm' feature (*note Extended Asm::), if you want to 28788 write one output of the assembler instruction directly into a 28789 particular register. (This works provided the register you 28790 specify fits the constraints specified for that operand in the 28791 `asm'.) 28792 28793* Menu: 28794 28795* Global Reg Vars:: 28796* Local Reg Vars:: 28797 28798 28799File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 28800 288016.44.1 Defining Global Register Variables 28802----------------------------------------- 28803 28804You can define a global register variable in GNU C like this: 28805 28806 register int *foo asm ("a5"); 28807 28808Here `a5' is the name of the register that should be used. Choose a 28809register that is normally saved and restored by function calls on your 28810machine, so that library routines will not clobber it. 28811 28812 Naturally the register name is cpu-dependent, so you need to 28813conditionalize your program according to cpu type. The register `a5' 28814is a good choice on a 68000 for a variable of pointer type. On 28815machines with register windows, be sure to choose a "global" register 28816that is not affected magically by the function call mechanism. 28817 28818 In addition, different operating systems on the same CPU may differ in 28819how they name the registers; then you need additional conditionals. For 28820example, some 68000 operating systems call this register `%a5'. 28821 28822 Eventually there may be a way of asking the compiler to choose a 28823register automatically, but first we need to figure out how it should 28824choose and how to enable you to guide the choice. No solution is 28825evident. 28826 28827 Defining a global register variable in a certain register reserves that 28828register entirely for this use, at least within the current compilation. 28829The register is not allocated for any other purpose in the functions in 28830the current compilation, and is not saved and restored by these 28831functions. Stores into this register are never deleted even if they 28832appear to be dead, but references may be deleted or moved or simplified. 28833 28834 It is not safe to access the global register variables from signal 28835handlers, or from more than one thread of control, because the system 28836library routines may temporarily use the register for other things 28837(unless you recompile them specially for the task at hand). 28838 28839 It is not safe for one function that uses a global register variable to 28840call another such function `foo' by way of a third function `lose' that 28841is compiled without knowledge of this variable (i.e. in a different 28842source file in which the variable isn't declared). This is because 28843`lose' might save the register and put some other value there. For 28844example, you can't expect a global register variable to be available in 28845the comparison-function that you pass to `qsort', since `qsort' might 28846have put something else in that register. (If you are prepared to 28847recompile `qsort' with the same global register variable, you can solve 28848this problem.) 28849 28850 If you want to recompile `qsort' or other source files that do not 28851actually use your global register variable, so that they do not use that 28852register for any other purpose, then it suffices to specify the compiler 28853option `-ffixed-REG'. You need not actually add a global register 28854declaration to their source code. 28855 28856 A function that can alter the value of a global register variable 28857cannot safely be called from a function compiled without this variable, 28858because it could clobber the value the caller expects to find there on 28859return. Therefore, the function that is the entry point into the part 28860of the program that uses the global register variable must explicitly 28861save and restore the value that belongs to its caller. 28862 28863 On most machines, `longjmp' restores to each global register variable 28864the value it had at the time of the `setjmp'. On some machines, 28865however, `longjmp' does not change the value of global register 28866variables. To be portable, the function that called `setjmp' should 28867make other arrangements to save the values of the global register 28868variables, and to restore them in a `longjmp'. This way, the same 28869thing happens regardless of what `longjmp' does. 28870 28871 All global register variable declarations must precede all function 28872definitions. If such a declaration could appear after function 28873definitions, the declaration would be too late to prevent the register 28874from being used for other purposes in the preceding functions. 28875 28876 Global register variables may not have initial values, because an 28877executable file has no means to supply initial contents for a register. 28878 28879 On the SPARC, there are reports that g3 ... g7 are suitable registers, 28880but certain library functions, such as `getwd', as well as the 28881subroutines for division and remainder, modify g3 and g4. g1 and g2 28882are local temporaries. 28883 28884 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 28885course, it does not do to use more than a few of those. 28886 28887 28888File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 28889 288906.44.2 Specifying Registers for Local Variables 28891----------------------------------------------- 28892 28893You can define a local register variable with a specified register like 28894this: 28895 28896 register int *foo asm ("a5"); 28897 28898Here `a5' is the name of the register that should be used. Note that 28899this is the same syntax used for defining global register variables, 28900but for a local variable it appears within a function. 28901 28902 Naturally the register name is cpu-dependent, but this is not a 28903problem, since specific registers are most often useful with explicit 28904assembler instructions (*note Extended Asm::). Both of these things 28905generally require that you conditionalize your program according to cpu 28906type. 28907 28908 In addition, operating systems on one type of cpu may differ in how 28909they name the registers; then you need additional conditionals. For 28910example, some 68000 operating systems call this register `%a5'. 28911 28912 Defining such a register variable does not reserve the register; it 28913remains available for other uses in places where flow control determines 28914the variable's value is not live. 28915 28916 This option does not guarantee that GCC generates code that has this 28917variable in the register you specify at all times. You may not code an 28918explicit reference to this register in the _assembler instruction 28919template_ part of an `asm' statement and assume it always refers to 28920this variable. However, using the variable as an `asm' _operand_ 28921guarantees that the specified register is used for the operand. 28922 28923 Stores into local register variables may be deleted when they appear 28924to be dead according to dataflow analysis. References to local 28925register variables may be deleted or moved or simplified. 28926 28927 As for global register variables, it's recommended that you choose a 28928register that is normally saved and restored by function calls on your 28929machine, so that library routines will not clobber it. A common 28930pitfall is to initialize multiple call-clobbered registers with 28931arbitrary expressions, where a function call or library call for an 28932arithmetic operator overwrites a register value from a previous 28933assignment, for example `r0' below: 28934 register int *p1 asm ("r0") = ...; 28935 register int *p2 asm ("r1") = ...; 28936 28937In those cases, a solution is to use a temporary variable for each 28938arbitrary expression. *Note Example of asm with clobbered asm reg::. 28939 28940 28941File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 28942 289436.45 Alternate Keywords 28944======================= 28945 28946`-ansi' and the various `-std' options disable certain keywords. This 28947causes trouble when you want to use GNU C extensions, or a 28948general-purpose header file that should be usable by all programs, 28949including ISO C programs. The keywords `asm', `typeof' and `inline' 28950are not available in programs compiled with `-ansi' or `-std' (although 28951`inline' can be used in a program compiled with `-std=c99' or 28952`-std=c11'). The ISO C99 keyword `restrict' is only available when 28953`-std=gnu99' (which will eventually be the default) or `-std=c99' (or 28954the equivalent `-std=iso9899:1999'), or an option for a later standard 28955version, is used. 28956 28957 The way to solve these problems is to put `__' at the beginning and 28958end of each problematical keyword. For example, use `__asm__' instead 28959of `asm', and `__inline__' instead of `inline'. 28960 28961 Other C compilers won't accept these alternative keywords; if you want 28962to compile with another compiler, you can define the alternate keywords 28963as macros to replace them with the customary keywords. It looks like 28964this: 28965 28966 #ifndef __GNUC__ 28967 #define __asm__ asm 28968 #endif 28969 28970 `-pedantic' and other options cause warnings for many GNU C extensions. 28971You can prevent such warnings within one expression by writing 28972`__extension__' before the expression. `__extension__' has no effect 28973aside from this. 28974 28975 28976File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 28977 289786.46 Incomplete `enum' Types 28979============================ 28980 28981You can define an `enum' tag without specifying its possible values. 28982This results in an incomplete type, much like what you get if you write 28983`struct foo' without describing the elements. A later declaration that 28984does specify the possible values completes the type. 28985 28986 You can't allocate variables or storage using the type while it is 28987incomplete. However, you can work with pointers to that type. 28988 28989 This extension may not be very useful, but it makes the handling of 28990`enum' more consistent with the way `struct' and `union' are handled. 28991 28992 This extension is not supported by GNU C++. 28993 28994 28995File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 28996 289976.47 Function Names as Strings 28998============================== 28999 29000GCC provides three magic variables that hold the name of the current 29001function, as a string. The first of these is `__func__', which is part 29002of the C99 standard: 29003 29004 The identifier `__func__' is implicitly declared by the translator as 29005if, immediately following the opening brace of each function 29006definition, the declaration 29007 29008 static const char __func__[] = "function-name"; 29009 29010appeared, where function-name is the name of the lexically-enclosing 29011function. This name is the unadorned name of the function. 29012 29013 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 29014recognize only this name. However, it is not standardized. For 29015maximum portability, we recommend you use `__func__', but provide a 29016fallback definition with the preprocessor: 29017 29018 #if __STDC_VERSION__ < 199901L 29019 # if __GNUC__ >= 2 29020 # define __func__ __FUNCTION__ 29021 # else 29022 # define __func__ "<unknown>" 29023 # endif 29024 #endif 29025 29026 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 29027However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 29028the function as well as its bare name. For example, this program: 29029 29030 extern "C" { 29031 extern int printf (char *, ...); 29032 } 29033 29034 class a { 29035 public: 29036 void sub (int i) 29037 { 29038 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 29039 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 29040 } 29041 }; 29042 29043 int 29044 main (void) 29045 { 29046 a ax; 29047 ax.sub (0); 29048 return 0; 29049 } 29050 29051gives this output: 29052 29053 __FUNCTION__ = sub 29054 __PRETTY_FUNCTION__ = void a::sub(int) 29055 29056 These identifiers are not preprocessor macros. In GCC 3.3 and 29057earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 29058treated as string literals; they could be used to initialize `char' 29059arrays, and they could be concatenated with other string literals. GCC 290603.4 and later treat them as variables, like `__func__'. In C++, 29061`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 29062 29063 29064File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 29065 290666.48 Getting the Return or Frame Address of a Function 29067====================================================== 29068 29069These functions may be used to get information about the callers of a 29070function. 29071 29072 -- Built-in Function: void * __builtin_return_address (unsigned int 29073 LEVEL) 29074 This function returns the return address of the current function, 29075 or of one of its callers. The LEVEL argument is number of frames 29076 to scan up the call stack. A value of `0' yields the return 29077 address of the current function, a value of `1' yields the return 29078 address of the caller of the current function, and so forth. When 29079 inlining the expected behavior is that the function returns the 29080 address of the function that is returned to. To work around this 29081 behavior use the `noinline' function attribute. 29082 29083 The LEVEL argument must be a constant integer. 29084 29085 On some machines it may be impossible to determine the return 29086 address of any function other than the current one; in such cases, 29087 or when the top of the stack has been reached, this function 29088 returns `0' or a random value. In addition, 29089 `__builtin_frame_address' may be used to determine if the top of 29090 the stack has been reached. 29091 29092 Additional post-processing of the returned value may be needed, see 29093 `__builtin_extract_return_addr'. 29094 29095 This function should only be used with a nonzero argument for 29096 debugging purposes. 29097 29098 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR) 29099 The address as returned by `__builtin_return_address' may have to 29100 be fed through this function to get the actual encoded address. 29101 For example, on the 31-bit S/390 platform the highest bit has to 29102 be masked out, or on SPARC platforms an offset has to be added for 29103 the true next instruction to be executed. 29104 29105 If no fixup is needed, this function simply passes through ADDR. 29106 29107 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR) 29108 This function does the reverse of `__builtin_extract_return_addr'. 29109 29110 -- Built-in Function: void * __builtin_frame_address (unsigned int 29111 LEVEL) 29112 This function is similar to `__builtin_return_address', but it 29113 returns the address of the function frame rather than the return 29114 address of the function. Calling `__builtin_frame_address' with a 29115 value of `0' yields the frame address of the current function, a 29116 value of `1' yields the frame address of the caller of the current 29117 function, and so forth. 29118 29119 The frame is the area on the stack that holds local variables and 29120 saved registers. The frame address is normally the address of the 29121 first word pushed on to the stack by the function. However, the 29122 exact definition depends upon the processor and the calling 29123 convention. If the processor has a dedicated frame pointer 29124 register, and the function has a frame, then 29125 `__builtin_frame_address' returns the value of the frame pointer 29126 register. 29127 29128 On some machines it may be impossible to determine the frame 29129 address of any function other than the current one; in such cases, 29130 or when the top of the stack has been reached, this function 29131 returns `0' if the first frame pointer is properly initialized by 29132 the startup code. 29133 29134 This function should only be used with a nonzero argument for 29135 debugging purposes. 29136 29137 29138File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 29139 291406.49 Using Vector Instructions through Built-in Functions 29141========================================================= 29142 29143On some targets, the instruction set contains SIMD vector instructions 29144which operate on multiple values contained in one large register at the 29145same time. For example, on the i386 the MMX, 3DNow! and SSE extensions 29146can be used this way. 29147 29148 The first step in using these extensions is to provide the necessary 29149data types. This should be done using an appropriate `typedef': 29150 29151 typedef int v4si __attribute__ ((vector_size (16))); 29152 29153The `int' type specifies the base type, while the attribute specifies 29154the vector size for the variable, measured in bytes. For example, the 29155declaration above causes the compiler to set the mode for the `v4si' 29156type to be 16 bytes wide and divided into `int' sized units. For a 2915732-bit `int' this means a vector of 4 units of 4 bytes, and the 29158corresponding mode of `foo' is V4SI. 29159 29160 The `vector_size' attribute is only applicable to integral and float 29161scalars, although arrays, pointers, and function return values are 29162allowed in conjunction with this construct. Only sizes that are a power 29163of two are currently allowed. 29164 29165 All the basic integer types can be used as base types, both as signed 29166and as unsigned: `char', `short', `int', `long', `long long'. In 29167addition, `float' and `double' can be used to build floating-point 29168vector types. 29169 29170 Specifying a combination that is not valid for the current architecture 29171causes GCC to synthesize the instructions using a narrower mode. For 29172example, if you specify a variable of type `V4SI' and your architecture 29173does not allow for this specific SIMD type, GCC produces code that uses 291744 `SIs'. 29175 29176 The types defined in this manner can be used with a subset of normal C 29177operations. Currently, GCC allows using the following operators on 29178these types: `+, -, *, /, unary minus, ^, |, &, ~, %'. 29179 29180 The operations behave like C++ `valarrays'. Addition is defined as 29181the addition of the corresponding elements of the operands. For 29182example, in the code below, each of the 4 elements in A is added to the 29183corresponding 4 elements in B and the resulting vector is stored in C. 29184 29185 typedef int v4si __attribute__ ((vector_size (16))); 29186 29187 v4si a, b, c; 29188 29189 c = a + b; 29190 29191 Subtraction, multiplication, division, and the logical operations 29192operate in a similar manner. Likewise, the result of using the unary 29193minus or complement operators on a vector type is a vector whose 29194elements are the negative or complemented values of the corresponding 29195elements in the operand. 29196 29197 It is possible to use shifting operators `<<', `>>' on integer-type 29198vectors. The operation is defined as following: `{a0, a1, ..., an} >> 29199{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector 29200operands must have the same number of elements. 29201 29202 For convenience, it is allowed to use a binary vector operation where 29203one operand is a scalar. In that case the compiler transforms the 29204scalar operand into a vector where each element is the scalar from the 29205operation. The transformation happens only if the scalar could be 29206safely converted to the vector-element type. Consider the following 29207code. 29208 29209 typedef int v4si __attribute__ ((vector_size (16))); 29210 29211 v4si a, b, c; 29212 long l; 29213 29214 a = b + 1; /* a = b + {1,1,1,1}; */ 29215 a = 2 * b; /* a = {2,2,2,2} * b; */ 29216 29217 a = l + a; /* Error, cannot convert long to int. */ 29218 29219 Vectors can be subscripted as if the vector were an array with the 29220same number of elements and base type. Out of bound accesses invoke 29221undefined behavior at run time. Warnings for out of bound accesses for 29222vector subscription can be enabled with `-Warray-bounds'. 29223 29224 Vector comparison is supported with standard comparison operators: 29225`==, !=, <, <=, >, >='. Comparison operands can be vector expressions 29226of integer-type or real-type. Comparison between integer-type vectors 29227and real-type vectors are not supported. The result of the comparison 29228is a vector of the same width and number of elements as the comparison 29229operands with a signed integral element type. 29230 29231 Vectors are compared element-wise producing 0 when comparison is false 29232and -1 (constant of the appropriate type where all bits are set) 29233otherwise. Consider the following example. 29234 29235 typedef int v4si __attribute__ ((vector_size (16))); 29236 29237 v4si a = {1,2,3,4}; 29238 v4si b = {3,2,1,4}; 29239 v4si c; 29240 29241 c = a > b; /* The result would be {0, 0,-1, 0} */ 29242 c = a == b; /* The result would be {0,-1, 0,-1} */ 29243 29244 Vector shuffling is available using functions `__builtin_shuffle (vec, 29245mask)' and `__builtin_shuffle (vec0, vec1, mask)'. Both functions 29246construct a permutation of elements from one or two vectors and return 29247a vector of the same type as the input vector(s). The MASK is an 29248integral vector with the same width (W) and element count (N) as the 29249output vector. 29250 29251 The elements of the input vectors are numbered in memory ordering of 29252VEC0 beginning at 0 and VEC1 beginning at N. The elements of MASK are 29253considered modulo N in the single-operand case and modulo 2*N in the 29254two-operand case. 29255 29256 Consider the following example, 29257 29258 typedef int v4si __attribute__ ((vector_size (16))); 29259 29260 v4si a = {1,2,3,4}; 29261 v4si b = {5,6,7,8}; 29262 v4si mask1 = {0,1,1,3}; 29263 v4si mask2 = {0,4,2,5}; 29264 v4si res; 29265 29266 res = __builtin_shuffle (a, mask1); /* res is {1,2,2,4} */ 29267 res = __builtin_shuffle (a, b, mask2); /* res is {1,5,3,6} */ 29268 29269 Note that `__builtin_shuffle' is intentionally semantically compatible 29270with the OpenCL `shuffle' and `shuffle2' functions. 29271 29272 You can declare variables and use them in function calls and returns, 29273as well as in assignments and some casts. You can specify a vector 29274type as a return type for a function. Vector types can also be used as 29275function arguments. It is possible to cast from one vector type to 29276another, provided they are of the same size (in fact, you can also cast 29277vectors to and from other datatypes of the same size). 29278 29279 You cannot operate between vectors of different lengths or different 29280signedness without a cast. 29281 29282 29283File: gcc.info, Node: Offsetof, Next: __sync Builtins, Prev: Vector Extensions, Up: C Extensions 29284 292856.50 Offsetof 29286============= 29287 29288GCC implements for both C and C++ a syntactic extension to implement 29289the `offsetof' macro. 29290 29291 primary: 29292 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 29293 29294 offsetof_member_designator: 29295 `identifier' 29296 | offsetof_member_designator "." `identifier' 29297 | offsetof_member_designator "[" `expr' "]" 29298 29299 This extension is sufficient such that 29300 29301 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 29302 29303is a suitable definition of the `offsetof' macro. In C++, TYPE may be 29304dependent. In either case, MEMBER may consist of a single identifier, 29305or a sequence of member accesses and array references. 29306 29307 29308File: gcc.info, Node: __sync Builtins, Next: __atomic Builtins, Prev: Offsetof, Up: C Extensions 29309 293106.51 Legacy __sync Built-in Functions for Atomic Memory Access 29311============================================================== 29312 29313The following built-in functions are intended to be compatible with 29314those described in the `Intel Itanium Processor-specific Application 29315Binary Interface', section 7.4. As such, they depart from the normal 29316GCC practice of using the `__builtin_' prefix, and further that they 29317are overloaded such that they work on multiple types. 29318 29319 The definition given in the Intel documentation allows only for the 29320use of the types `int', `long', `long long' as well as their unsigned 29321counterparts. GCC allows any integral scalar or pointer type that is 293221, 2, 4 or 8 bytes in length. 29323 29324 Not all operations are supported by all target processors. If a 29325particular operation cannot be implemented on the target processor, a 29326warning is generated and a call an external function is generated. The 29327external function carries the same name as the built-in version, with 29328an additional suffix `_N' where N is the size of the data type. 29329 29330 In most cases, these built-in functions are considered a "full 29331barrier". That is, no memory operand is moved across the operation, 29332either forward or backward. Further, instructions are issued as 29333necessary to prevent the processor from speculating loads across the 29334operation and from queuing stores after the operation. 29335 29336 All of the routines are described in the Intel documentation to take 29337"an optional list of variables protected by the memory barrier". It's 29338not clear what is meant by that; it could mean that _only_ the 29339following variables are protected, or it could mean that these variables 29340should in addition be protected. At present GCC ignores this list and 29341protects all variables that are globally accessible. If in the future 29342we make some use of this list, an empty list will continue to mean all 29343globally accessible variables. 29344 29345`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 29346`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 29347`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 29348`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 29349`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 29350`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 29351 These built-in functions perform the operation suggested by the 29352 name, and returns the value that had previously been in memory. 29353 That is, 29354 29355 { tmp = *ptr; *ptr OP= value; return tmp; } 29356 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 29357 29358 _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' as 29359 `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & value'. 29360 29361`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 29362`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 29363`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 29364`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 29365`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 29366`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 29367 These built-in functions perform the operation suggested by the 29368 name, and return the new value. That is, 29369 29370 { *ptr OP= value; return *ptr; } 29371 { *ptr = ~(*ptr & value); return *ptr; } // nand 29372 29373 _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' as 29374 `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & value'. 29375 29376`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 29377`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 29378 These built-in functions perform an atomic compare and swap. That 29379 is, if the current value of `*PTR' is OLDVAL, then write NEWVAL 29380 into `*PTR'. 29381 29382 The "bool" version returns true if the comparison is successful and 29383 NEWVAL is written. The "val" version returns the contents of 29384 `*PTR' before the operation. 29385 29386`__sync_synchronize (...)' 29387 This built-in function issues a full memory barrier. 29388 29389`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 29390 This built-in function, as described by Intel, is not a 29391 traditional test-and-set operation, but rather an atomic exchange 29392 operation. It writes VALUE into `*PTR', and returns the previous 29393 contents of `*PTR'. 29394 29395 Many targets have only minimal support for such locks, and do not 29396 support a full exchange operation. In this case, a target may 29397 support reduced functionality here by which the _only_ valid value 29398 to store is the immediate constant 1. The exact value actually 29399 stored in `*PTR' is implementation defined. 29400 29401 This built-in function is not a full barrier, but rather an 29402 "acquire barrier". This means that references after the operation 29403 cannot move to (or be speculated to) before the operation, but 29404 previous memory stores may not be globally visible yet, and 29405 previous memory loads may not yet be satisfied. 29406 29407`void __sync_lock_release (TYPE *ptr, ...)' 29408 This built-in function releases the lock acquired by 29409 `__sync_lock_test_and_set'. Normally this means writing the 29410 constant 0 to `*PTR'. 29411 29412 This built-in function is not a full barrier, but rather a 29413 "release barrier". This means that all previous memory stores are 29414 globally visible, and all previous memory loads have been 29415 satisfied, but following memory reads are not prevented from being 29416 speculated to before the barrier. 29417 29418 29419File: gcc.info, Node: __atomic Builtins, Next: x86 specific memory model extensions for transactional memory, Prev: __sync Builtins, Up: C Extensions 29420 294216.52 Built-in functions for memory model aware atomic operations 29422================================================================ 29423 29424The following built-in functions approximately match the requirements 29425for C++11 memory model. Many are similar to the `__sync' prefixed 29426built-in functions, but all also have a memory model parameter. These 29427are all identified by being prefixed with `__atomic', and most are 29428overloaded such that they work with multiple types. 29429 29430 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8 29431bytes in length. 16-byte integral types are also allowed if `__int128' 29432(*note __int128::) is supported by the architecture. 29433 29434 Target architectures are encouraged to provide their own patterns for 29435each of these built-in functions. If no target is provided, the 29436original non-memory model set of `__sync' atomic built-in functions are 29437utilized, along with any required synchronization fences surrounding it 29438in order to achieve the proper behavior. Execution in this case is 29439subject to the same restrictions as those built-in functions. 29440 29441 If there is no pattern or mechanism to provide a lock free instruction 29442sequence, a call is made to an external routine with the same parameters 29443to be resolved at run time. 29444 29445 The four non-arithmetic functions (load, store, exchange, and 29446compare_exchange) all have a generic version as well. This generic 29447version works on any data type. If the data type size maps to one of 29448the integral sizes that may have lock free support, the generic version 29449utilizes the lock free built-in function. Otherwise an external call 29450is left to be resolved at run time. This external call is the same 29451format with the addition of a `size_t' parameter inserted as the first 29452parameter indicating the size of the object being pointed to. All 29453objects must be the same size. 29454 29455 There are 6 different memory models that can be specified. These map 29456to the same names in the C++11 standard. Refer there or to the GCC 29457wiki on atomic synchronization 29458(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed 29459definitions. These memory models integrate both barriers to code 29460motion as well as synchronization requirements with other threads. 29461These are listed in approximately ascending order of strength. It is 29462also possible to use target specific flags for memory model flags, like 29463Hardware Lock Elision. 29464 29465`__ATOMIC_RELAXED' 29466 No barriers or synchronization. 29467 29468`__ATOMIC_CONSUME' 29469 Data dependency only for both barrier and synchronization with 29470 another thread. 29471 29472`__ATOMIC_ACQUIRE' 29473 Barrier to hoisting of code and synchronizes with release (or 29474 stronger) semantic stores from another thread. 29475 29476`__ATOMIC_RELEASE' 29477 Barrier to sinking of code and synchronizes with acquire (or 29478 stronger) semantic loads from another thread. 29479 29480`__ATOMIC_ACQ_REL' 29481 Full barrier in both directions and synchronizes with acquire 29482 loads and release stores in another thread. 29483 29484`__ATOMIC_SEQ_CST' 29485 Full barrier in both directions and synchronizes with acquire 29486 loads and release stores in all threads. 29487 29488 When implementing patterns for these built-in functions, the memory 29489model parameter can be ignored as long as the pattern implements the 29490most restrictive `__ATOMIC_SEQ_CST' model. Any of the other memory 29491models execute correctly with this memory model but they may not 29492execute as efficiently as they could with a more appropriate 29493implementation of the relaxed requirements. 29494 29495 Note that the C++11 standard allows for the memory model parameter to 29496be determined at run time rather than at compile time. These built-in 29497functions map any run-time value to `__ATOMIC_SEQ_CST' rather than 29498invoke a runtime library call or inline a switch statement. This is 29499standard compliant, safe, and the simplest approach for now. 29500 29501 The memory model parameter is a signed int, but only the lower 8 bits 29502are reserved for the memory model. The remainder of the signed int is 29503reserved for future use and should be 0. Use of the predefined atomic 29504values ensures proper usage. 29505 29506 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel) 29507 This built-in function implements an atomic load operation. It 29508 returns the contents of `*PTR'. 29509 29510 The valid memory model variants are `__ATOMIC_RELAXED', 29511 `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', and `__ATOMIC_CONSUME'. 29512 29513 29514 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int 29515 memmodel) 29516 This is the generic version of an atomic load. It returns the 29517 contents of `*PTR' in `*RET'. 29518 29519 29520 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int 29521 memmodel) 29522 This built-in function implements an atomic store operation. It 29523 writes `VAL' into `*PTR'. 29524 29525 The valid memory model variants are `__ATOMIC_RELAXED', 29526 `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'. 29527 29528 29529 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int 29530 memmodel) 29531 This is the generic version of an atomic store. It stores the 29532 value of `*VAL' into `*PTR'. 29533 29534 29535 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val, 29536 int memmodel) 29537 This built-in function implements an atomic exchange operation. 29538 It writes VAL into `*PTR', and returns the previous contents of 29539 `*PTR'. 29540 29541 The valid memory model variants are `__ATOMIC_RELAXED', 29542 `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', `__ATOMIC_RELEASE', and 29543 `__ATOMIC_ACQ_REL'. 29544 29545 29546 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val, 29547 TYPE *ret, int memmodel) 29548 This is the generic version of an atomic exchange. It stores the 29549 contents of `*VAL' into `*PTR'. The original value of `*PTR' is 29550 copied into `*RET'. 29551 29552 29553 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, 29554 TYPE *expected, TYPE desired, bool weak, int 29555 success_memmodel, int failure_memmodel) 29556 This built-in function implements an atomic compare and exchange 29557 operation. This compares the contents of `*PTR' with the contents 29558 of `*EXPECTED' and if equal, writes DESIRED into `*PTR'. If they 29559 are not equal, the current contents of `*PTR' is written into 29560 `*EXPECTED'. WEAK is true for weak compare_exchange, and false 29561 for the strong variation. Many targets only offer the strong 29562 variation and ignore the parameter. When in doubt, use the strong 29563 variation. 29564 29565 True is returned if DESIRED is written into `*PTR' and the 29566 execution is considered to conform to the memory model specified 29567 by SUCCESS_MEMMODEL. There are no restrictions on what memory 29568 model can be used here. 29569 29570 False is returned otherwise, and the execution is considered to 29571 conform to FAILURE_MEMMODEL. This memory model cannot be 29572 `__ATOMIC_RELEASE' nor `__ATOMIC_ACQ_REL'. It also cannot be a 29573 stronger model than that specified by SUCCESS_MEMMODEL. 29574 29575 29576 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE 29577 *expected, TYPE *desired, bool weak, int success_memmodel, 29578 int failure_memmodel) 29579 This built-in function implements the generic version of 29580 `__atomic_compare_exchange'. The function is virtually identical 29581 to `__atomic_compare_exchange_n', except the desired value is also 29582 a pointer. 29583 29584 29585 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, 29586 int memmodel) 29587 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, 29588 int memmodel) 29589 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, 29590 int memmodel) 29591 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, 29592 int memmodel) 29593 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int 29594 memmodel) 29595 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val, 29596 int memmodel) 29597 These built-in functions perform the operation suggested by the 29598 name, and return the result of the operation. That is, 29599 29600 { *ptr OP= val; return *ptr; } 29601 29602 All memory models are valid. 29603 29604 29605 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, 29606 int memmodel) 29607 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, 29608 int memmodel) 29609 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, 29610 int memmodel) 29611 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, 29612 int memmodel) 29613 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int 29614 memmodel) 29615 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val, 29616 int memmodel) 29617 These built-in functions perform the operation suggested by the 29618 name, and return the value that had previously been in `*PTR'. 29619 That is, 29620 29621 { tmp = *ptr; *ptr OP= val; return tmp; } 29622 29623 All memory models are valid. 29624 29625 29626 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int 29627 memmodel) 29628 This built-in function performs an atomic test-and-set operation on 29629 the byte at `*PTR'. The byte is set to some implementation 29630 defined nonzero "set" value and the return value is `true' if and 29631 only if the previous contents were "set". It should be only used 29632 for operands of type `bool' or `char'. For other types only part 29633 of the value may be set. 29634 29635 All memory models are valid. 29636 29637 29638 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel) 29639 This built-in function performs an atomic clear operation on 29640 `*PTR'. After the operation, `*PTR' contains 0. It should be 29641 only used for operands of type `bool' or `char' and in conjunction 29642 with `__atomic_test_and_set'. For other types it may only clear 29643 partially. If the type is not `bool' prefer using `__atomic_store'. 29644 29645 The valid memory model variants are `__ATOMIC_RELAXED', 29646 `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'. 29647 29648 29649 -- Built-in Function: void __atomic_thread_fence (int memmodel) 29650 This built-in function acts as a synchronization fence between 29651 threads based on the specified memory model. 29652 29653 All memory orders are valid. 29654 29655 29656 -- Built-in Function: void __atomic_signal_fence (int memmodel) 29657 This built-in function acts as a synchronization fence between a 29658 thread and signal handlers based in the same thread. 29659 29660 All memory orders are valid. 29661 29662 29663 -- Built-in Function: bool __atomic_always_lock_free (size_t size, 29664 void *ptr) 29665 This built-in function returns true if objects of SIZE bytes always 29666 generate lock free atomic instructions for the target architecture. 29667 SIZE must resolve to a compile-time constant and the result also 29668 resolves to a compile-time constant. 29669 29670 PTR is an optional pointer to the object that may be used to 29671 determine alignment. A value of 0 indicates typical alignment 29672 should be used. The compiler may also ignore this parameter. 29673 29674 if (_atomic_always_lock_free (sizeof (long long), 0)) 29675 29676 29677 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void 29678 *ptr) 29679 This built-in function returns true if objects of SIZE bytes always 29680 generate lock free atomic instructions for the target 29681 architecture. If it is not known to be lock free a call is made 29682 to a runtime routine named `__atomic_is_lock_free'. 29683 29684 PTR is an optional pointer to the object that may be used to 29685 determine alignment. A value of 0 indicates typical alignment 29686 should be used. The compiler may also ignore this parameter. 29687 29688 29689File: gcc.info, Node: x86 specific memory model extensions for transactional memory, Next: Object Size Checking, Prev: __atomic Builtins, Up: C Extensions 29690 296916.53 x86 specific memory model extensions for transactional memory 29692================================================================== 29693 29694The i386 architecture supports additional memory ordering flags to mark 29695lock critical sections for hardware lock elision. These must be 29696specified in addition to an existing memory model to atomic intrinsics. 29697 29698`__ATOMIC_HLE_ACQUIRE' 29699 Start lock elision on a lock variable. Memory model must be 29700 `__ATOMIC_ACQUIRE' or stronger. 29701 29702`__ATOMIC_HLE_RELEASE' 29703 End lock elision on a lock variable. Memory model must be 29704 `__ATOMIC_RELEASE' or stronger. 29705 29706 When a lock acquire fails it is required for good performance to abort 29707the transaction quickly. This can be done with a `_mm_pause' 29708 29709 #include <immintrin.h> // For _mm_pause 29710 29711 int lockvar; 29712 29713 /* Acquire lock with lock elision */ 29714 while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE)) 29715 _mm_pause(); /* Abort failed transaction */ 29716 ... 29717 /* Free lock with lock elision */ 29718 __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE); 29719 29720 29721File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: x86 specific memory model extensions for transactional memory, Up: C Extensions 29722 297236.54 Object Size Checking Built-in Functions 29724============================================ 29725 29726GCC implements a limited buffer overflow protection mechanism that can 29727prevent some buffer overflow attacks. 29728 29729 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 29730 TYPE) 29731 is a built-in construct that returns a constant number of bytes 29732 from PTR to the end of the object PTR pointer points to (if known 29733 at compile time). `__builtin_object_size' never evaluates its 29734 arguments for side-effects. If there are any side-effects in 29735 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 29736 for TYPE 2 or 3. If there are multiple objects PTR can point to 29737 and all of them are known at compile time, the returned number is 29738 the maximum of remaining byte counts in those objects if TYPE & 2 29739 is 0 and minimum if nonzero. If it is not possible to determine 29740 which objects PTR points to at compile time, 29741 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 29742 1 and `(size_t) 0' for TYPE 2 or 3. 29743 29744 TYPE is an integer constant from 0 to 3. If the least significant 29745 bit is clear, objects are whole variables, if it is set, a closest 29746 surrounding subobject is considered the object a pointer points to. 29747 The second bit determines if maximum or minimum of remaining bytes 29748 is computed. 29749 29750 struct V { char buf1[10]; int b; char buf2[10]; } var; 29751 char *p = &var.buf1[1], *q = &var.b; 29752 29753 /* Here the object p points to is var. */ 29754 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 29755 /* The subobject p points to is var.buf1. */ 29756 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 29757 /* The object q points to is var. */ 29758 assert (__builtin_object_size (q, 0) 29759 == (char *) (&var + 1) - (char *) &var.b); 29760 /* The subobject q points to is var.b. */ 29761 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 29762 29763 There are built-in functions added for many common string operation 29764functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is 29765provided. This built-in has an additional last argument, which is the 29766number of bytes remaining in object the DEST argument points to or 29767`(size_t) -1' if the size is not known. 29768 29769 The built-in functions are optimized into the normal string functions 29770like `memcpy' if the last argument is `(size_t) -1' or if it is known 29771at compile time that the destination object will not be overflown. If 29772the compiler can determine at compile time the object will be always 29773overflown, it issues a warning. 29774 29775 The intended use can be e.g. 29776 29777 #undef memcpy 29778 #define bos0(dest) __builtin_object_size (dest, 0) 29779 #define memcpy(dest, src, n) \ 29780 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 29781 29782 char *volatile p; 29783 char buf[10]; 29784 /* It is unknown what object p points to, so this is optimized 29785 into plain memcpy - no checking is possible. */ 29786 memcpy (p, "abcde", n); 29787 /* Destination is known and length too. It is known at compile 29788 time there will be no overflow. */ 29789 memcpy (&buf[5], "abcde", 5); 29790 /* Destination is known, but the length is not known at compile time. 29791 This will result in __memcpy_chk call that can check for overflow 29792 at run time. */ 29793 memcpy (&buf[5], "abcde", n); 29794 /* Destination is known and it is known at compile time there will 29795 be overflow. There will be a warning and __memcpy_chk call that 29796 will abort the program at run time. */ 29797 memcpy (&buf[6], "abcde", 5); 29798 29799 Such built-in functions are provided for `memcpy', `mempcpy', 29800`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 29801`strncat'. 29802 29803 There are also checking built-in functions for formatted output 29804functions. 29805 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 29806 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 29807 const char *fmt, ...); 29808 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 29809 va_list ap); 29810 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 29811 const char *fmt, va_list ap); 29812 29813 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 29814functions and can contain implementation specific flags on what 29815additional security measures the checking function might take, such as 29816handling `%n' differently. 29817 29818 The OS argument is the object size S points to, like in the other 29819built-in functions. There is a small difference in the behavior 29820though, if OS is `(size_t) -1', the built-in functions are optimized 29821into the non-checking functions only if FLAG is 0, otherwise the 29822checking function is called with OS argument set to `(size_t) -1'. 29823 29824 In addition to this, there are checking built-in functions 29825`__builtin___printf_chk', `__builtin___vprintf_chk', 29826`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 29827just one additional argument, FLAG, right before format string FMT. If 29828the compiler is able to optimize them to `fputc' etc. functions, it 29829does, otherwise the checking function is called and the FLAG argument 29830passed to it. 29831 29832 29833File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 29834 298356.55 Other Built-in Functions Provided by GCC 29836============================================= 29837 29838GCC provides a large number of built-in functions other than the ones 29839mentioned above. Some of these are for internal use in the processing 29840of exceptions or variable-length argument lists and are not documented 29841here because they may change from time to time; we do not recommend 29842general use of these functions. 29843 29844 The remaining functions are provided for optimization purposes. 29845 29846 GCC includes built-in versions of many of the functions in the standard 29847C library. The versions prefixed with `__builtin_' are always treated 29848as having the same meaning as the C library function even if you 29849specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 29850these functions are only optimized in certain cases; if they are not 29851optimized in a particular case, a call to the library function is 29852emitted. 29853 29854 Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or 29855`-std=c11'), the functions `_exit', `alloca', `bcmp', `bzero', 29856`dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l', 29857`exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked', 29858`gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r', 29859`gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', 29860`jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', 29861`pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf', 29862`scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32', 29863`signbitd64', `signbitd128', `significandf', `significandl', 29864`significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', 29865`strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii', 29866`y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be 29867handled as built-in functions. All these functions have corresponding 29868versions prefixed with `__builtin_', which may be used even in strict 29869C90 mode. 29870 29871 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 29872`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 29873`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 29874`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 29875`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 29876`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 29877`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 29878`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 29879`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 29880`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 29881`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 29882`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 29883`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 29884`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 29885`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 29886`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 29887`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 29888`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 29889`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 29890`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 29891`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 29892`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 29893`remainderf', `remainderl', `remainder', `remquof', `remquol', 29894`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 29895`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 29896`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 29897`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 29898functions except in strict ISO C90 mode (`-ansi' or `-std=c90'). 29899 29900 There are also built-in versions of the ISO C99 functions `acosf', 29901`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 29902`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 29903`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 29904`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 29905`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 29906`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 29907recognized in any mode since ISO C90 reserves these names for the 29908purpose to which ISO C99 puts them. All these functions have 29909corresponding versions prefixed with `__builtin_'. 29910 29911 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 29912`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 29913`iswxdigit', `towlower' and `towupper' are handled as built-in functions 29914except in strict ISO C90 mode (`-ansi' or `-std=c90'). 29915 29916 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 29917`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 29918`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 29919`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 29920`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 29921`log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow', 29922`printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf', 29923`sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', 29924`strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk', 29925`strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and 29926`vsprintf' are all recognized as built-in functions unless 29927`-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified 29928for an individual function). All of these functions have corresponding 29929versions prefixed with `__builtin_'. 29930 29931 GCC provides built-in versions of the ISO C99 floating-point comparison 29932macros that avoid raising exceptions for unordered operands. They have 29933the same names as the standard macros ( `isgreater', `isgreaterequal', 29934`isless', `islessequal', `islessgreater', and `isunordered') , with 29935`__builtin_' prefixed. We intend for a library implementor to be able 29936to simply `#define' each standard macro to its built-in equivalent. In 29937the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign' 29938and `isnormal' built-ins used with `__builtin_' prefixed. The `isinf' 29939and `isnan' built-in functions appear both with and without the 29940`__builtin_' prefix. 29941 29942 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 29943 You can use the built-in function `__builtin_types_compatible_p' to 29944 determine whether two types are the same. 29945 29946 This built-in function returns 1 if the unqualified versions of the 29947 types TYPE1 and TYPE2 (which are types, not expressions) are 29948 compatible, 0 otherwise. The result of this built-in function can 29949 be used in integer constant expressions. 29950 29951 This built-in function ignores top level qualifiers (e.g., `const', 29952 `volatile'). For example, `int' is equivalent to `const int'. 29953 29954 The type `int[]' and `int[5]' are compatible. On the other hand, 29955 `int' and `char *' are not compatible, even if the size of their 29956 types, on the particular architecture are the same. Also, the 29957 amount of pointer indirection is taken into account when 29958 determining similarity. Consequently, `short *' is not similar to 29959 `short **'. Furthermore, two types that are typedefed are 29960 considered compatible if their underlying types are compatible. 29961 29962 An `enum' type is not considered to be compatible with another 29963 `enum' type even if both are compatible with the same integer 29964 type; this is what the C standard specifies. For example, `enum 29965 {foo, bar}' is not similar to `enum {hot, dog}'. 29966 29967 You typically use this function in code whose execution varies 29968 depending on the arguments' types. For example: 29969 29970 #define foo(x) \ 29971 ({ \ 29972 typeof (x) tmp = (x); \ 29973 if (__builtin_types_compatible_p (typeof (x), long double)) \ 29974 tmp = foo_long_double (tmp); \ 29975 else if (__builtin_types_compatible_p (typeof (x), double)) \ 29976 tmp = foo_double (tmp); \ 29977 else if (__builtin_types_compatible_p (typeof (x), float)) \ 29978 tmp = foo_float (tmp); \ 29979 else \ 29980 abort (); \ 29981 tmp; \ 29982 }) 29983 29984 _Note:_ This construct is only available for C. 29985 29986 29987 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 29988 EXP2) 29989 You can use the built-in function `__builtin_choose_expr' to 29990 evaluate code depending on the value of a constant expression. 29991 This built-in function returns EXP1 if CONST_EXP, which is an 29992 integer constant expression, is nonzero. Otherwise it returns 29993 EXP2. 29994 29995 This built-in function is analogous to the `? :' operator in C, 29996 except that the expression returned has its type unaltered by 29997 promotion rules. Also, the built-in function does not evaluate 29998 the expression that is not chosen. For example, if CONST_EXP 29999 evaluates to true, EXP2 is not evaluated even if it has 30000 side-effects. 30001 30002 This built-in function can return an lvalue if the chosen argument 30003 is an lvalue. 30004 30005 If EXP1 is returned, the return type is the same as EXP1's type. 30006 Similarly, if EXP2 is returned, its return type is the same as 30007 EXP2. 30008 30009 Example: 30010 30011 #define foo(x) \ 30012 __builtin_choose_expr ( \ 30013 __builtin_types_compatible_p (typeof (x), double), \ 30014 foo_double (x), \ 30015 __builtin_choose_expr ( \ 30016 __builtin_types_compatible_p (typeof (x), float), \ 30017 foo_float (x), \ 30018 /* The void expression results in a compile-time error \ 30019 when assigning the result to something. */ \ 30020 (void)0)) 30021 30022 _Note:_ This construct is only available for C. Furthermore, the 30023 unused expression (EXP1 or EXP2 depending on the value of 30024 CONST_EXP) may still generate syntax errors. This may change in 30025 future revisions. 30026 30027 30028 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG) 30029 The built-in function `__builtin_complex' is provided for use in 30030 implementing the ISO C11 macros `CMPLXF', `CMPLX' and `CMPLXL'. 30031 REAL and IMAG must have the same type, a real binary 30032 floating-point type, and the result has the corresponding complex 30033 type with real and imaginary parts REAL and IMAG. Unlike `REAL + 30034 I * IMAG', this works even when infinities, NaNs and negative 30035 zeros are involved. 30036 30037 30038 -- Built-in Function: int __builtin_constant_p (EXP) 30039 You can use the built-in function `__builtin_constant_p' to 30040 determine if a value is known to be constant at compile time and 30041 hence that GCC can perform constant-folding on expressions 30042 involving that value. The argument of the function is the value 30043 to test. The function returns the integer 1 if the argument is 30044 known to be a compile-time constant and 0 if it is not known to be 30045 a compile-time constant. A return of 0 does not indicate that the 30046 value is _not_ a constant, but merely that GCC cannot prove it is 30047 a constant with the specified value of the `-O' option. 30048 30049 You typically use this function in an embedded application where 30050 memory is a critical resource. If you have some complex 30051 calculation, you may want it to be folded if it involves 30052 constants, but need to call a function if it does not. For 30053 example: 30054 30055 #define Scale_Value(X) \ 30056 (__builtin_constant_p (X) \ 30057 ? ((X) * SCALE + OFFSET) : Scale (X)) 30058 30059 You may use this built-in function in either a macro or an inline 30060 function. However, if you use it in an inlined function and pass 30061 an argument of the function as the argument to the built-in, GCC 30062 never returns 1 when you call the inline function with a string 30063 constant or compound literal (*note Compound Literals::) and does 30064 not return 1 when you pass a constant numeric value to the inline 30065 function unless you specify the `-O' option. 30066 30067 You may also use `__builtin_constant_p' in initializers for static 30068 data. For instance, you can write 30069 30070 static const int table[] = { 30071 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 30072 /* ... */ 30073 }; 30074 30075 This is an acceptable initializer even if EXPRESSION is not a 30076 constant expression, including the case where 30077 `__builtin_constant_p' returns 1 because EXPRESSION can be folded 30078 to a constant but EXPRESSION contains operands that are not 30079 otherwise permitted in a static initializer (for example, `0 && 30080 foo ()'). GCC must be more conservative about evaluating the 30081 built-in in this case, because it has no opportunity to perform 30082 optimization. 30083 30084 Previous versions of GCC did not accept this built-in in data 30085 initializers. The earliest version where it is completely safe is 30086 3.0.1. 30087 30088 -- Built-in Function: long __builtin_expect (long EXP, long C) 30089 You may use `__builtin_expect' to provide the compiler with branch 30090 prediction information. In general, you should prefer to use 30091 actual profile feedback for this (`-fprofile-arcs'), as 30092 programmers are notoriously bad at predicting how their programs 30093 actually perform. However, there are applications in which this 30094 data is hard to collect. 30095 30096 The return value is the value of EXP, which should be an integral 30097 expression. The semantics of the built-in are that it is expected 30098 that EXP == C. For example: 30099 30100 if (__builtin_expect (x, 0)) 30101 foo (); 30102 30103 indicates that we do not expect to call `foo', since we expect `x' 30104 to be zero. Since you are limited to integral expressions for 30105 EXP, you should use constructions such as 30106 30107 if (__builtin_expect (ptr != NULL, 1)) 30108 foo (*ptr); 30109 30110 when testing pointer or floating-point values. 30111 30112 -- Built-in Function: void __builtin_trap (void) 30113 This function causes the program to exit abnormally. GCC 30114 implements this function by using a target-dependent mechanism 30115 (such as intentionally executing an illegal instruction) or by 30116 calling `abort'. The mechanism used may vary from release to 30117 release so you should not rely on any particular implementation. 30118 30119 -- Built-in Function: void __builtin_unreachable (void) 30120 If control flow reaches the point of the `__builtin_unreachable', 30121 the program is undefined. It is useful in situations where the 30122 compiler cannot deduce the unreachability of the code. 30123 30124 One such case is immediately following an `asm' statement that 30125 either never terminates, or one that transfers control elsewhere 30126 and never returns. In this example, without the 30127 `__builtin_unreachable', GCC issues a warning that control reaches 30128 the end of a non-void function. It also generates code to return 30129 after the `asm'. 30130 30131 int f (int c, int v) 30132 { 30133 if (c) 30134 { 30135 return v; 30136 } 30137 else 30138 { 30139 asm("jmp error_handler"); 30140 __builtin_unreachable (); 30141 } 30142 } 30143 30144 Because the `asm' statement unconditionally transfers control out 30145 of the function, control never reaches the end of the function 30146 body. The `__builtin_unreachable' is in fact unreachable and 30147 communicates this fact to the compiler. 30148 30149 Another use for `__builtin_unreachable' is following a call a 30150 function that never returns but that is not declared 30151 `__attribute__((noreturn))', as in this example: 30152 30153 void function_that_never_returns (void); 30154 30155 int g (int c) 30156 { 30157 if (c) 30158 { 30159 return 1; 30160 } 30161 else 30162 { 30163 function_that_never_returns (); 30164 __builtin_unreachable (); 30165 } 30166 } 30167 30168 30169 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP, 30170 size_t ALIGN, ...) 30171 This function returns its first argument, and allows the compiler 30172 to assume that the returned pointer is at least ALIGN bytes 30173 aligned. This built-in can have either two or three arguments, if 30174 it has three, the third argument should have integer type, and if 30175 it is nonzero means misalignment offset. For example: 30176 30177 void *x = __builtin_assume_aligned (arg, 16); 30178 30179 means that the compiler can assume `x', set to `arg', is at least 30180 16-byte aligned, while: 30181 30182 void *x = __builtin_assume_aligned (arg, 32, 8); 30183 30184 means that the compiler can assume for `x', set to `arg', that 30185 `(char *) x - 8' is 32-byte aligned. 30186 30187 -- Built-in Function: int __builtin_LINE () 30188 This function is the equivalent to the preprocessor `__LINE__' 30189 macro and returns the line number of the invocation of the 30190 built-in. 30191 30192 -- Built-in Function: int __builtin_FUNCTION () 30193 This function is the equivalent to the preprocessor `__FUNCTION__' 30194 macro and returns the function name the invocation of the built-in 30195 is in. 30196 30197 -- Built-in Function: int __builtin_FILE () 30198 This function is the equivalent to the preprocessor `__FILE__' 30199 macro and returns the file name the invocation of the built-in is 30200 in. 30201 30202 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 30203 *END) 30204 This function is used to flush the processor's instruction cache 30205 for the region of memory between BEGIN inclusive and END 30206 exclusive. Some targets require that the instruction cache be 30207 flushed, after modifying memory containing code, in order to obtain 30208 deterministic behavior. 30209 30210 If the target does not require instruction cache flushes, 30211 `__builtin___clear_cache' has no effect. Otherwise either 30212 instructions are emitted in-line to clear the instruction cache or 30213 a call to the `__clear_cache' function in libgcc is made. 30214 30215 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 30216 This function is used to minimize cache-miss latency by moving 30217 data into a cache before it is accessed. You can insert calls to 30218 `__builtin_prefetch' into code for which you know addresses of 30219 data in memory that is likely to be accessed soon. If the target 30220 supports them, data prefetch instructions are generated. If the 30221 prefetch is done early enough before the access then the data will 30222 be in the cache by the time it is accessed. 30223 30224 The value of ADDR is the address of the memory to prefetch. There 30225 are two optional arguments, RW and LOCALITY. The value of RW is a 30226 compile-time constant one or zero; one means that the prefetch is 30227 preparing for a write to the memory address and zero, the default, 30228 means that the prefetch is preparing for a read. The value 30229 LOCALITY must be a compile-time constant integer between zero and 30230 three. A value of zero means that the data has no temporal 30231 locality, so it need not be left in the cache after the access. A 30232 value of three means that the data has a high degree of temporal 30233 locality and should be left in all levels of cache possible. 30234 Values of one and two mean, respectively, a low or moderate degree 30235 of temporal locality. The default is three. 30236 30237 for (i = 0; i < n; i++) 30238 { 30239 a[i] = a[i] + b[i]; 30240 __builtin_prefetch (&a[i+j], 1, 1); 30241 __builtin_prefetch (&b[i+j], 0, 1); 30242 /* ... */ 30243 } 30244 30245 Data prefetch does not generate faults if ADDR is invalid, but the 30246 address expression itself must be valid. For example, a prefetch 30247 of `p->next' does not fault if `p->next' is not a valid address, 30248 but evaluation faults if `p' is not a valid address. 30249 30250 If the target does not support data prefetch, the address 30251 expression is evaluated if it includes side effects but no other 30252 code is generated and GCC does not issue a warning. 30253 30254 -- Built-in Function: double __builtin_huge_val (void) 30255 Returns a positive infinity, if supported by the floating-point 30256 format, else `DBL_MAX'. This function is suitable for 30257 implementing the ISO C macro `HUGE_VAL'. 30258 30259 -- Built-in Function: float __builtin_huge_valf (void) 30260 Similar to `__builtin_huge_val', except the return type is `float'. 30261 30262 -- Built-in Function: long double __builtin_huge_vall (void) 30263 Similar to `__builtin_huge_val', except the return type is `long 30264 double'. 30265 30266 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 30267 int, ...) 30268 This built-in implements the C99 fpclassify functionality. The 30269 first five int arguments should be the target library's notion of 30270 the possible FP classes and are used for return values. They must 30271 be constant values and they must appear in this order: `FP_NAN', 30272 `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'. The 30273 ellipsis is for exactly one floating-point value to classify. GCC 30274 treats the last argument as type-generic, which means it does not 30275 do default promotion from float to double. 30276 30277 -- Built-in Function: double __builtin_inf (void) 30278 Similar to `__builtin_huge_val', except a warning is generated if 30279 the target floating-point format does not support infinities. 30280 30281 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 30282 Similar to `__builtin_inf', except the return type is `_Decimal32'. 30283 30284 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 30285 Similar to `__builtin_inf', except the return type is `_Decimal64'. 30286 30287 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 30288 Similar to `__builtin_inf', except the return type is 30289 `_Decimal128'. 30290 30291 -- Built-in Function: float __builtin_inff (void) 30292 Similar to `__builtin_inf', except the return type is `float'. 30293 This function is suitable for implementing the ISO C99 macro 30294 `INFINITY'. 30295 30296 -- Built-in Function: long double __builtin_infl (void) 30297 Similar to `__builtin_inf', except the return type is `long 30298 double'. 30299 30300 -- Built-in Function: int __builtin_isinf_sign (...) 30301 Similar to `isinf', except the return value is negative for an 30302 argument of `-Inf'. Note while the parameter list is an ellipsis, 30303 this function only accepts exactly one floating-point argument. 30304 GCC treats this parameter as type-generic, which means it does not 30305 do default promotion from float to double. 30306 30307 -- Built-in Function: double __builtin_nan (const char *str) 30308 This is an implementation of the ISO C99 function `nan'. 30309 30310 Since ISO C99 defines this function in terms of `strtod', which we 30311 do not implement, a description of the parsing is in order. The 30312 string is parsed as by `strtol'; that is, the base is recognized by 30313 leading `0' or `0x' prefixes. The number parsed is placed in the 30314 significand such that the least significant bit of the number is 30315 at the least significant bit of the significand. The number is 30316 truncated to fit the significand field provided. The significand 30317 is forced to be a quiet NaN. 30318 30319 This function, if given a string literal all of which would have 30320 been consumed by `strtol', is evaluated early enough that it is 30321 considered a compile-time constant. 30322 30323 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 30324 Similar to `__builtin_nan', except the return type is `_Decimal32'. 30325 30326 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 30327 Similar to `__builtin_nan', except the return type is `_Decimal64'. 30328 30329 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 30330 Similar to `__builtin_nan', except the return type is 30331 `_Decimal128'. 30332 30333 -- Built-in Function: float __builtin_nanf (const char *str) 30334 Similar to `__builtin_nan', except the return type is `float'. 30335 30336 -- Built-in Function: long double __builtin_nanl (const char *str) 30337 Similar to `__builtin_nan', except the return type is `long 30338 double'. 30339 30340 -- Built-in Function: double __builtin_nans (const char *str) 30341 Similar to `__builtin_nan', except the significand is forced to be 30342 a signaling NaN. The `nans' function is proposed by WG14 N965. 30343 30344 -- Built-in Function: float __builtin_nansf (const char *str) 30345 Similar to `__builtin_nans', except the return type is `float'. 30346 30347 -- Built-in Function: long double __builtin_nansl (const char *str) 30348 Similar to `__builtin_nans', except the return type is `long 30349 double'. 30350 30351 -- Built-in Function: int __builtin_ffs (unsigned int x) 30352 Returns one plus the index of the least significant 1-bit of X, or 30353 if X is zero, returns zero. 30354 30355 -- Built-in Function: int __builtin_clz (unsigned int x) 30356 Returns the number of leading 0-bits in X, starting at the most 30357 significant bit position. If X is 0, the result is undefined. 30358 30359 -- Built-in Function: int __builtin_ctz (unsigned int x) 30360 Returns the number of trailing 0-bits in X, starting at the least 30361 significant bit position. If X is 0, the result is undefined. 30362 30363 -- Built-in Function: int __builtin_clrsb (int x) 30364 Returns the number of leading redundant sign bits in X, i.e. the 30365 number of bits following the most significant bit that are 30366 identical to it. There are no special cases for 0 or other values. 30367 30368 -- Built-in Function: int __builtin_popcount (unsigned int x) 30369 Returns the number of 1-bits in X. 30370 30371 -- Built-in Function: int __builtin_parity (unsigned int x) 30372 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 30373 30374 -- Built-in Function: int __builtin_ffsl (unsigned long) 30375 Similar to `__builtin_ffs', except the argument type is `unsigned 30376 long'. 30377 30378 -- Built-in Function: int __builtin_clzl (unsigned long) 30379 Similar to `__builtin_clz', except the argument type is `unsigned 30380 long'. 30381 30382 -- Built-in Function: int __builtin_ctzl (unsigned long) 30383 Similar to `__builtin_ctz', except the argument type is `unsigned 30384 long'. 30385 30386 -- Built-in Function: int __builtin_clrsbl (long) 30387 Similar to `__builtin_clrsb', except the argument type is `long'. 30388 30389 -- Built-in Function: int __builtin_popcountl (unsigned long) 30390 Similar to `__builtin_popcount', except the argument type is 30391 `unsigned long'. 30392 30393 -- Built-in Function: int __builtin_parityl (unsigned long) 30394 Similar to `__builtin_parity', except the argument type is 30395 `unsigned long'. 30396 30397 -- Built-in Function: int __builtin_ffsll (unsigned long long) 30398 Similar to `__builtin_ffs', except the argument type is `unsigned 30399 long long'. 30400 30401 -- Built-in Function: int __builtin_clzll (unsigned long long) 30402 Similar to `__builtin_clz', except the argument type is `unsigned 30403 long long'. 30404 30405 -- Built-in Function: int __builtin_ctzll (unsigned long long) 30406 Similar to `__builtin_ctz', except the argument type is `unsigned 30407 long long'. 30408 30409 -- Built-in Function: int __builtin_clrsbll (long long) 30410 Similar to `__builtin_clrsb', except the argument type is `long 30411 long'. 30412 30413 -- Built-in Function: int __builtin_popcountll (unsigned long long) 30414 Similar to `__builtin_popcount', except the argument type is 30415 `unsigned long long'. 30416 30417 -- Built-in Function: int __builtin_parityll (unsigned long long) 30418 Similar to `__builtin_parity', except the argument type is 30419 `unsigned long long'. 30420 30421 -- Built-in Function: double __builtin_powi (double, int) 30422 Returns the first argument raised to the power of the second. 30423 Unlike the `pow' function no guarantees about precision and 30424 rounding are made. 30425 30426 -- Built-in Function: float __builtin_powif (float, int) 30427 Similar to `__builtin_powi', except the argument and return types 30428 are `float'. 30429 30430 -- Built-in Function: long double __builtin_powil (long double, int) 30431 Similar to `__builtin_powi', except the argument and return types 30432 are `long double'. 30433 30434 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x) 30435 Returns X with the order of the bytes reversed; for example, 30436 `0xaabb' becomes `0xbbaa'. Byte here always means exactly 8 bits. 30437 30438 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x) 30439 Similar to `__builtin_bswap16', except the argument and return 30440 types are 32 bit. 30441 30442 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x) 30443 Similar to `__builtin_bswap32', except the argument and return 30444 types are 64 bit. 30445 30446 30447File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 30448 304496.56 Built-in Functions Specific to Particular Target Machines 30450============================================================== 30451 30452On some target machines, GCC supports many built-in functions specific 30453to those machines. Generally these generate calls to specific machine 30454instructions, but allow the compiler to schedule those calls. 30455 30456* Menu: 30457 30458* Alpha Built-in Functions:: 30459* ARM iWMMXt Built-in Functions:: 30460* ARM NEON Intrinsics:: 30461* AVR Built-in Functions:: 30462* Blackfin Built-in Functions:: 30463* FR-V Built-in Functions:: 30464* X86 Built-in Functions:: 30465* X86 transactional memory intrinsics:: 30466* MIPS DSP Built-in Functions:: 30467* MIPS Paired-Single Support:: 30468* MIPS Loongson Built-in Functions:: 30469* Other MIPS Built-in Functions:: 30470* picoChip Built-in Functions:: 30471* PowerPC Built-in Functions:: 30472* PowerPC AltiVec/VSX Built-in Functions:: 30473* PowerPC Hardware Transactional Memory Built-in Functions:: 30474* RX Built-in Functions:: 30475* S/390 System z Built-in Functions:: 30476* SH Built-in Functions:: 30477* SPARC VIS Built-in Functions:: 30478* SPU Built-in Functions:: 30479* TI C6X Built-in Functions:: 30480* TILE-Gx Built-in Functions:: 30481* TILEPro Built-in Functions:: 30482 30483 30484File: gcc.info, Node: Alpha Built-in Functions, Next: ARM iWMMXt Built-in Functions, Up: Target Builtins 30485 304866.56.1 Alpha Built-in Functions 30487------------------------------- 30488 30489These built-in functions are available for the Alpha family of 30490processors, depending on the command-line switches used. 30491 30492 The following built-in functions are always available. They all 30493generate the machine instruction that is part of the name. 30494 30495 long __builtin_alpha_implver (void) 30496 long __builtin_alpha_rpcc (void) 30497 long __builtin_alpha_amask (long) 30498 long __builtin_alpha_cmpbge (long, long) 30499 long __builtin_alpha_extbl (long, long) 30500 long __builtin_alpha_extwl (long, long) 30501 long __builtin_alpha_extll (long, long) 30502 long __builtin_alpha_extql (long, long) 30503 long __builtin_alpha_extwh (long, long) 30504 long __builtin_alpha_extlh (long, long) 30505 long __builtin_alpha_extqh (long, long) 30506 long __builtin_alpha_insbl (long, long) 30507 long __builtin_alpha_inswl (long, long) 30508 long __builtin_alpha_insll (long, long) 30509 long __builtin_alpha_insql (long, long) 30510 long __builtin_alpha_inswh (long, long) 30511 long __builtin_alpha_inslh (long, long) 30512 long __builtin_alpha_insqh (long, long) 30513 long __builtin_alpha_mskbl (long, long) 30514 long __builtin_alpha_mskwl (long, long) 30515 long __builtin_alpha_mskll (long, long) 30516 long __builtin_alpha_mskql (long, long) 30517 long __builtin_alpha_mskwh (long, long) 30518 long __builtin_alpha_msklh (long, long) 30519 long __builtin_alpha_mskqh (long, long) 30520 long __builtin_alpha_umulh (long, long) 30521 long __builtin_alpha_zap (long, long) 30522 long __builtin_alpha_zapnot (long, long) 30523 30524 The following built-in functions are always with `-mmax' or 30525`-mcpu=CPU' where CPU is `pca56' or later. They all generate the 30526machine instruction that is part of the name. 30527 30528 long __builtin_alpha_pklb (long) 30529 long __builtin_alpha_pkwb (long) 30530 long __builtin_alpha_unpkbl (long) 30531 long __builtin_alpha_unpkbw (long) 30532 long __builtin_alpha_minub8 (long, long) 30533 long __builtin_alpha_minsb8 (long, long) 30534 long __builtin_alpha_minuw4 (long, long) 30535 long __builtin_alpha_minsw4 (long, long) 30536 long __builtin_alpha_maxub8 (long, long) 30537 long __builtin_alpha_maxsb8 (long, long) 30538 long __builtin_alpha_maxuw4 (long, long) 30539 long __builtin_alpha_maxsw4 (long, long) 30540 long __builtin_alpha_perr (long, long) 30541 30542 The following built-in functions are always with `-mcix' or 30543`-mcpu=CPU' where CPU is `ev67' or later. They all generate the 30544machine instruction that is part of the name. 30545 30546 long __builtin_alpha_cttz (long) 30547 long __builtin_alpha_ctlz (long) 30548 long __builtin_alpha_ctpop (long) 30549 30550 The following built-in functions are available on systems that use the 30551OSF/1 PALcode. Normally they invoke the `rduniq' and `wruniq' PAL 30552calls, but when invoked with `-mtls-kernel', they invoke `rdval' and 30553`wrval'. 30554 30555 void *__builtin_thread_pointer (void) 30556 void __builtin_set_thread_pointer (void *) 30557 30558 30559File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: Alpha Built-in Functions, Up: Target Builtins 30560 305616.56.2 ARM iWMMXt Built-in Functions 30562------------------------------------ 30563 30564These built-in functions are available for the ARM family of processors 30565when the `-mcpu=iwmmxt' switch is used: 30566 30567 typedef int v2si __attribute__ ((vector_size (8))); 30568 typedef short v4hi __attribute__ ((vector_size (8))); 30569 typedef char v8qi __attribute__ ((vector_size (8))); 30570 30571 int __builtin_arm_getwcgr0 (void) 30572 void __builtin_arm_setwcgr0 (int) 30573 int __builtin_arm_getwcgr1 (void) 30574 void __builtin_arm_setwcgr1 (int) 30575 int __builtin_arm_getwcgr2 (void) 30576 void __builtin_arm_setwcgr2 (int) 30577 int __builtin_arm_getwcgr3 (void) 30578 void __builtin_arm_setwcgr3 (int) 30579 int __builtin_arm_textrmsb (v8qi, int) 30580 int __builtin_arm_textrmsh (v4hi, int) 30581 int __builtin_arm_textrmsw (v2si, int) 30582 int __builtin_arm_textrmub (v8qi, int) 30583 int __builtin_arm_textrmuh (v4hi, int) 30584 int __builtin_arm_textrmuw (v2si, int) 30585 v8qi __builtin_arm_tinsrb (v8qi, int, int) 30586 v4hi __builtin_arm_tinsrh (v4hi, int, int) 30587 v2si __builtin_arm_tinsrw (v2si, int, int) 30588 long long __builtin_arm_tmia (long long, int, int) 30589 long long __builtin_arm_tmiabb (long long, int, int) 30590 long long __builtin_arm_tmiabt (long long, int, int) 30591 long long __builtin_arm_tmiaph (long long, int, int) 30592 long long __builtin_arm_tmiatb (long long, int, int) 30593 long long __builtin_arm_tmiatt (long long, int, int) 30594 int __builtin_arm_tmovmskb (v8qi) 30595 int __builtin_arm_tmovmskh (v4hi) 30596 int __builtin_arm_tmovmskw (v2si) 30597 long long __builtin_arm_waccb (v8qi) 30598 long long __builtin_arm_wacch (v4hi) 30599 long long __builtin_arm_waccw (v2si) 30600 v8qi __builtin_arm_waddb (v8qi, v8qi) 30601 v8qi __builtin_arm_waddbss (v8qi, v8qi) 30602 v8qi __builtin_arm_waddbus (v8qi, v8qi) 30603 v4hi __builtin_arm_waddh (v4hi, v4hi) 30604 v4hi __builtin_arm_waddhss (v4hi, v4hi) 30605 v4hi __builtin_arm_waddhus (v4hi, v4hi) 30606 v2si __builtin_arm_waddw (v2si, v2si) 30607 v2si __builtin_arm_waddwss (v2si, v2si) 30608 v2si __builtin_arm_waddwus (v2si, v2si) 30609 v8qi __builtin_arm_walign (v8qi, v8qi, int) 30610 long long __builtin_arm_wand(long long, long long) 30611 long long __builtin_arm_wandn (long long, long long) 30612 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 30613 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 30614 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 30615 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 30616 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 30617 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 30618 v2si __builtin_arm_wcmpeqw (v2si, v2si) 30619 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 30620 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 30621 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 30622 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 30623 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 30624 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 30625 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 30626 long long __builtin_arm_wmacsz (v4hi, v4hi) 30627 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 30628 long long __builtin_arm_wmacuz (v4hi, v4hi) 30629 v4hi __builtin_arm_wmadds (v4hi, v4hi) 30630 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 30631 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 30632 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 30633 v2si __builtin_arm_wmaxsw (v2si, v2si) 30634 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 30635 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 30636 v2si __builtin_arm_wmaxuw (v2si, v2si) 30637 v8qi __builtin_arm_wminsb (v8qi, v8qi) 30638 v4hi __builtin_arm_wminsh (v4hi, v4hi) 30639 v2si __builtin_arm_wminsw (v2si, v2si) 30640 v8qi __builtin_arm_wminub (v8qi, v8qi) 30641 v4hi __builtin_arm_wminuh (v4hi, v4hi) 30642 v2si __builtin_arm_wminuw (v2si, v2si) 30643 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 30644 v4hi __builtin_arm_wmulul (v4hi, v4hi) 30645 v4hi __builtin_arm_wmulum (v4hi, v4hi) 30646 long long __builtin_arm_wor (long long, long long) 30647 v2si __builtin_arm_wpackdss (long long, long long) 30648 v2si __builtin_arm_wpackdus (long long, long long) 30649 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 30650 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 30651 v4hi __builtin_arm_wpackwss (v2si, v2si) 30652 v4hi __builtin_arm_wpackwus (v2si, v2si) 30653 long long __builtin_arm_wrord (long long, long long) 30654 long long __builtin_arm_wrordi (long long, int) 30655 v4hi __builtin_arm_wrorh (v4hi, long long) 30656 v4hi __builtin_arm_wrorhi (v4hi, int) 30657 v2si __builtin_arm_wrorw (v2si, long long) 30658 v2si __builtin_arm_wrorwi (v2si, int) 30659 v2si __builtin_arm_wsadb (v2si, v8qi, v8qi) 30660 v2si __builtin_arm_wsadbz (v8qi, v8qi) 30661 v2si __builtin_arm_wsadh (v2si, v4hi, v4hi) 30662 v2si __builtin_arm_wsadhz (v4hi, v4hi) 30663 v4hi __builtin_arm_wshufh (v4hi, int) 30664 long long __builtin_arm_wslld (long long, long long) 30665 long long __builtin_arm_wslldi (long long, int) 30666 v4hi __builtin_arm_wsllh (v4hi, long long) 30667 v4hi __builtin_arm_wsllhi (v4hi, int) 30668 v2si __builtin_arm_wsllw (v2si, long long) 30669 v2si __builtin_arm_wsllwi (v2si, int) 30670 long long __builtin_arm_wsrad (long long, long long) 30671 long long __builtin_arm_wsradi (long long, int) 30672 v4hi __builtin_arm_wsrah (v4hi, long long) 30673 v4hi __builtin_arm_wsrahi (v4hi, int) 30674 v2si __builtin_arm_wsraw (v2si, long long) 30675 v2si __builtin_arm_wsrawi (v2si, int) 30676 long long __builtin_arm_wsrld (long long, long long) 30677 long long __builtin_arm_wsrldi (long long, int) 30678 v4hi __builtin_arm_wsrlh (v4hi, long long) 30679 v4hi __builtin_arm_wsrlhi (v4hi, int) 30680 v2si __builtin_arm_wsrlw (v2si, long long) 30681 v2si __builtin_arm_wsrlwi (v2si, int) 30682 v8qi __builtin_arm_wsubb (v8qi, v8qi) 30683 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 30684 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 30685 v4hi __builtin_arm_wsubh (v4hi, v4hi) 30686 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 30687 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 30688 v2si __builtin_arm_wsubw (v2si, v2si) 30689 v2si __builtin_arm_wsubwss (v2si, v2si) 30690 v2si __builtin_arm_wsubwus (v2si, v2si) 30691 v4hi __builtin_arm_wunpckehsb (v8qi) 30692 v2si __builtin_arm_wunpckehsh (v4hi) 30693 long long __builtin_arm_wunpckehsw (v2si) 30694 v4hi __builtin_arm_wunpckehub (v8qi) 30695 v2si __builtin_arm_wunpckehuh (v4hi) 30696 long long __builtin_arm_wunpckehuw (v2si) 30697 v4hi __builtin_arm_wunpckelsb (v8qi) 30698 v2si __builtin_arm_wunpckelsh (v4hi) 30699 long long __builtin_arm_wunpckelsw (v2si) 30700 v4hi __builtin_arm_wunpckelub (v8qi) 30701 v2si __builtin_arm_wunpckeluh (v4hi) 30702 long long __builtin_arm_wunpckeluw (v2si) 30703 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 30704 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 30705 v2si __builtin_arm_wunpckihw (v2si, v2si) 30706 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 30707 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 30708 v2si __builtin_arm_wunpckilw (v2si, v2si) 30709 long long __builtin_arm_wxor (long long, long long) 30710 long long __builtin_arm_wzero () 30711 30712 30713File: gcc.info, Node: ARM NEON Intrinsics, Next: AVR Built-in Functions, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 30714 307156.56.3 ARM NEON Intrinsics 30716-------------------------- 30717 30718These built-in intrinsics for the ARM Advanced SIMD extension are 30719available when the `-mfpu=neon' switch is used: 30720 307216.56.3.1 Addition 30722................. 30723 30724 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) 30725 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 30726 30727 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) 30728 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 30729 30730 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) 30731 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 30732 30733 * int32x2_t vadd_s32 (int32x2_t, int32x2_t) 30734 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 30735 30736 * int16x4_t vadd_s16 (int16x4_t, int16x4_t) 30737 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 30738 30739 * int8x8_t vadd_s8 (int8x8_t, int8x8_t) 30740 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 30741 30742 * float32x2_t vadd_f32 (float32x2_t, float32x2_t) 30743 _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0' 30744 30745 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) 30746 30747 * int64x1_t vadd_s64 (int64x1_t, int64x1_t) 30748 30749 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) 30750 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 30751 30752 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) 30753 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 30754 30755 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) 30756 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 30757 30758 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) 30759 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 30760 30761 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) 30762 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 30763 30764 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) 30765 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 30766 30767 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) 30768 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 30769 30770 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) 30771 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 30772 30773 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) 30774 _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0' 30775 30776 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) 30777 _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0' 30778 30779 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) 30780 _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0' 30781 30782 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) 30783 _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0' 30784 30785 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) 30786 _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0' 30787 30788 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) 30789 _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0' 30790 30791 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) 30792 _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0' 30793 30794 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) 30795 _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0' 30796 30797 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) 30798 _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0' 30799 30800 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) 30801 _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0' 30802 30803 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) 30804 _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0' 30805 30806 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) 30807 _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0' 30808 30809 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) 30810 _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0' 30811 30812 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) 30813 _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0' 30814 30815 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) 30816 _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0' 30817 30818 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) 30819 _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0' 30820 30821 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) 30822 _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0' 30823 30824 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) 30825 _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0' 30826 30827 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) 30828 _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0' 30829 30830 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) 30831 _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0' 30832 30833 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) 30834 _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0' 30835 30836 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) 30837 _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0' 30838 30839 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) 30840 _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0' 30841 30842 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) 30843 _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0' 30844 30845 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) 30846 _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0' 30847 30848 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) 30849 _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0' 30850 30851 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) 30852 _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0' 30853 30854 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) 30855 _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0' 30856 30857 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) 30858 _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0' 30859 30860 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) 30861 _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0' 30862 30863 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) 30864 _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0' 30865 30866 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) 30867 _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0' 30868 30869 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) 30870 _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0' 30871 30872 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) 30873 _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0' 30874 30875 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) 30876 _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0' 30877 30878 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) 30879 _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0' 30880 30881 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) 30882 _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0' 30883 30884 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) 30885 _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0' 30886 30887 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) 30888 _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0' 30889 30890 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) 30891 _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0' 30892 30893 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) 30894 _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0' 30895 30896 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) 30897 _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0' 30898 30899 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) 30900 _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0' 30901 30902 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) 30903 _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0' 30904 30905 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) 30906 _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0' 30907 30908 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) 30909 _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0' 30910 30911 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) 30912 _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0' 30913 30914 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) 30915 _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0' 30916 30917 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) 30918 _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0' 30919 30920 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) 30921 _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0' 30922 30923 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) 30924 _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0' 30925 30926 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) 30927 _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0' 30928 30929 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) 30930 _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0' 30931 30932 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) 30933 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 30934 30935 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) 30936 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 30937 30938 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) 30939 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 30940 30941 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) 30942 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 30943 30944 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) 30945 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 30946 30947 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) 30948 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 30949 30950 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) 30951 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 30952 30953 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) 30954 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 30955 30956 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) 30957 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 30958 30959 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) 30960 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 30961 30962 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) 30963 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 30964 30965 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) 30966 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 30967 309686.56.3.2 Multiplication 30969....................... 30970 30971 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) 30972 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 30973 30974 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) 30975 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 30976 30977 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) 30978 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 30979 30980 * int32x2_t vmul_s32 (int32x2_t, int32x2_t) 30981 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 30982 30983 * int16x4_t vmul_s16 (int16x4_t, int16x4_t) 30984 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 30985 30986 * int8x8_t vmul_s8 (int8x8_t, int8x8_t) 30987 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 30988 30989 * float32x2_t vmul_f32 (float32x2_t, float32x2_t) 30990 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0' 30991 30992 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) 30993 _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0' 30994 30995 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) 30996 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 30997 30998 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) 30999 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 31000 31001 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) 31002 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 31003 31004 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) 31005 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 31006 31007 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) 31008 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 31009 31010 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) 31011 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 31012 31013 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) 31014 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0' 31015 31016 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) 31017 _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0' 31018 31019 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) 31020 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0' 31021 31022 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) 31023 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0' 31024 31025 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) 31026 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0' 31027 31028 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) 31029 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0' 31030 31031 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) 31032 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0' 31033 31034 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) 31035 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0' 31036 31037 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) 31038 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0' 31039 31040 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) 31041 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0' 31042 31043 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) 31044 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0' 31045 31046 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) 31047 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0' 31048 31049 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) 31050 _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0' 31051 31052 * int64x2_t vmull_s32 (int32x2_t, int32x2_t) 31053 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0' 31054 31055 * int32x4_t vmull_s16 (int16x4_t, int16x4_t) 31056 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0' 31057 31058 * int16x8_t vmull_s8 (int8x8_t, int8x8_t) 31059 _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0' 31060 31061 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) 31062 _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0' 31063 31064 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) 31065 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0' 31066 31067 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) 31068 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0' 31069 310706.56.3.3 Multiply-accumulate 31071............................ 31072 31073 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 31074 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 31075 31076 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 31077 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 31078 31079 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 31080 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 31081 31082 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) 31083 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 31084 31085 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) 31086 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 31087 31088 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) 31089 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 31090 31091 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) 31092 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0' 31093 31094 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 31095 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 31096 31097 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 31098 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 31099 31100 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 31101 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 31102 31103 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) 31104 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 31105 31106 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) 31107 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 31108 31109 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) 31110 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 31111 31112 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) 31113 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0' 31114 31115 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 31116 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0' 31117 31118 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 31119 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0' 31120 31121 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 31122 _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0' 31123 31124 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 31125 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0' 31126 31127 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 31128 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0' 31129 31130 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) 31131 _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0' 31132 31133 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 31134 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0' 31135 31136 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 31137 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0' 31138 311396.56.3.4 Multiply-subtract 31140.......................... 31141 31142 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 31143 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 31144 31145 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 31146 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 31147 31148 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 31149 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 31150 31151 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) 31152 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 31153 31154 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) 31155 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 31156 31157 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) 31158 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 31159 31160 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) 31161 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0' 31162 31163 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 31164 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 31165 31166 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 31167 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 31168 31169 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 31170 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 31171 31172 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) 31173 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 31174 31175 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) 31176 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 31177 31178 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) 31179 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 31180 31181 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) 31182 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0' 31183 31184 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 31185 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0' 31186 31187 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 31188 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0' 31189 31190 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 31191 _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0' 31192 31193 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 31194 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0' 31195 31196 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 31197 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0' 31198 31199 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) 31200 _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0' 31201 31202 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 31203 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0' 31204 31205 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 31206 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0' 31207 312086.56.3.5 Fused-multiply-accumulate 31209.................................. 31210 31211 * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t) 31212 _Form of expected instruction(s):_ `vfma.f32 D0, D0, D0' 31213 31214 * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t) 31215 _Form of expected instruction(s):_ `vfma.f32 Q0, Q0, Q0' 31216 312176.56.3.6 Fused-multiply-subtract 31218................................ 31219 31220 * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t) 31221 _Form of expected instruction(s):_ `vfms.f32 D0, D0, D0' 31222 31223 * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t) 31224 _Form of expected instruction(s):_ `vfms.f32 Q0, Q0, Q0' 31225 312266.56.3.7 Round to integral (to nearest, ties to even) 31227..................................................... 31228 31229 * float32x2_t vrndn_f32 (float32x2_t) 31230 _Form of expected instruction(s):_ `vrintn.f32 D0, D0' 31231 31232 * float32x4_t vrndqn_f32 (float32x4_t) 31233 _Form of expected instruction(s):_ `vrintn.f32 Q0, Q0' 31234 312356.56.3.8 Round to integral (to nearest, ties away from zero) 31236............................................................ 31237 31238 * float32x2_t vrnda_f32 (float32x2_t) 31239 _Form of expected instruction(s):_ `vrinta.f32 D0, D0' 31240 31241 * float32x4_t vrndqa_f32 (float32x4_t) 31242 _Form of expected instruction(s):_ `vrinta.f32 Q0, Q0' 31243 312446.56.3.9 Round to integral (towards +Inf) 31245......................................... 31246 31247 * float32x2_t vrndp_f32 (float32x2_t) 31248 _Form of expected instruction(s):_ `vrintp.f32 D0, D0' 31249 31250 * float32x4_t vrndqp_f32 (float32x4_t) 31251 _Form of expected instruction(s):_ `vrintp.f32 Q0, Q0' 31252 312536.56.3.10 Round to integral (towards -Inf) 31254.......................................... 31255 31256 * float32x2_t vrndm_f32 (float32x2_t) 31257 _Form of expected instruction(s):_ `vrintm.f32 D0, D0' 31258 31259 * float32x4_t vrndqm_f32 (float32x4_t) 31260 _Form of expected instruction(s):_ `vrintm.f32 Q0, Q0' 31261 312626.56.3.11 Round to integral (towards 0) 31263....................................... 31264 31265 * float32x2_t vrnd_f32 (float32x2_t) 31266 _Form of expected instruction(s):_ `vrintz.f32 D0, D0' 31267 31268 * float32x4_t vrndq_f32 (float32x4_t) 31269 _Form of expected instruction(s):_ `vrintz.f32 Q0, Q0' 31270 312716.56.3.12 Subtraction 31272..................... 31273 31274 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) 31275 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 31276 31277 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) 31278 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 31279 31280 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) 31281 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 31282 31283 * int32x2_t vsub_s32 (int32x2_t, int32x2_t) 31284 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 31285 31286 * int16x4_t vsub_s16 (int16x4_t, int16x4_t) 31287 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 31288 31289 * int8x8_t vsub_s8 (int8x8_t, int8x8_t) 31290 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 31291 31292 * float32x2_t vsub_f32 (float32x2_t, float32x2_t) 31293 _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0' 31294 31295 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) 31296 31297 * int64x1_t vsub_s64 (int64x1_t, int64x1_t) 31298 31299 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) 31300 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 31301 31302 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) 31303 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 31304 31305 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) 31306 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 31307 31308 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) 31309 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 31310 31311 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) 31312 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 31313 31314 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) 31315 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 31316 31317 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) 31318 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 31319 31320 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) 31321 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 31322 31323 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) 31324 _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0' 31325 31326 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) 31327 _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0' 31328 31329 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) 31330 _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0' 31331 31332 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) 31333 _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0' 31334 31335 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) 31336 _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0' 31337 31338 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) 31339 _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0' 31340 31341 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) 31342 _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0' 31343 31344 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) 31345 _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0' 31346 31347 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) 31348 _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0' 31349 31350 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) 31351 _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0' 31352 31353 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) 31354 _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0' 31355 31356 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) 31357 _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0' 31358 31359 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) 31360 _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0' 31361 31362 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) 31363 _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0' 31364 31365 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) 31366 _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0' 31367 31368 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) 31369 _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0' 31370 31371 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) 31372 _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0' 31373 31374 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) 31375 _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0' 31376 31377 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) 31378 _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0' 31379 31380 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) 31381 _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0' 31382 31383 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) 31384 _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0' 31385 31386 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) 31387 _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0' 31388 31389 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) 31390 _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0' 31391 31392 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) 31393 _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0' 31394 31395 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) 31396 _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0' 31397 31398 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) 31399 _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0' 31400 31401 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) 31402 _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0' 31403 31404 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) 31405 _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0' 31406 31407 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) 31408 _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0' 31409 31410 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) 31411 _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0' 31412 31413 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) 31414 _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0' 31415 31416 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) 31417 _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0' 31418 31419 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) 31420 _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0' 31421 31422 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) 31423 _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0' 31424 31425 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) 31426 _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0' 31427 31428 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) 31429 _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0' 31430 31431 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) 31432 _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0' 31433 31434 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) 31435 _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0' 31436 31437 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) 31438 _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0' 31439 31440 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) 31441 _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0' 31442 31443 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) 31444 _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0' 31445 31446 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) 31447 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 31448 31449 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) 31450 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 31451 31452 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) 31453 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 31454 31455 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) 31456 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 31457 31458 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) 31459 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 31460 31461 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) 31462 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 31463 31464 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) 31465 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 31466 31467 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) 31468 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 31469 31470 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) 31471 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 31472 31473 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) 31474 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 31475 31476 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) 31477 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 31478 31479 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) 31480 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 31481 314826.56.3.13 Comparison (equal-to) 31483............................... 31484 31485 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) 31486 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 31487 31488 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) 31489 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 31490 31491 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) 31492 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 31493 31494 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) 31495 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 31496 31497 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) 31498 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 31499 31500 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) 31501 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 31502 31503 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) 31504 _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0' 31505 31506 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) 31507 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 31508 31509 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) 31510 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 31511 31512 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) 31513 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 31514 31515 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) 31516 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 31517 31518 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) 31519 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 31520 31521 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) 31522 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 31523 31524 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) 31525 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 31526 31527 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) 31528 _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0' 31529 31530 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) 31531 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 31532 315336.56.3.14 Comparison (greater-than-or-equal-to) 31534............................................... 31535 31536 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) 31537 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 31538 31539 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) 31540 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 31541 31542 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) 31543 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 31544 31545 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) 31546 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 31547 31548 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) 31549 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 31550 31551 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) 31552 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 31553 31554 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) 31555 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 31556 31557 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) 31558 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 31559 31560 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) 31561 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 31562 31563 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) 31564 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 31565 31566 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) 31567 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 31568 31569 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) 31570 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 31571 31572 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) 31573 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 31574 31575 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) 31576 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 31577 315786.56.3.15 Comparison (less-than-or-equal-to) 31579............................................ 31580 31581 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) 31582 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 31583 31584 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) 31585 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 31586 31587 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) 31588 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 31589 31590 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) 31591 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 31592 31593 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) 31594 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 31595 31596 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) 31597 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 31598 31599 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) 31600 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 31601 31602 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) 31603 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 31604 31605 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) 31606 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 31607 31608 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) 31609 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 31610 31611 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) 31612 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 31613 31614 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) 31615 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 31616 31617 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) 31618 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 31619 31620 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) 31621 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 31622 316236.56.3.16 Comparison (greater-than) 31624................................... 31625 31626 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) 31627 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 31628 31629 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) 31630 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 31631 31632 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) 31633 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 31634 31635 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) 31636 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 31637 31638 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) 31639 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 31640 31641 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) 31642 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 31643 31644 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) 31645 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 31646 31647 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) 31648 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 31649 31650 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) 31651 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 31652 31653 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) 31654 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 31655 31656 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) 31657 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 31658 31659 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) 31660 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 31661 31662 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) 31663 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 31664 31665 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) 31666 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 31667 316686.56.3.17 Comparison (less-than) 31669................................ 31670 31671 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) 31672 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 31673 31674 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) 31675 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 31676 31677 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) 31678 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 31679 31680 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) 31681 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 31682 31683 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) 31684 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 31685 31686 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) 31687 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 31688 31689 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) 31690 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 31691 31692 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) 31693 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 31694 31695 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) 31696 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 31697 31698 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) 31699 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 31700 31701 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) 31702 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 31703 31704 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) 31705 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 31706 31707 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) 31708 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 31709 31710 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) 31711 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 31712 317136.56.3.18 Comparison (absolute greater-than-or-equal-to) 31714........................................................ 31715 31716 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) 31717 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 31718 31719 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) 31720 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 31721 317226.56.3.19 Comparison (absolute less-than-or-equal-to) 31723..................................................... 31724 31725 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) 31726 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 31727 31728 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) 31729 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 31730 317316.56.3.20 Comparison (absolute greater-than) 31732............................................ 31733 31734 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) 31735 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 31736 31737 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) 31738 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 31739 317406.56.3.21 Comparison (absolute less-than) 31741......................................... 31742 31743 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) 31744 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 31745 31746 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) 31747 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 31748 317496.56.3.22 Test bits 31750................... 31751 31752 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) 31753 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 31754 31755 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) 31756 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 31757 31758 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) 31759 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 31760 31761 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) 31762 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 31763 31764 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) 31765 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 31766 31767 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) 31768 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 31769 31770 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) 31771 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 31772 31773 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) 31774 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 31775 31776 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) 31777 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 31778 31779 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) 31780 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 31781 31782 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) 31783 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 31784 31785 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) 31786 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 31787 31788 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) 31789 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 31790 31791 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) 31792 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 31793 317946.56.3.23 Absolute difference 31795............................. 31796 31797 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) 31798 _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0' 31799 31800 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) 31801 _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0' 31802 31803 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) 31804 _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0' 31805 31806 * int32x2_t vabd_s32 (int32x2_t, int32x2_t) 31807 _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0' 31808 31809 * int16x4_t vabd_s16 (int16x4_t, int16x4_t) 31810 _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0' 31811 31812 * int8x8_t vabd_s8 (int8x8_t, int8x8_t) 31813 _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0' 31814 31815 * float32x2_t vabd_f32 (float32x2_t, float32x2_t) 31816 _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0' 31817 31818 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) 31819 _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0' 31820 31821 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) 31822 _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0' 31823 31824 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) 31825 _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0' 31826 31827 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) 31828 _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0' 31829 31830 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) 31831 _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0' 31832 31833 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) 31834 _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0' 31835 31836 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) 31837 _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0' 31838 31839 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) 31840 _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0' 31841 31842 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) 31843 _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0' 31844 31845 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) 31846 _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0' 31847 31848 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) 31849 _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0' 31850 31851 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) 31852 _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0' 31853 31854 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) 31855 _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0' 31856 318576.56.3.24 Absolute difference and accumulate 31858............................................ 31859 31860 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 31861 _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0' 31862 31863 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 31864 _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0' 31865 31866 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 31867 _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0' 31868 31869 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) 31870 _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0' 31871 31872 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) 31873 _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0' 31874 31875 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) 31876 _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0' 31877 31878 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 31879 _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0' 31880 31881 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 31882 _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0' 31883 31884 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 31885 _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0' 31886 31887 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) 31888 _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0' 31889 31890 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) 31891 _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0' 31892 31893 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) 31894 _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0' 31895 31896 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 31897 _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0' 31898 31899 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 31900 _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0' 31901 31902 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 31903 _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0' 31904 31905 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) 31906 _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0' 31907 31908 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) 31909 _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0' 31910 31911 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) 31912 _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0' 31913 319146.56.3.25 Maximum 31915................. 31916 31917 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) 31918 _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0' 31919 31920 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) 31921 _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0' 31922 31923 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) 31924 _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0' 31925 31926 * int32x2_t vmax_s32 (int32x2_t, int32x2_t) 31927 _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0' 31928 31929 * int16x4_t vmax_s16 (int16x4_t, int16x4_t) 31930 _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0' 31931 31932 * int8x8_t vmax_s8 (int8x8_t, int8x8_t) 31933 _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0' 31934 31935 * float32x2_t vmax_f32 (float32x2_t, float32x2_t) 31936 _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0' 31937 31938 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) 31939 _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0' 31940 31941 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) 31942 _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0' 31943 31944 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) 31945 _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0' 31946 31947 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) 31948 _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0' 31949 31950 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) 31951 _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0' 31952 31953 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) 31954 _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0' 31955 31956 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) 31957 _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0' 31958 319596.56.3.26 Minimum 31960................. 31961 31962 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) 31963 _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0' 31964 31965 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) 31966 _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0' 31967 31968 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) 31969 _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0' 31970 31971 * int32x2_t vmin_s32 (int32x2_t, int32x2_t) 31972 _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0' 31973 31974 * int16x4_t vmin_s16 (int16x4_t, int16x4_t) 31975 _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0' 31976 31977 * int8x8_t vmin_s8 (int8x8_t, int8x8_t) 31978 _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0' 31979 31980 * float32x2_t vmin_f32 (float32x2_t, float32x2_t) 31981 _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0' 31982 31983 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) 31984 _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0' 31985 31986 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) 31987 _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0' 31988 31989 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) 31990 _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0' 31991 31992 * int32x4_t vminq_s32 (int32x4_t, int32x4_t) 31993 _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0' 31994 31995 * int16x8_t vminq_s16 (int16x8_t, int16x8_t) 31996 _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0' 31997 31998 * int8x16_t vminq_s8 (int8x16_t, int8x16_t) 31999 _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0' 32000 32001 * float32x4_t vminq_f32 (float32x4_t, float32x4_t) 32002 _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0' 32003 320046.56.3.27 Pairwise add 32005...................... 32006 32007 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) 32008 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 32009 32010 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) 32011 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 32012 32013 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) 32014 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 32015 32016 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) 32017 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 32018 32019 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) 32020 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 32021 32022 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) 32023 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 32024 32025 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) 32026 _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0' 32027 32028 * uint64x1_t vpaddl_u32 (uint32x2_t) 32029 _Form of expected instruction(s):_ `vpaddl.u32 D0, D0' 32030 32031 * uint32x2_t vpaddl_u16 (uint16x4_t) 32032 _Form of expected instruction(s):_ `vpaddl.u16 D0, D0' 32033 32034 * uint16x4_t vpaddl_u8 (uint8x8_t) 32035 _Form of expected instruction(s):_ `vpaddl.u8 D0, D0' 32036 32037 * int64x1_t vpaddl_s32 (int32x2_t) 32038 _Form of expected instruction(s):_ `vpaddl.s32 D0, D0' 32039 32040 * int32x2_t vpaddl_s16 (int16x4_t) 32041 _Form of expected instruction(s):_ `vpaddl.s16 D0, D0' 32042 32043 * int16x4_t vpaddl_s8 (int8x8_t) 32044 _Form of expected instruction(s):_ `vpaddl.s8 D0, D0' 32045 32046 * uint64x2_t vpaddlq_u32 (uint32x4_t) 32047 _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0' 32048 32049 * uint32x4_t vpaddlq_u16 (uint16x8_t) 32050 _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0' 32051 32052 * uint16x8_t vpaddlq_u8 (uint8x16_t) 32053 _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0' 32054 32055 * int64x2_t vpaddlq_s32 (int32x4_t) 32056 _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0' 32057 32058 * int32x4_t vpaddlq_s16 (int16x8_t) 32059 _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0' 32060 32061 * int16x8_t vpaddlq_s8 (int8x16_t) 32062 _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0' 32063 320646.56.3.28 Pairwise add, single_opcode widen and accumulate 32065.......................................................... 32066 32067 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) 32068 _Form of expected instruction(s):_ `vpadal.u32 D0, D0' 32069 32070 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) 32071 _Form of expected instruction(s):_ `vpadal.u16 D0, D0' 32072 32073 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) 32074 _Form of expected instruction(s):_ `vpadal.u8 D0, D0' 32075 32076 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) 32077 _Form of expected instruction(s):_ `vpadal.s32 D0, D0' 32078 32079 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) 32080 _Form of expected instruction(s):_ `vpadal.s16 D0, D0' 32081 32082 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) 32083 _Form of expected instruction(s):_ `vpadal.s8 D0, D0' 32084 32085 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) 32086 _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0' 32087 32088 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) 32089 _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0' 32090 32091 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) 32092 _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0' 32093 32094 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) 32095 _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0' 32096 32097 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) 32098 _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0' 32099 32100 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) 32101 _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0' 32102 321036.56.3.29 Folding maximum 32104......................... 32105 32106 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) 32107 _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0' 32108 32109 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) 32110 _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0' 32111 32112 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) 32113 _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0' 32114 32115 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) 32116 _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0' 32117 32118 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) 32119 _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0' 32120 32121 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) 32122 _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0' 32123 32124 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) 32125 _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0' 32126 321276.56.3.30 Folding minimum 32128......................... 32129 32130 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) 32131 _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0' 32132 32133 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) 32134 _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0' 32135 32136 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) 32137 _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0' 32138 32139 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) 32140 _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0' 32141 32142 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) 32143 _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0' 32144 32145 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) 32146 _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0' 32147 32148 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) 32149 _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0' 32150 321516.56.3.31 Reciprocal step 32152......................... 32153 32154 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) 32155 _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0' 32156 32157 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) 32158 _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0' 32159 32160 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) 32161 _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0' 32162 32163 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) 32164 _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0' 32165 321666.56.3.32 Vector shift left 32167........................... 32168 32169 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) 32170 _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0' 32171 32172 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) 32173 _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0' 32174 32175 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) 32176 _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0' 32177 32178 * int32x2_t vshl_s32 (int32x2_t, int32x2_t) 32179 _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0' 32180 32181 * int16x4_t vshl_s16 (int16x4_t, int16x4_t) 32182 _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0' 32183 32184 * int8x8_t vshl_s8 (int8x8_t, int8x8_t) 32185 _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0' 32186 32187 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) 32188 _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0' 32189 32190 * int64x1_t vshl_s64 (int64x1_t, int64x1_t) 32191 _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0' 32192 32193 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) 32194 _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0' 32195 32196 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) 32197 _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0' 32198 32199 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) 32200 _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0' 32201 32202 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) 32203 _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0' 32204 32205 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) 32206 _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0' 32207 32208 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) 32209 _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0' 32210 32211 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) 32212 _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0' 32213 32214 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) 32215 _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0' 32216 32217 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) 32218 _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0' 32219 32220 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) 32221 _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0' 32222 32223 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) 32224 _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0' 32225 32226 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) 32227 _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0' 32228 32229 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) 32230 _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0' 32231 32232 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) 32233 _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0' 32234 32235 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) 32236 _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0' 32237 32238 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) 32239 _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0' 32240 32241 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) 32242 _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0' 32243 32244 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) 32245 _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0' 32246 32247 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) 32248 _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0' 32249 32250 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) 32251 _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0' 32252 32253 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) 32254 _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0' 32255 32256 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) 32257 _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0' 32258 32259 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) 32260 _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0' 32261 32262 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) 32263 _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0' 32264 32265 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) 32266 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0' 32267 32268 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) 32269 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0' 32270 32271 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) 32272 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0' 32273 32274 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) 32275 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0' 32276 32277 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) 32278 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0' 32279 32280 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) 32281 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0' 32282 32283 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) 32284 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0' 32285 32286 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) 32287 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0' 32288 32289 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) 32290 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0' 32291 32292 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) 32293 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0' 32294 32295 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) 32296 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0' 32297 32298 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) 32299 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0' 32300 32301 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) 32302 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0' 32303 32304 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) 32305 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0' 32306 32307 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) 32308 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0' 32309 32310 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) 32311 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0' 32312 32313 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) 32314 _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0' 32315 32316 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) 32317 _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0' 32318 32319 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) 32320 _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0' 32321 32322 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) 32323 _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0' 32324 32325 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) 32326 _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0' 32327 32328 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) 32329 _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0' 32330 32331 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) 32332 _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0' 32333 32334 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) 32335 _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0' 32336 32337 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) 32338 _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0' 32339 32340 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) 32341 _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0' 32342 32343 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) 32344 _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0' 32345 32346 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) 32347 _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0' 32348 32349 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) 32350 _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0' 32351 32352 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) 32353 _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0' 32354 32355 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) 32356 _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0' 32357 32358 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) 32359 _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0' 32360 323616.56.3.33 Vector shift left by constant 32362....................................... 32363 32364 * uint32x2_t vshl_n_u32 (uint32x2_t, const int) 32365 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 32366 32367 * uint16x4_t vshl_n_u16 (uint16x4_t, const int) 32368 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 32369 32370 * uint8x8_t vshl_n_u8 (uint8x8_t, const int) 32371 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 32372 32373 * int32x2_t vshl_n_s32 (int32x2_t, const int) 32374 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 32375 32376 * int16x4_t vshl_n_s16 (int16x4_t, const int) 32377 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 32378 32379 * int8x8_t vshl_n_s8 (int8x8_t, const int) 32380 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 32381 32382 * uint64x1_t vshl_n_u64 (uint64x1_t, const int) 32383 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 32384 32385 * int64x1_t vshl_n_s64 (int64x1_t, const int) 32386 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 32387 32388 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) 32389 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 32390 32391 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) 32392 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 32393 32394 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) 32395 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 32396 32397 * int32x4_t vshlq_n_s32 (int32x4_t, const int) 32398 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 32399 32400 * int16x8_t vshlq_n_s16 (int16x8_t, const int) 32401 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 32402 32403 * int8x16_t vshlq_n_s8 (int8x16_t, const int) 32404 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 32405 32406 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) 32407 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 32408 32409 * int64x2_t vshlq_n_s64 (int64x2_t, const int) 32410 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 32411 32412 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) 32413 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0' 32414 32415 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) 32416 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0' 32417 32418 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) 32419 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0' 32420 32421 * int32x2_t vqshl_n_s32 (int32x2_t, const int) 32422 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0' 32423 32424 * int16x4_t vqshl_n_s16 (int16x4_t, const int) 32425 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0' 32426 32427 * int8x8_t vqshl_n_s8 (int8x8_t, const int) 32428 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0' 32429 32430 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) 32431 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0' 32432 32433 * int64x1_t vqshl_n_s64 (int64x1_t, const int) 32434 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0' 32435 32436 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) 32437 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0' 32438 32439 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) 32440 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0' 32441 32442 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) 32443 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0' 32444 32445 * int32x4_t vqshlq_n_s32 (int32x4_t, const int) 32446 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0' 32447 32448 * int16x8_t vqshlq_n_s16 (int16x8_t, const int) 32449 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0' 32450 32451 * int8x16_t vqshlq_n_s8 (int8x16_t, const int) 32452 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0' 32453 32454 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) 32455 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0' 32456 32457 * int64x2_t vqshlq_n_s64 (int64x2_t, const int) 32458 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0' 32459 32460 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) 32461 _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0' 32462 32463 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) 32464 _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0' 32465 32466 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) 32467 _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0' 32468 32469 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) 32470 _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0' 32471 32472 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) 32473 _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0' 32474 32475 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) 32476 _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0' 32477 32478 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) 32479 _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0' 32480 32481 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) 32482 _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0' 32483 32484 * uint64x2_t vshll_n_u32 (uint32x2_t, const int) 32485 _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0' 32486 32487 * uint32x4_t vshll_n_u16 (uint16x4_t, const int) 32488 _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0' 32489 32490 * uint16x8_t vshll_n_u8 (uint8x8_t, const int) 32491 _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0' 32492 32493 * int64x2_t vshll_n_s32 (int32x2_t, const int) 32494 _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0' 32495 32496 * int32x4_t vshll_n_s16 (int16x4_t, const int) 32497 _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0' 32498 32499 * int16x8_t vshll_n_s8 (int8x8_t, const int) 32500 _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0' 32501 325026.56.3.34 Vector shift right by constant 32503........................................ 32504 32505 * uint32x2_t vshr_n_u32 (uint32x2_t, const int) 32506 _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0' 32507 32508 * uint16x4_t vshr_n_u16 (uint16x4_t, const int) 32509 _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0' 32510 32511 * uint8x8_t vshr_n_u8 (uint8x8_t, const int) 32512 _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0' 32513 32514 * int32x2_t vshr_n_s32 (int32x2_t, const int) 32515 _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0' 32516 32517 * int16x4_t vshr_n_s16 (int16x4_t, const int) 32518 _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0' 32519 32520 * int8x8_t vshr_n_s8 (int8x8_t, const int) 32521 _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0' 32522 32523 * uint64x1_t vshr_n_u64 (uint64x1_t, const int) 32524 _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0' 32525 32526 * int64x1_t vshr_n_s64 (int64x1_t, const int) 32527 _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0' 32528 32529 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) 32530 _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0' 32531 32532 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) 32533 _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0' 32534 32535 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) 32536 _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0' 32537 32538 * int32x4_t vshrq_n_s32 (int32x4_t, const int) 32539 _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0' 32540 32541 * int16x8_t vshrq_n_s16 (int16x8_t, const int) 32542 _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0' 32543 32544 * int8x16_t vshrq_n_s8 (int8x16_t, const int) 32545 _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0' 32546 32547 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) 32548 _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0' 32549 32550 * int64x2_t vshrq_n_s64 (int64x2_t, const int) 32551 _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0' 32552 32553 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) 32554 _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0' 32555 32556 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) 32557 _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0' 32558 32559 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) 32560 _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0' 32561 32562 * int32x2_t vrshr_n_s32 (int32x2_t, const int) 32563 _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0' 32564 32565 * int16x4_t vrshr_n_s16 (int16x4_t, const int) 32566 _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0' 32567 32568 * int8x8_t vrshr_n_s8 (int8x8_t, const int) 32569 _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0' 32570 32571 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) 32572 _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0' 32573 32574 * int64x1_t vrshr_n_s64 (int64x1_t, const int) 32575 _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0' 32576 32577 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) 32578 _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0' 32579 32580 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) 32581 _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0' 32582 32583 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) 32584 _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0' 32585 32586 * int32x4_t vrshrq_n_s32 (int32x4_t, const int) 32587 _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0' 32588 32589 * int16x8_t vrshrq_n_s16 (int16x8_t, const int) 32590 _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0' 32591 32592 * int8x16_t vrshrq_n_s8 (int8x16_t, const int) 32593 _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0' 32594 32595 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) 32596 _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0' 32597 32598 * int64x2_t vrshrq_n_s64 (int64x2_t, const int) 32599 _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0' 32600 32601 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) 32602 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 32603 32604 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) 32605 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 32606 32607 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) 32608 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 32609 32610 * int32x2_t vshrn_n_s64 (int64x2_t, const int) 32611 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 32612 32613 * int16x4_t vshrn_n_s32 (int32x4_t, const int) 32614 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 32615 32616 * int8x8_t vshrn_n_s16 (int16x8_t, const int) 32617 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 32618 32619 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) 32620 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 32621 32622 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) 32623 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 32624 32625 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) 32626 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 32627 32628 * int32x2_t vrshrn_n_s64 (int64x2_t, const int) 32629 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 32630 32631 * int16x4_t vrshrn_n_s32 (int32x4_t, const int) 32632 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 32633 32634 * int8x8_t vrshrn_n_s16 (int16x8_t, const int) 32635 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 32636 32637 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) 32638 _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0' 32639 32640 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) 32641 _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0' 32642 32643 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) 32644 _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0' 32645 32646 * int32x2_t vqshrn_n_s64 (int64x2_t, const int) 32647 _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0' 32648 32649 * int16x4_t vqshrn_n_s32 (int32x4_t, const int) 32650 _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0' 32651 32652 * int8x8_t vqshrn_n_s16 (int16x8_t, const int) 32653 _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0' 32654 32655 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) 32656 _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0' 32657 32658 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) 32659 _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0' 32660 32661 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) 32662 _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0' 32663 32664 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) 32665 _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0' 32666 32667 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) 32668 _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0' 32669 32670 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) 32671 _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0' 32672 32673 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) 32674 _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0' 32675 32676 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) 32677 _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0' 32678 32679 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) 32680 _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0' 32681 32682 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) 32683 _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0' 32684 32685 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) 32686 _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0' 32687 32688 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) 32689 _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0' 32690 326916.56.3.35 Vector shift right by constant and accumulate 32692....................................................... 32693 32694 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) 32695 _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0' 32696 32697 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) 32698 _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0' 32699 32700 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) 32701 _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0' 32702 32703 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) 32704 _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0' 32705 32706 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) 32707 _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0' 32708 32709 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) 32710 _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0' 32711 32712 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) 32713 _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0' 32714 32715 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) 32716 _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0' 32717 32718 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 32719 _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0' 32720 32721 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 32722 _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0' 32723 32724 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 32725 _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0' 32726 32727 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) 32728 _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0' 32729 32730 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) 32731 _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0' 32732 32733 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) 32734 _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0' 32735 32736 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 32737 _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0' 32738 32739 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) 32740 _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0' 32741 32742 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) 32743 _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0' 32744 32745 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) 32746 _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0' 32747 32748 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) 32749 _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0' 32750 32751 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) 32752 _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0' 32753 32754 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) 32755 _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0' 32756 32757 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) 32758 _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0' 32759 32760 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) 32761 _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0' 32762 32763 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) 32764 _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0' 32765 32766 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 32767 _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0' 32768 32769 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 32770 _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0' 32771 32772 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 32773 _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0' 32774 32775 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) 32776 _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0' 32777 32778 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) 32779 _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0' 32780 32781 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) 32782 _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0' 32783 32784 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 32785 _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0' 32786 32787 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) 32788 _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0' 32789 327906.56.3.36 Vector shift right and insert 32791....................................... 32792 32793 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) 32794 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 32795 32796 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) 32797 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 32798 32799 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) 32800 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 32801 32802 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) 32803 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 32804 32805 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) 32806 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 32807 32808 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) 32809 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 32810 32811 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) 32812 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 32813 32814 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) 32815 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 32816 32817 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) 32818 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 32819 32820 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) 32821 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 32822 32823 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) 32824 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 32825 32826 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) 32827 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 32828 32829 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) 32830 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 32831 32832 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) 32833 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 32834 32835 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) 32836 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 32837 32838 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) 32839 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 32840 32841 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) 32842 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 32843 32844 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) 32845 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 32846 32847 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) 32848 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 32849 32850 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) 32851 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 32852 328536.56.3.37 Vector shift left and insert 32854...................................... 32855 32856 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) 32857 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 32858 32859 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) 32860 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 32861 32862 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) 32863 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 32864 32865 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) 32866 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 32867 32868 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) 32869 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 32870 32871 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) 32872 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 32873 32874 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) 32875 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 32876 32877 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) 32878 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 32879 32880 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) 32881 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 32882 32883 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) 32884 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 32885 32886 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) 32887 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 32888 32889 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) 32890 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 32891 32892 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) 32893 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 32894 32895 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) 32896 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 32897 32898 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) 32899 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 32900 32901 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) 32902 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 32903 32904 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) 32905 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 32906 32907 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) 32908 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 32909 32910 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) 32911 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 32912 32913 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) 32914 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 32915 329166.56.3.38 Absolute value 32917........................ 32918 32919 * float32x2_t vabs_f32 (float32x2_t) 32920 _Form of expected instruction(s):_ `vabs.f32 D0, D0' 32921 32922 * int32x2_t vabs_s32 (int32x2_t) 32923 _Form of expected instruction(s):_ `vabs.s32 D0, D0' 32924 32925 * int16x4_t vabs_s16 (int16x4_t) 32926 _Form of expected instruction(s):_ `vabs.s16 D0, D0' 32927 32928 * int8x8_t vabs_s8 (int8x8_t) 32929 _Form of expected instruction(s):_ `vabs.s8 D0, D0' 32930 32931 * float32x4_t vabsq_f32 (float32x4_t) 32932 _Form of expected instruction(s):_ `vabs.f32 Q0, Q0' 32933 32934 * int32x4_t vabsq_s32 (int32x4_t) 32935 _Form of expected instruction(s):_ `vabs.s32 Q0, Q0' 32936 32937 * int16x8_t vabsq_s16 (int16x8_t) 32938 _Form of expected instruction(s):_ `vabs.s16 Q0, Q0' 32939 32940 * int8x16_t vabsq_s8 (int8x16_t) 32941 _Form of expected instruction(s):_ `vabs.s8 Q0, Q0' 32942 32943 * int32x2_t vqabs_s32 (int32x2_t) 32944 _Form of expected instruction(s):_ `vqabs.s32 D0, D0' 32945 32946 * int16x4_t vqabs_s16 (int16x4_t) 32947 _Form of expected instruction(s):_ `vqabs.s16 D0, D0' 32948 32949 * int8x8_t vqabs_s8 (int8x8_t) 32950 _Form of expected instruction(s):_ `vqabs.s8 D0, D0' 32951 32952 * int32x4_t vqabsq_s32 (int32x4_t) 32953 _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0' 32954 32955 * int16x8_t vqabsq_s16 (int16x8_t) 32956 _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0' 32957 32958 * int8x16_t vqabsq_s8 (int8x16_t) 32959 _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0' 32960 329616.56.3.39 Negation 32962.................. 32963 32964 * float32x2_t vneg_f32 (float32x2_t) 32965 _Form of expected instruction(s):_ `vneg.f32 D0, D0' 32966 32967 * int32x2_t vneg_s32 (int32x2_t) 32968 _Form of expected instruction(s):_ `vneg.s32 D0, D0' 32969 32970 * int16x4_t vneg_s16 (int16x4_t) 32971 _Form of expected instruction(s):_ `vneg.s16 D0, D0' 32972 32973 * int8x8_t vneg_s8 (int8x8_t) 32974 _Form of expected instruction(s):_ `vneg.s8 D0, D0' 32975 32976 * float32x4_t vnegq_f32 (float32x4_t) 32977 _Form of expected instruction(s):_ `vneg.f32 Q0, Q0' 32978 32979 * int32x4_t vnegq_s32 (int32x4_t) 32980 _Form of expected instruction(s):_ `vneg.s32 Q0, Q0' 32981 32982 * int16x8_t vnegq_s16 (int16x8_t) 32983 _Form of expected instruction(s):_ `vneg.s16 Q0, Q0' 32984 32985 * int8x16_t vnegq_s8 (int8x16_t) 32986 _Form of expected instruction(s):_ `vneg.s8 Q0, Q0' 32987 32988 * int32x2_t vqneg_s32 (int32x2_t) 32989 _Form of expected instruction(s):_ `vqneg.s32 D0, D0' 32990 32991 * int16x4_t vqneg_s16 (int16x4_t) 32992 _Form of expected instruction(s):_ `vqneg.s16 D0, D0' 32993 32994 * int8x8_t vqneg_s8 (int8x8_t) 32995 _Form of expected instruction(s):_ `vqneg.s8 D0, D0' 32996 32997 * int32x4_t vqnegq_s32 (int32x4_t) 32998 _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0' 32999 33000 * int16x8_t vqnegq_s16 (int16x8_t) 33001 _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0' 33002 33003 * int8x16_t vqnegq_s8 (int8x16_t) 33004 _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0' 33005 330066.56.3.40 Bitwise not 33007..................... 33008 33009 * uint32x2_t vmvn_u32 (uint32x2_t) 33010 _Form of expected instruction(s):_ `vmvn D0, D0' 33011 33012 * uint16x4_t vmvn_u16 (uint16x4_t) 33013 _Form of expected instruction(s):_ `vmvn D0, D0' 33014 33015 * uint8x8_t vmvn_u8 (uint8x8_t) 33016 _Form of expected instruction(s):_ `vmvn D0, D0' 33017 33018 * int32x2_t vmvn_s32 (int32x2_t) 33019 _Form of expected instruction(s):_ `vmvn D0, D0' 33020 33021 * int16x4_t vmvn_s16 (int16x4_t) 33022 _Form of expected instruction(s):_ `vmvn D0, D0' 33023 33024 * int8x8_t vmvn_s8 (int8x8_t) 33025 _Form of expected instruction(s):_ `vmvn D0, D0' 33026 33027 * poly8x8_t vmvn_p8 (poly8x8_t) 33028 _Form of expected instruction(s):_ `vmvn D0, D0' 33029 33030 * uint32x4_t vmvnq_u32 (uint32x4_t) 33031 _Form of expected instruction(s):_ `vmvn Q0, Q0' 33032 33033 * uint16x8_t vmvnq_u16 (uint16x8_t) 33034 _Form of expected instruction(s):_ `vmvn Q0, Q0' 33035 33036 * uint8x16_t vmvnq_u8 (uint8x16_t) 33037 _Form of expected instruction(s):_ `vmvn Q0, Q0' 33038 33039 * int32x4_t vmvnq_s32 (int32x4_t) 33040 _Form of expected instruction(s):_ `vmvn Q0, Q0' 33041 33042 * int16x8_t vmvnq_s16 (int16x8_t) 33043 _Form of expected instruction(s):_ `vmvn Q0, Q0' 33044 33045 * int8x16_t vmvnq_s8 (int8x16_t) 33046 _Form of expected instruction(s):_ `vmvn Q0, Q0' 33047 33048 * poly8x16_t vmvnq_p8 (poly8x16_t) 33049 _Form of expected instruction(s):_ `vmvn Q0, Q0' 33050 330516.56.3.41 Count leading sign bits 33052................................. 33053 33054 * int32x2_t vcls_s32 (int32x2_t) 33055 _Form of expected instruction(s):_ `vcls.s32 D0, D0' 33056 33057 * int16x4_t vcls_s16 (int16x4_t) 33058 _Form of expected instruction(s):_ `vcls.s16 D0, D0' 33059 33060 * int8x8_t vcls_s8 (int8x8_t) 33061 _Form of expected instruction(s):_ `vcls.s8 D0, D0' 33062 33063 * int32x4_t vclsq_s32 (int32x4_t) 33064 _Form of expected instruction(s):_ `vcls.s32 Q0, Q0' 33065 33066 * int16x8_t vclsq_s16 (int16x8_t) 33067 _Form of expected instruction(s):_ `vcls.s16 Q0, Q0' 33068 33069 * int8x16_t vclsq_s8 (int8x16_t) 33070 _Form of expected instruction(s):_ `vcls.s8 Q0, Q0' 33071 330726.56.3.42 Count leading zeros 33073............................. 33074 33075 * uint32x2_t vclz_u32 (uint32x2_t) 33076 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 33077 33078 * uint16x4_t vclz_u16 (uint16x4_t) 33079 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 33080 33081 * uint8x8_t vclz_u8 (uint8x8_t) 33082 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 33083 33084 * int32x2_t vclz_s32 (int32x2_t) 33085 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 33086 33087 * int16x4_t vclz_s16 (int16x4_t) 33088 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 33089 33090 * int8x8_t vclz_s8 (int8x8_t) 33091 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 33092 33093 * uint32x4_t vclzq_u32 (uint32x4_t) 33094 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 33095 33096 * uint16x8_t vclzq_u16 (uint16x8_t) 33097 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 33098 33099 * uint8x16_t vclzq_u8 (uint8x16_t) 33100 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 33101 33102 * int32x4_t vclzq_s32 (int32x4_t) 33103 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 33104 33105 * int16x8_t vclzq_s16 (int16x8_t) 33106 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 33107 33108 * int8x16_t vclzq_s8 (int8x16_t) 33109 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 33110 331116.56.3.43 Count number of set bits 33112.................................. 33113 33114 * uint8x8_t vcnt_u8 (uint8x8_t) 33115 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 33116 33117 * int8x8_t vcnt_s8 (int8x8_t) 33118 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 33119 33120 * poly8x8_t vcnt_p8 (poly8x8_t) 33121 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 33122 33123 * uint8x16_t vcntq_u8 (uint8x16_t) 33124 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 33125 33126 * int8x16_t vcntq_s8 (int8x16_t) 33127 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 33128 33129 * poly8x16_t vcntq_p8 (poly8x16_t) 33130 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 33131 331326.56.3.44 Reciprocal estimate 33133............................. 33134 33135 * float32x2_t vrecpe_f32 (float32x2_t) 33136 _Form of expected instruction(s):_ `vrecpe.f32 D0, D0' 33137 33138 * uint32x2_t vrecpe_u32 (uint32x2_t) 33139 _Form of expected instruction(s):_ `vrecpe.u32 D0, D0' 33140 33141 * float32x4_t vrecpeq_f32 (float32x4_t) 33142 _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0' 33143 33144 * uint32x4_t vrecpeq_u32 (uint32x4_t) 33145 _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0' 33146 331476.56.3.45 Reciprocal square-root estimate 33148......................................... 33149 33150 * float32x2_t vrsqrte_f32 (float32x2_t) 33151 _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0' 33152 33153 * uint32x2_t vrsqrte_u32 (uint32x2_t) 33154 _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0' 33155 33156 * float32x4_t vrsqrteq_f32 (float32x4_t) 33157 _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0' 33158 33159 * uint32x4_t vrsqrteq_u32 (uint32x4_t) 33160 _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0' 33161 331626.56.3.46 Get lanes from a vector 33163................................. 33164 33165 * uint32_t vget_lane_u32 (uint32x2_t, const int) 33166 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33167 33168 * uint16_t vget_lane_u16 (uint16x4_t, const int) 33169 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 33170 33171 * uint8_t vget_lane_u8 (uint8x8_t, const int) 33172 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 33173 33174 * int32_t vget_lane_s32 (int32x2_t, const int) 33175 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33176 33177 * int16_t vget_lane_s16 (int16x4_t, const int) 33178 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 33179 33180 * int8_t vget_lane_s8 (int8x8_t, const int) 33181 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 33182 33183 * float32_t vget_lane_f32 (float32x2_t, const int) 33184 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33185 33186 * poly16_t vget_lane_p16 (poly16x4_t, const int) 33187 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 33188 33189 * poly8_t vget_lane_p8 (poly8x8_t, const int) 33190 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 33191 33192 * uint64_t vget_lane_u64 (uint64x1_t, const int) 33193 33194 * int64_t vget_lane_s64 (int64x1_t, const int) 33195 33196 * uint32_t vgetq_lane_u32 (uint32x4_t, const int) 33197 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33198 33199 * uint16_t vgetq_lane_u16 (uint16x8_t, const int) 33200 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 33201 33202 * uint8_t vgetq_lane_u8 (uint8x16_t, const int) 33203 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 33204 33205 * int32_t vgetq_lane_s32 (int32x4_t, const int) 33206 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33207 33208 * int16_t vgetq_lane_s16 (int16x8_t, const int) 33209 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 33210 33211 * int8_t vgetq_lane_s8 (int8x16_t, const int) 33212 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 33213 33214 * float32_t vgetq_lane_f32 (float32x4_t, const int) 33215 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33216 33217 * poly16_t vgetq_lane_p16 (poly16x8_t, const int) 33218 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 33219 33220 * poly8_t vgetq_lane_p8 (poly8x16_t, const int) 33221 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 33222 33223 * uint64_t vgetq_lane_u64 (uint64x2_t, const int) 33224 _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd 33225 R0, R0, D0' 33226 33227 * int64_t vgetq_lane_s64 (int64x2_t, const int) 33228 _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd 33229 R0, R0, D0' 33230 332316.56.3.47 Set lanes in a vector 33232............................... 33233 33234 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) 33235 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33236 33237 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) 33238 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33239 33240 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) 33241 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33242 33243 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) 33244 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33245 33246 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) 33247 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33248 33249 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) 33250 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33251 33252 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) 33253 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33254 33255 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) 33256 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33257 33258 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) 33259 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33260 33261 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) 33262 33263 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) 33264 33265 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) 33266 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33267 33268 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) 33269 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33270 33271 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) 33272 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33273 33274 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) 33275 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33276 33277 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) 33278 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33279 33280 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) 33281 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33282 33283 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) 33284 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33285 33286 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) 33287 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33288 33289 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) 33290 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33291 33292 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) 33293 _Form of expected instruction(s):_ `vmov D0, R0, R0' 33294 33295 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) 33296 _Form of expected instruction(s):_ `vmov D0, R0, R0' 33297 332986.56.3.48 Create vector from literal bit pattern 33299................................................ 33300 33301 * uint32x2_t vcreate_u32 (uint64_t) 33302 33303 * uint16x4_t vcreate_u16 (uint64_t) 33304 33305 * uint8x8_t vcreate_u8 (uint64_t) 33306 33307 * int32x2_t vcreate_s32 (uint64_t) 33308 33309 * int16x4_t vcreate_s16 (uint64_t) 33310 33311 * int8x8_t vcreate_s8 (uint64_t) 33312 33313 * uint64x1_t vcreate_u64 (uint64_t) 33314 33315 * int64x1_t vcreate_s64 (uint64_t) 33316 33317 * float32x2_t vcreate_f32 (uint64_t) 33318 33319 * poly16x4_t vcreate_p16 (uint64_t) 33320 33321 * poly8x8_t vcreate_p8 (uint64_t) 33322 333236.56.3.49 Set all lanes to the same value 33324......................................... 33325 33326 * uint32x2_t vdup_n_u32 (uint32_t) 33327 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33328 33329 * uint16x4_t vdup_n_u16 (uint16_t) 33330 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33331 33332 * uint8x8_t vdup_n_u8 (uint8_t) 33333 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33334 33335 * int32x2_t vdup_n_s32 (int32_t) 33336 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33337 33338 * int16x4_t vdup_n_s16 (int16_t) 33339 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33340 33341 * int8x8_t vdup_n_s8 (int8_t) 33342 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33343 33344 * float32x2_t vdup_n_f32 (float32_t) 33345 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33346 33347 * poly16x4_t vdup_n_p16 (poly16_t) 33348 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33349 33350 * poly8x8_t vdup_n_p8 (poly8_t) 33351 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33352 33353 * uint64x1_t vdup_n_u64 (uint64_t) 33354 33355 * int64x1_t vdup_n_s64 (int64_t) 33356 33357 * uint32x4_t vdupq_n_u32 (uint32_t) 33358 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33359 33360 * uint16x8_t vdupq_n_u16 (uint16_t) 33361 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33362 33363 * uint8x16_t vdupq_n_u8 (uint8_t) 33364 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33365 33366 * int32x4_t vdupq_n_s32 (int32_t) 33367 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33368 33369 * int16x8_t vdupq_n_s16 (int16_t) 33370 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33371 33372 * int8x16_t vdupq_n_s8 (int8_t) 33373 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33374 33375 * float32x4_t vdupq_n_f32 (float32_t) 33376 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33377 33378 * poly16x8_t vdupq_n_p16 (poly16_t) 33379 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33380 33381 * poly8x16_t vdupq_n_p8 (poly8_t) 33382 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33383 33384 * uint64x2_t vdupq_n_u64 (uint64_t) 33385 33386 * int64x2_t vdupq_n_s64 (int64_t) 33387 33388 * uint32x2_t vmov_n_u32 (uint32_t) 33389 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33390 33391 * uint16x4_t vmov_n_u16 (uint16_t) 33392 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33393 33394 * uint8x8_t vmov_n_u8 (uint8_t) 33395 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33396 33397 * int32x2_t vmov_n_s32 (int32_t) 33398 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33399 33400 * int16x4_t vmov_n_s16 (int16_t) 33401 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33402 33403 * int8x8_t vmov_n_s8 (int8_t) 33404 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33405 33406 * float32x2_t vmov_n_f32 (float32_t) 33407 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33408 33409 * poly16x4_t vmov_n_p16 (poly16_t) 33410 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33411 33412 * poly8x8_t vmov_n_p8 (poly8_t) 33413 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33414 33415 * uint64x1_t vmov_n_u64 (uint64_t) 33416 33417 * int64x1_t vmov_n_s64 (int64_t) 33418 33419 * uint32x4_t vmovq_n_u32 (uint32_t) 33420 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33421 33422 * uint16x8_t vmovq_n_u16 (uint16_t) 33423 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33424 33425 * uint8x16_t vmovq_n_u8 (uint8_t) 33426 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33427 33428 * int32x4_t vmovq_n_s32 (int32_t) 33429 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33430 33431 * int16x8_t vmovq_n_s16 (int16_t) 33432 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33433 33434 * int8x16_t vmovq_n_s8 (int8_t) 33435 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33436 33437 * float32x4_t vmovq_n_f32 (float32_t) 33438 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33439 33440 * poly16x8_t vmovq_n_p16 (poly16_t) 33441 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33442 33443 * poly8x16_t vmovq_n_p8 (poly8_t) 33444 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33445 33446 * uint64x2_t vmovq_n_u64 (uint64_t) 33447 33448 * int64x2_t vmovq_n_s64 (int64_t) 33449 33450 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) 33451 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 33452 33453 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) 33454 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 33455 33456 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) 33457 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 33458 33459 * int32x2_t vdup_lane_s32 (int32x2_t, const int) 33460 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 33461 33462 * int16x4_t vdup_lane_s16 (int16x4_t, const int) 33463 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 33464 33465 * int8x8_t vdup_lane_s8 (int8x8_t, const int) 33466 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 33467 33468 * float32x2_t vdup_lane_f32 (float32x2_t, const int) 33469 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 33470 33471 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) 33472 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 33473 33474 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) 33475 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 33476 33477 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) 33478 33479 * int64x1_t vdup_lane_s64 (int64x1_t, const int) 33480 33481 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) 33482 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 33483 33484 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) 33485 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 33486 33487 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) 33488 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 33489 33490 * int32x4_t vdupq_lane_s32 (int32x2_t, const int) 33491 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 33492 33493 * int16x8_t vdupq_lane_s16 (int16x4_t, const int) 33494 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 33495 33496 * int8x16_t vdupq_lane_s8 (int8x8_t, const int) 33497 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 33498 33499 * float32x4_t vdupq_lane_f32 (float32x2_t, const int) 33500 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 33501 33502 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) 33503 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 33504 33505 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) 33506 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 33507 33508 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) 33509 33510 * int64x2_t vdupq_lane_s64 (int64x1_t, const int) 33511 335126.56.3.50 Combining vectors 33513........................... 33514 33515 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) 33516 33517 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) 33518 33519 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) 33520 33521 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) 33522 33523 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 33524 33525 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) 33526 33527 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) 33528 33529 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) 33530 33531 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) 33532 33533 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) 33534 33535 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) 33536 335376.56.3.51 Splitting vectors 33538........................... 33539 33540 * uint32x2_t vget_high_u32 (uint32x4_t) 33541 33542 * uint16x4_t vget_high_u16 (uint16x8_t) 33543 33544 * uint8x8_t vget_high_u8 (uint8x16_t) 33545 33546 * int32x2_t vget_high_s32 (int32x4_t) 33547 33548 * int16x4_t vget_high_s16 (int16x8_t) 33549 33550 * int8x8_t vget_high_s8 (int8x16_t) 33551 33552 * uint64x1_t vget_high_u64 (uint64x2_t) 33553 33554 * int64x1_t vget_high_s64 (int64x2_t) 33555 33556 * float32x2_t vget_high_f32 (float32x4_t) 33557 33558 * poly16x4_t vget_high_p16 (poly16x8_t) 33559 33560 * poly8x8_t vget_high_p8 (poly8x16_t) 33561 33562 * uint32x2_t vget_low_u32 (uint32x4_t) 33563 _Form of expected instruction(s):_ `vmov D0, D0' 33564 33565 * uint16x4_t vget_low_u16 (uint16x8_t) 33566 _Form of expected instruction(s):_ `vmov D0, D0' 33567 33568 * uint8x8_t vget_low_u8 (uint8x16_t) 33569 _Form of expected instruction(s):_ `vmov D0, D0' 33570 33571 * int32x2_t vget_low_s32 (int32x4_t) 33572 _Form of expected instruction(s):_ `vmov D0, D0' 33573 33574 * int16x4_t vget_low_s16 (int16x8_t) 33575 _Form of expected instruction(s):_ `vmov D0, D0' 33576 33577 * int8x8_t vget_low_s8 (int8x16_t) 33578 _Form of expected instruction(s):_ `vmov D0, D0' 33579 33580 * float32x2_t vget_low_f32 (float32x4_t) 33581 _Form of expected instruction(s):_ `vmov D0, D0' 33582 33583 * poly16x4_t vget_low_p16 (poly16x8_t) 33584 _Form of expected instruction(s):_ `vmov D0, D0' 33585 33586 * poly8x8_t vget_low_p8 (poly8x16_t) 33587 _Form of expected instruction(s):_ `vmov D0, D0' 33588 33589 * uint64x1_t vget_low_u64 (uint64x2_t) 33590 33591 * int64x1_t vget_low_s64 (int64x2_t) 33592 335936.56.3.52 Conversions 33594..................... 33595 33596 * float32x2_t vcvt_f32_u32 (uint32x2_t) 33597 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0' 33598 33599 * float32x2_t vcvt_f32_s32 (int32x2_t) 33600 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0' 33601 33602 * uint32x2_t vcvt_u32_f32 (float32x2_t) 33603 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0' 33604 33605 * int32x2_t vcvt_s32_f32 (float32x2_t) 33606 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0' 33607 33608 * float32x4_t vcvtq_f32_u32 (uint32x4_t) 33609 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0' 33610 33611 * float32x4_t vcvtq_f32_s32 (int32x4_t) 33612 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0' 33613 33614 * uint32x4_t vcvtq_u32_f32 (float32x4_t) 33615 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0' 33616 33617 * int32x4_t vcvtq_s32_f32 (float32x4_t) 33618 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0' 33619 33620 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) 33621 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0' 33622 33623 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) 33624 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0' 33625 33626 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) 33627 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0' 33628 33629 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) 33630 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0' 33631 33632 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) 33633 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0' 33634 33635 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) 33636 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0' 33637 33638 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) 33639 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0' 33640 33641 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) 33642 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0' 33643 336446.56.3.53 Move, single_opcode narrowing 33645....................................... 33646 33647 * uint32x2_t vmovn_u64 (uint64x2_t) 33648 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 33649 33650 * uint16x4_t vmovn_u32 (uint32x4_t) 33651 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 33652 33653 * uint8x8_t vmovn_u16 (uint16x8_t) 33654 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 33655 33656 * int32x2_t vmovn_s64 (int64x2_t) 33657 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 33658 33659 * int16x4_t vmovn_s32 (int32x4_t) 33660 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 33661 33662 * int8x8_t vmovn_s16 (int16x8_t) 33663 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 33664 33665 * uint32x2_t vqmovn_u64 (uint64x2_t) 33666 _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0' 33667 33668 * uint16x4_t vqmovn_u32 (uint32x4_t) 33669 _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0' 33670 33671 * uint8x8_t vqmovn_u16 (uint16x8_t) 33672 _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0' 33673 33674 * int32x2_t vqmovn_s64 (int64x2_t) 33675 _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0' 33676 33677 * int16x4_t vqmovn_s32 (int32x4_t) 33678 _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0' 33679 33680 * int8x8_t vqmovn_s16 (int16x8_t) 33681 _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0' 33682 33683 * uint32x2_t vqmovun_s64 (int64x2_t) 33684 _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0' 33685 33686 * uint16x4_t vqmovun_s32 (int32x4_t) 33687 _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0' 33688 33689 * uint8x8_t vqmovun_s16 (int16x8_t) 33690 _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0' 33691 336926.56.3.54 Move, single_opcode long 33693.................................. 33694 33695 * uint64x2_t vmovl_u32 (uint32x2_t) 33696 _Form of expected instruction(s):_ `vmovl.u32 Q0, D0' 33697 33698 * uint32x4_t vmovl_u16 (uint16x4_t) 33699 _Form of expected instruction(s):_ `vmovl.u16 Q0, D0' 33700 33701 * uint16x8_t vmovl_u8 (uint8x8_t) 33702 _Form of expected instruction(s):_ `vmovl.u8 Q0, D0' 33703 33704 * int64x2_t vmovl_s32 (int32x2_t) 33705 _Form of expected instruction(s):_ `vmovl.s32 Q0, D0' 33706 33707 * int32x4_t vmovl_s16 (int16x4_t) 33708 _Form of expected instruction(s):_ `vmovl.s16 Q0, D0' 33709 33710 * int16x8_t vmovl_s8 (int8x8_t) 33711 _Form of expected instruction(s):_ `vmovl.s8 Q0, D0' 33712 337136.56.3.55 Table lookup 33714...................... 33715 33716 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) 33717 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 33718 33719 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) 33720 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 33721 33722 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) 33723 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 33724 33725 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) 33726 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 33727 33728 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) 33729 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 33730 33731 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) 33732 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 33733 33734 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) 33735 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 33736 33737 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) 33738 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 33739 33740 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) 33741 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 33742 33743 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) 33744 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 33745 D0' 33746 33747 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) 33748 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 33749 D0' 33750 33751 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) 33752 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 33753 D0' 33754 337556.56.3.56 Extended table lookup 33756............................... 33757 33758 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) 33759 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 33760 33761 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) 33762 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 33763 33764 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 33765 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 33766 33767 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) 33768 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 33769 33770 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) 33771 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 33772 33773 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) 33774 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 33775 33776 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) 33777 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 33778 33779 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) 33780 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 33781 33782 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) 33783 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 33784 33785 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) 33786 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 33787 D0' 33788 33789 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) 33790 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 33791 D0' 33792 33793 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) 33794 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 33795 D0' 33796 337976.56.3.57 Multiply, lane 33798........................ 33799 33800 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) 33801 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 33802 33803 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) 33804 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 33805 33806 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) 33807 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 33808 33809 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) 33810 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 33811 33812 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) 33813 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 33814 33815 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) 33816 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 33817 33818 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) 33819 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 33820 33821 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) 33822 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 33823 33824 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) 33825 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 33826 33827 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) 33828 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 33829 338306.56.3.58 Long multiply, lane 33831............................. 33832 33833 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) 33834 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 33835 33836 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) 33837 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 33838 33839 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) 33840 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 33841 33842 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) 33843 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 33844 338456.56.3.59 Saturating doubling long multiply, lane 33846................................................. 33847 33848 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) 33849 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 33850 33851 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) 33852 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 33853 338546.56.3.60 Saturating doubling multiply high, lane 33855................................................. 33856 33857 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 33858 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 33859 33860 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 33861 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 33862 33863 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 33864 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 33865 33866 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 33867 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 33868 33869 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 33870 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 33871 33872 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 33873 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 33874 33875 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 33876 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 33877 33878 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 33879 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 33880 338816.56.3.61 Multiply-accumulate, lane 33882................................... 33883 33884 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 33885 const int) 33886 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 33887 33888 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 33889 const int) 33890 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 33891 33892 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 33893 const int) 33894 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 33895 33896 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 33897 int) 33898 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 33899 33900 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 33901 int) 33902 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 33903 33904 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 33905 const int) 33906 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 33907 33908 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 33909 const int) 33910 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 33911 33912 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 33913 const int) 33914 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 33915 33916 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 33917 int) 33918 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 33919 33920 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 33921 int) 33922 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 33923 33924 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 33925 const int) 33926 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 33927 33928 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 33929 const int) 33930 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 33931 33932 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 33933 int) 33934 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 33935 33936 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 33937 int) 33938 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 33939 33940 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 33941 int) 33942 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 33943 33944 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 33945 int) 33946 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 33947 339486.56.3.62 Multiply-subtract, lane 33949................................. 33950 33951 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 33952 const int) 33953 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 33954 33955 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 33956 const int) 33957 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 33958 33959 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 33960 const int) 33961 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 33962 33963 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 33964 int) 33965 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 33966 33967 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 33968 int) 33969 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 33970 33971 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 33972 const int) 33973 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 33974 33975 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 33976 const int) 33977 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 33978 33979 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 33980 const int) 33981 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 33982 33983 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 33984 int) 33985 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 33986 33987 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 33988 int) 33989 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 33990 33991 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 33992 const int) 33993 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 33994 33995 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 33996 const int) 33997 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 33998 33999 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 34000 int) 34001 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 34002 34003 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 34004 int) 34005 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 34006 34007 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 34008 int) 34009 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 34010 34011 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 34012 int) 34013 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 34014 340156.56.3.63 Vector multiply by scalar 34016................................... 34017 34018 * float32x2_t vmul_n_f32 (float32x2_t, float32_t) 34019 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 34020 34021 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) 34022 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 34023 34024 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) 34025 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 34026 34027 * int32x2_t vmul_n_s32 (int32x2_t, int32_t) 34028 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 34029 34030 * int16x4_t vmul_n_s16 (int16x4_t, int16_t) 34031 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 34032 34033 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) 34034 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 34035 34036 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) 34037 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 34038 34039 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) 34040 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 34041 34042 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) 34043 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 34044 34045 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) 34046 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 34047 340486.56.3.64 Vector long multiply by scalar 34049........................................ 34050 34051 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) 34052 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 34053 34054 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) 34055 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 34056 34057 * int64x2_t vmull_n_s32 (int32x2_t, int32_t) 34058 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 34059 34060 * int32x4_t vmull_n_s16 (int16x4_t, int16_t) 34061 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 34062 340636.56.3.65 Vector saturating doubling long multiply by scalar 34064............................................................ 34065 34066 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) 34067 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 34068 34069 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) 34070 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 34071 340726.56.3.66 Vector saturating doubling multiply high by scalar 34073............................................................ 34074 34075 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) 34076 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 34077 34078 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) 34079 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 34080 34081 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) 34082 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 34083 34084 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) 34085 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 34086 34087 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) 34088 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 34089 34090 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) 34091 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 34092 34093 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) 34094 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 34095 34096 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) 34097 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 34098 340996.56.3.67 Vector multiply-accumulate by scalar 34100.............................................. 34101 34102 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) 34103 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 34104 34105 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 34106 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 34107 34108 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 34109 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 34110 34111 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) 34112 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 34113 34114 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) 34115 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 34116 34117 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) 34118 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 34119 34120 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 34121 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 34122 34123 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 34124 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 34125 34126 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) 34127 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 34128 34129 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) 34130 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 34131 34132 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 34133 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 34134 34135 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 34136 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 34137 34138 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 34139 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 34140 34141 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 34142 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 34143 34144 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 34145 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 34146 34147 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 34148 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 34149 341506.56.3.68 Vector multiply-subtract by scalar 34151............................................ 34152 34153 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) 34154 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 34155 34156 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 34157 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 34158 34159 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 34160 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 34161 34162 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) 34163 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 34164 34165 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) 34166 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 34167 34168 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) 34169 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 34170 34171 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 34172 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 34173 34174 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 34175 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 34176 34177 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) 34178 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 34179 34180 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) 34181 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 34182 34183 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 34184 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 34185 34186 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 34187 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 34188 34189 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 34190 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 34191 34192 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 34193 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 34194 34195 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 34196 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 34197 34198 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 34199 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 34200 342016.56.3.69 Vector extract 34202........................ 34203 34204 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) 34205 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 34206 34207 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) 34208 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 34209 34210 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) 34211 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 34212 34213 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) 34214 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 34215 34216 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) 34217 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 34218 34219 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) 34220 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 34221 34222 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) 34223 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 34224 34225 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) 34226 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 34227 34228 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) 34229 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 34230 34231 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) 34232 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 34233 34234 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) 34235 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 34236 34237 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) 34238 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 34239 34240 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) 34241 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 34242 34243 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) 34244 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 34245 34246 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) 34247 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 34248 34249 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) 34250 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 34251 34252 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) 34253 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 34254 34255 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) 34256 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 34257 34258 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) 34259 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 34260 34261 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) 34262 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 34263 34264 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) 34265 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 34266 34267 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) 34268 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 34269 342706.56.3.70 Reverse elements 34271.......................... 34272 34273 * uint32x2_t vrev64_u32 (uint32x2_t) 34274 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 34275 34276 * uint16x4_t vrev64_u16 (uint16x4_t) 34277 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 34278 34279 * uint8x8_t vrev64_u8 (uint8x8_t) 34280 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 34281 34282 * int32x2_t vrev64_s32 (int32x2_t) 34283 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 34284 34285 * int16x4_t vrev64_s16 (int16x4_t) 34286 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 34287 34288 * int8x8_t vrev64_s8 (int8x8_t) 34289 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 34290 34291 * float32x2_t vrev64_f32 (float32x2_t) 34292 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 34293 34294 * poly16x4_t vrev64_p16 (poly16x4_t) 34295 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 34296 34297 * poly8x8_t vrev64_p8 (poly8x8_t) 34298 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 34299 34300 * uint32x4_t vrev64q_u32 (uint32x4_t) 34301 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 34302 34303 * uint16x8_t vrev64q_u16 (uint16x8_t) 34304 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 34305 34306 * uint8x16_t vrev64q_u8 (uint8x16_t) 34307 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 34308 34309 * int32x4_t vrev64q_s32 (int32x4_t) 34310 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 34311 34312 * int16x8_t vrev64q_s16 (int16x8_t) 34313 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 34314 34315 * int8x16_t vrev64q_s8 (int8x16_t) 34316 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 34317 34318 * float32x4_t vrev64q_f32 (float32x4_t) 34319 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 34320 34321 * poly16x8_t vrev64q_p16 (poly16x8_t) 34322 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 34323 34324 * poly8x16_t vrev64q_p8 (poly8x16_t) 34325 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 34326 34327 * uint16x4_t vrev32_u16 (uint16x4_t) 34328 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 34329 34330 * int16x4_t vrev32_s16 (int16x4_t) 34331 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 34332 34333 * uint8x8_t vrev32_u8 (uint8x8_t) 34334 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 34335 34336 * int8x8_t vrev32_s8 (int8x8_t) 34337 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 34338 34339 * poly16x4_t vrev32_p16 (poly16x4_t) 34340 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 34341 34342 * poly8x8_t vrev32_p8 (poly8x8_t) 34343 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 34344 34345 * uint16x8_t vrev32q_u16 (uint16x8_t) 34346 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 34347 34348 * int16x8_t vrev32q_s16 (int16x8_t) 34349 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 34350 34351 * uint8x16_t vrev32q_u8 (uint8x16_t) 34352 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 34353 34354 * int8x16_t vrev32q_s8 (int8x16_t) 34355 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 34356 34357 * poly16x8_t vrev32q_p16 (poly16x8_t) 34358 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 34359 34360 * poly8x16_t vrev32q_p8 (poly8x16_t) 34361 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 34362 34363 * uint8x8_t vrev16_u8 (uint8x8_t) 34364 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 34365 34366 * int8x8_t vrev16_s8 (int8x8_t) 34367 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 34368 34369 * poly8x8_t vrev16_p8 (poly8x8_t) 34370 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 34371 34372 * uint8x16_t vrev16q_u8 (uint8x16_t) 34373 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 34374 34375 * int8x16_t vrev16q_s8 (int8x16_t) 34376 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 34377 34378 * poly8x16_t vrev16q_p8 (poly8x16_t) 34379 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 34380 343816.56.3.71 Bit selection 34382....................... 34383 34384 * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 34385 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34386 D0, D0, D0' _or_ `vbif D0, D0, D0' 34387 34388 * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 34389 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34390 D0, D0, D0' _or_ `vbif D0, D0, D0' 34391 34392 * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 34393 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34394 D0, D0, D0' _or_ `vbif D0, D0, D0' 34395 34396 * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) 34397 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34398 D0, D0, D0' _or_ `vbif D0, D0, D0' 34399 34400 * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) 34401 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34402 D0, D0, D0' _or_ `vbif D0, D0, D0' 34403 34404 * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) 34405 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34406 D0, D0, D0' _or_ `vbif D0, D0, D0' 34407 34408 * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) 34409 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34410 D0, D0, D0' _or_ `vbif D0, D0, D0' 34411 34412 * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) 34413 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34414 D0, D0, D0' _or_ `vbif D0, D0, D0' 34415 34416 * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) 34417 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34418 D0, D0, D0' _or_ `vbif D0, D0, D0' 34419 34420 * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) 34421 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34422 D0, D0, D0' _or_ `vbif D0, D0, D0' 34423 34424 * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) 34425 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34426 D0, D0, D0' _or_ `vbif D0, D0, D0' 34427 34428 * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 34429 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34430 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34431 34432 * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 34433 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34434 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34435 34436 * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 34437 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34438 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34439 34440 * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) 34441 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34442 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34443 34444 * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) 34445 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34446 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34447 34448 * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) 34449 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34450 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34451 34452 * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) 34453 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34454 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34455 34456 * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) 34457 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34458 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34459 34460 * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) 34461 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34462 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34463 34464 * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) 34465 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34466 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34467 34468 * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) 34469 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34470 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34471 344726.56.3.72 Transpose elements 34473............................ 34474 34475 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) 34476 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 34477 34478 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) 34479 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 34480 34481 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) 34482 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 34483 34484 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) 34485 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 34486 34487 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) 34488 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 34489 34490 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) 34491 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 34492 34493 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) 34494 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34495 34496 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) 34497 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34498 34499 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) 34500 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34501 34502 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) 34503 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 34504 34505 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) 34506 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 34507 34508 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) 34509 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 34510 34511 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) 34512 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 34513 34514 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) 34515 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 34516 34517 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) 34518 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 34519 34520 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) 34521 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 34522 34523 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) 34524 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 34525 34526 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) 34527 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 34528 345296.56.3.73 Zip elements 34530...................... 34531 34532 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) 34533 _Form of expected instruction(s):_ `vzip.16 D0, D1' 34534 34535 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) 34536 _Form of expected instruction(s):_ `vzip.8 D0, D1' 34537 34538 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) 34539 _Form of expected instruction(s):_ `vzip.16 D0, D1' 34540 34541 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) 34542 _Form of expected instruction(s):_ `vzip.8 D0, D1' 34543 34544 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) 34545 _Form of expected instruction(s):_ `vzip.16 D0, D1' 34546 34547 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) 34548 _Form of expected instruction(s):_ `vzip.8 D0, D1' 34549 34550 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) 34551 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34552 34553 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) 34554 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34555 34556 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) 34557 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34558 34559 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) 34560 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 34561 34562 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) 34563 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 34564 34565 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) 34566 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 34567 34568 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) 34569 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 34570 34571 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) 34572 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 34573 34574 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) 34575 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 34576 34577 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) 34578 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 34579 34580 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) 34581 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 34582 34583 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) 34584 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 34585 345866.56.3.74 Unzip elements 34587........................ 34588 34589 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) 34590 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34591 34592 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) 34593 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 34594 34595 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) 34596 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 34597 34598 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) 34599 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34600 34601 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) 34602 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 34603 34604 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) 34605 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 34606 34607 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) 34608 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34609 34610 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) 34611 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 34612 34613 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) 34614 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 34615 34616 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) 34617 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 34618 34619 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) 34620 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 34621 34622 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) 34623 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 34624 34625 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) 34626 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 34627 34628 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) 34629 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 34630 34631 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) 34632 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 34633 34634 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) 34635 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 34636 34637 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) 34638 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 34639 34640 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) 34641 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 34642 346436.56.3.75 Element/structure loads, VLD1 variants 34644................................................ 34645 34646 * uint32x2_t vld1_u32 (const uint32_t *) 34647 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 34648 34649 * uint16x4_t vld1_u16 (const uint16_t *) 34650 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 34651 34652 * uint8x8_t vld1_u8 (const uint8_t *) 34653 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 34654 34655 * int32x2_t vld1_s32 (const int32_t *) 34656 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 34657 34658 * int16x4_t vld1_s16 (const int16_t *) 34659 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 34660 34661 * int8x8_t vld1_s8 (const int8_t *) 34662 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 34663 34664 * uint64x1_t vld1_u64 (const uint64_t *) 34665 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34666 34667 * int64x1_t vld1_s64 (const int64_t *) 34668 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34669 34670 * float32x2_t vld1_f32 (const float32_t *) 34671 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 34672 34673 * poly16x4_t vld1_p16 (const poly16_t *) 34674 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 34675 34676 * poly8x8_t vld1_p8 (const poly8_t *) 34677 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 34678 34679 * uint32x4_t vld1q_u32 (const uint32_t *) 34680 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 34681 34682 * uint16x8_t vld1q_u16 (const uint16_t *) 34683 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 34684 34685 * uint8x16_t vld1q_u8 (const uint8_t *) 34686 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 34687 34688 * int32x4_t vld1q_s32 (const int32_t *) 34689 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 34690 34691 * int16x8_t vld1q_s16 (const int16_t *) 34692 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 34693 34694 * int8x16_t vld1q_s8 (const int8_t *) 34695 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 34696 34697 * uint64x2_t vld1q_u64 (const uint64_t *) 34698 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 34699 34700 * int64x2_t vld1q_s64 (const int64_t *) 34701 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 34702 34703 * float32x4_t vld1q_f32 (const float32_t *) 34704 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 34705 34706 * poly16x8_t vld1q_p16 (const poly16_t *) 34707 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 34708 34709 * poly8x16_t vld1q_p8 (const poly8_t *) 34710 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 34711 34712 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) 34713 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34714 34715 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) 34716 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34717 34718 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) 34719 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34720 34721 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) 34722 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34723 34724 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) 34725 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34726 34727 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) 34728 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34729 34730 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const 34731 int) 34732 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34733 34734 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) 34735 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34736 34737 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) 34738 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34739 34740 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) 34741 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34742 34743 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) 34744 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34745 34746 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) 34747 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34748 34749 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) 34750 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34751 34752 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) 34753 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34754 34755 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) 34756 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34757 34758 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) 34759 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34760 34761 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) 34762 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34763 34764 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const 34765 int) 34766 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34767 34768 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) 34769 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34770 34771 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) 34772 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34773 34774 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) 34775 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34776 34777 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) 34778 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34779 34780 * uint32x2_t vld1_dup_u32 (const uint32_t *) 34781 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 34782 34783 * uint16x4_t vld1_dup_u16 (const uint16_t *) 34784 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 34785 34786 * uint8x8_t vld1_dup_u8 (const uint8_t *) 34787 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 34788 34789 * int32x2_t vld1_dup_s32 (const int32_t *) 34790 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 34791 34792 * int16x4_t vld1_dup_s16 (const int16_t *) 34793 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 34794 34795 * int8x8_t vld1_dup_s8 (const int8_t *) 34796 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 34797 34798 * float32x2_t vld1_dup_f32 (const float32_t *) 34799 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 34800 34801 * poly16x4_t vld1_dup_p16 (const poly16_t *) 34802 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 34803 34804 * poly8x8_t vld1_dup_p8 (const poly8_t *) 34805 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 34806 34807 * uint64x1_t vld1_dup_u64 (const uint64_t *) 34808 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34809 34810 * int64x1_t vld1_dup_s64 (const int64_t *) 34811 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34812 34813 * uint32x4_t vld1q_dup_u32 (const uint32_t *) 34814 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 34815 34816 * uint16x8_t vld1q_dup_u16 (const uint16_t *) 34817 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 34818 34819 * uint8x16_t vld1q_dup_u8 (const uint8_t *) 34820 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 34821 34822 * int32x4_t vld1q_dup_s32 (const int32_t *) 34823 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 34824 34825 * int16x8_t vld1q_dup_s16 (const int16_t *) 34826 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 34827 34828 * int8x16_t vld1q_dup_s8 (const int8_t *) 34829 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 34830 34831 * float32x4_t vld1q_dup_f32 (const float32_t *) 34832 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 34833 34834 * poly16x8_t vld1q_dup_p16 (const poly16_t *) 34835 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 34836 34837 * poly8x16_t vld1q_dup_p8 (const poly8_t *) 34838 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 34839 34840 * uint64x2_t vld1q_dup_u64 (const uint64_t *) 34841 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34842 34843 * int64x2_t vld1q_dup_s64 (const int64_t *) 34844 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34845 348466.56.3.76 Element/structure stores, VST1 variants 34847................................................. 34848 34849 * void vst1_u32 (uint32_t *, uint32x2_t) 34850 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 34851 34852 * void vst1_u16 (uint16_t *, uint16x4_t) 34853 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 34854 34855 * void vst1_u8 (uint8_t *, uint8x8_t) 34856 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 34857 34858 * void vst1_s32 (int32_t *, int32x2_t) 34859 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 34860 34861 * void vst1_s16 (int16_t *, int16x4_t) 34862 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 34863 34864 * void vst1_s8 (int8_t *, int8x8_t) 34865 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 34866 34867 * void vst1_u64 (uint64_t *, uint64x1_t) 34868 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34869 34870 * void vst1_s64 (int64_t *, int64x1_t) 34871 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34872 34873 * void vst1_f32 (float32_t *, float32x2_t) 34874 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 34875 34876 * void vst1_p16 (poly16_t *, poly16x4_t) 34877 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 34878 34879 * void vst1_p8 (poly8_t *, poly8x8_t) 34880 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 34881 34882 * void vst1q_u32 (uint32_t *, uint32x4_t) 34883 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 34884 34885 * void vst1q_u16 (uint16_t *, uint16x8_t) 34886 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 34887 34888 * void vst1q_u8 (uint8_t *, uint8x16_t) 34889 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 34890 34891 * void vst1q_s32 (int32_t *, int32x4_t) 34892 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 34893 34894 * void vst1q_s16 (int16_t *, int16x8_t) 34895 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 34896 34897 * void vst1q_s8 (int8_t *, int8x16_t) 34898 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 34899 34900 * void vst1q_u64 (uint64_t *, uint64x2_t) 34901 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 34902 34903 * void vst1q_s64 (int64_t *, int64x2_t) 34904 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 34905 34906 * void vst1q_f32 (float32_t *, float32x4_t) 34907 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 34908 34909 * void vst1q_p16 (poly16_t *, poly16x8_t) 34910 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 34911 34912 * void vst1q_p8 (poly8_t *, poly8x16_t) 34913 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 34914 34915 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) 34916 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34917 34918 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) 34919 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34920 34921 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) 34922 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34923 34924 * void vst1_lane_s32 (int32_t *, int32x2_t, const int) 34925 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34926 34927 * void vst1_lane_s16 (int16_t *, int16x4_t, const int) 34928 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34929 34930 * void vst1_lane_s8 (int8_t *, int8x8_t, const int) 34931 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34932 34933 * void vst1_lane_f32 (float32_t *, float32x2_t, const int) 34934 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34935 34936 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) 34937 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34938 34939 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) 34940 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34941 34942 * void vst1_lane_s64 (int64_t *, int64x1_t, const int) 34943 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34944 34945 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) 34946 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34947 34948 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) 34949 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34950 34951 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) 34952 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34953 34954 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) 34955 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34956 34957 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) 34958 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34959 34960 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) 34961 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34962 34963 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) 34964 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34965 34966 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) 34967 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34968 34969 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) 34970 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34971 34972 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) 34973 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34974 34975 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) 34976 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34977 34978 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) 34979 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34980 349816.56.3.77 Element/structure loads, VLD2 variants 34982................................................ 34983 34984 * uint32x2x2_t vld2_u32 (const uint32_t *) 34985 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 34986 34987 * uint16x4x2_t vld2_u16 (const uint16_t *) 34988 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 34989 34990 * uint8x8x2_t vld2_u8 (const uint8_t *) 34991 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 34992 34993 * int32x2x2_t vld2_s32 (const int32_t *) 34994 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 34995 34996 * int16x4x2_t vld2_s16 (const int16_t *) 34997 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 34998 34999 * int8x8x2_t vld2_s8 (const int8_t *) 35000 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 35001 35002 * float32x2x2_t vld2_f32 (const float32_t *) 35003 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 35004 35005 * poly16x4x2_t vld2_p16 (const poly16_t *) 35006 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 35007 35008 * poly8x8x2_t vld2_p8 (const poly8_t *) 35009 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 35010 35011 * uint64x1x2_t vld2_u64 (const uint64_t *) 35012 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 35013 35014 * int64x1x2_t vld2_s64 (const int64_t *) 35015 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 35016 35017 * uint32x4x2_t vld2q_u32 (const uint32_t *) 35018 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 35019 35020 * uint16x8x2_t vld2q_u16 (const uint16_t *) 35021 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 35022 35023 * uint8x16x2_t vld2q_u8 (const uint8_t *) 35024 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 35025 35026 * int32x4x2_t vld2q_s32 (const int32_t *) 35027 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 35028 35029 * int16x8x2_t vld2q_s16 (const int16_t *) 35030 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 35031 35032 * int8x16x2_t vld2q_s8 (const int8_t *) 35033 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 35034 35035 * float32x4x2_t vld2q_f32 (const float32_t *) 35036 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 35037 35038 * poly16x8x2_t vld2q_p16 (const poly16_t *) 35039 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 35040 35041 * poly8x16x2_t vld2q_p8 (const poly8_t *) 35042 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 35043 35044 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const 35045 int) 35046 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 35047 35048 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const 35049 int) 35050 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 35051 35052 * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) 35053 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 35054 35055 * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) 35056 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 35057 35058 * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) 35059 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 35060 35061 * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) 35062 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 35063 35064 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, 35065 const int) 35066 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 35067 35068 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const 35069 int) 35070 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 35071 35072 * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) 35073 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 35074 35075 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const 35076 int) 35077 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 35078 35079 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const 35080 int) 35081 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 35082 35083 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const 35084 int) 35085 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 35086 35087 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const 35088 int) 35089 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 35090 35091 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, 35092 const int) 35093 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 35094 35095 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const 35096 int) 35097 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 35098 35099 * uint32x2x2_t vld2_dup_u32 (const uint32_t *) 35100 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 35101 35102 * uint16x4x2_t vld2_dup_u16 (const uint16_t *) 35103 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 35104 35105 * uint8x8x2_t vld2_dup_u8 (const uint8_t *) 35106 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 35107 35108 * int32x2x2_t vld2_dup_s32 (const int32_t *) 35109 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 35110 35111 * int16x4x2_t vld2_dup_s16 (const int16_t *) 35112 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 35113 35114 * int8x8x2_t vld2_dup_s8 (const int8_t *) 35115 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 35116 35117 * float32x2x2_t vld2_dup_f32 (const float32_t *) 35118 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 35119 35120 * poly16x4x2_t vld2_dup_p16 (const poly16_t *) 35121 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 35122 35123 * poly8x8x2_t vld2_dup_p8 (const poly8_t *) 35124 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 35125 35126 * uint64x1x2_t vld2_dup_u64 (const uint64_t *) 35127 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 35128 35129 * int64x1x2_t vld2_dup_s64 (const int64_t *) 35130 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 35131 351326.56.3.78 Element/structure stores, VST2 variants 35133................................................. 35134 35135 * void vst2_u32 (uint32_t *, uint32x2x2_t) 35136 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35137 35138 * void vst2_u16 (uint16_t *, uint16x4x2_t) 35139 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35140 35141 * void vst2_u8 (uint8_t *, uint8x8x2_t) 35142 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35143 35144 * void vst2_s32 (int32_t *, int32x2x2_t) 35145 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35146 35147 * void vst2_s16 (int16_t *, int16x4x2_t) 35148 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35149 35150 * void vst2_s8 (int8_t *, int8x8x2_t) 35151 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35152 35153 * void vst2_f32 (float32_t *, float32x2x2_t) 35154 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35155 35156 * void vst2_p16 (poly16_t *, poly16x4x2_t) 35157 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35158 35159 * void vst2_p8 (poly8_t *, poly8x8x2_t) 35160 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35161 35162 * void vst2_u64 (uint64_t *, uint64x1x2_t) 35163 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 35164 35165 * void vst2_s64 (int64_t *, int64x1x2_t) 35166 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 35167 35168 * void vst2q_u32 (uint32_t *, uint32x4x2_t) 35169 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35170 35171 * void vst2q_u16 (uint16_t *, uint16x8x2_t) 35172 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35173 35174 * void vst2q_u8 (uint8_t *, uint8x16x2_t) 35175 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35176 35177 * void vst2q_s32 (int32_t *, int32x4x2_t) 35178 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35179 35180 * void vst2q_s16 (int16_t *, int16x8x2_t) 35181 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35182 35183 * void vst2q_s8 (int8_t *, int8x16x2_t) 35184 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35185 35186 * void vst2q_f32 (float32_t *, float32x4x2_t) 35187 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35188 35189 * void vst2q_p16 (poly16_t *, poly16x8x2_t) 35190 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35191 35192 * void vst2q_p8 (poly8_t *, poly8x16x2_t) 35193 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35194 35195 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) 35196 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35197 35198 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) 35199 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35200 35201 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) 35202 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 35203 35204 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) 35205 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35206 35207 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) 35208 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35209 35210 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) 35211 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 35212 35213 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) 35214 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35215 35216 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) 35217 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35218 35219 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) 35220 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 35221 35222 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) 35223 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35224 35225 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) 35226 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35227 35228 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) 35229 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35230 35231 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) 35232 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35233 35234 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) 35235 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35236 35237 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) 35238 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35239 352406.56.3.79 Element/structure loads, VLD3 variants 35241................................................ 35242 35243 * uint32x2x3_t vld3_u32 (const uint32_t *) 35244 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35245 35246 * uint16x4x3_t vld3_u16 (const uint16_t *) 35247 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35248 35249 * uint8x8x3_t vld3_u8 (const uint8_t *) 35250 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35251 35252 * int32x2x3_t vld3_s32 (const int32_t *) 35253 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35254 35255 * int16x4x3_t vld3_s16 (const int16_t *) 35256 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35257 35258 * int8x8x3_t vld3_s8 (const int8_t *) 35259 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35260 35261 * float32x2x3_t vld3_f32 (const float32_t *) 35262 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35263 35264 * poly16x4x3_t vld3_p16 (const poly16_t *) 35265 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35266 35267 * poly8x8x3_t vld3_p8 (const poly8_t *) 35268 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35269 35270 * uint64x1x3_t vld3_u64 (const uint64_t *) 35271 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 35272 35273 * int64x1x3_t vld3_s64 (const int64_t *) 35274 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 35275 35276 * uint32x4x3_t vld3q_u32 (const uint32_t *) 35277 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35278 35279 * uint16x8x3_t vld3q_u16 (const uint16_t *) 35280 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35281 35282 * uint8x16x3_t vld3q_u8 (const uint8_t *) 35283 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35284 35285 * int32x4x3_t vld3q_s32 (const int32_t *) 35286 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35287 35288 * int16x8x3_t vld3q_s16 (const int16_t *) 35289 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35290 35291 * int8x16x3_t vld3q_s8 (const int8_t *) 35292 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35293 35294 * float32x4x3_t vld3q_f32 (const float32_t *) 35295 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35296 35297 * poly16x8x3_t vld3q_p16 (const poly16_t *) 35298 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35299 35300 * poly8x16x3_t vld3q_p8 (const poly8_t *) 35301 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35302 35303 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const 35304 int) 35305 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35306 [R0]' 35307 35308 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const 35309 int) 35310 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35311 [R0]' 35312 35313 * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) 35314 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 35315 [R0]' 35316 35317 * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) 35318 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35319 [R0]' 35320 35321 * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) 35322 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35323 [R0]' 35324 35325 * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) 35326 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 35327 [R0]' 35328 35329 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, 35330 const int) 35331 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35332 [R0]' 35333 35334 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const 35335 int) 35336 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35337 [R0]' 35338 35339 * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) 35340 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 35341 [R0]' 35342 35343 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const 35344 int) 35345 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35346 [R0]' 35347 35348 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const 35349 int) 35350 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35351 [R0]' 35352 35353 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const 35354 int) 35355 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35356 [R0]' 35357 35358 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const 35359 int) 35360 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35361 [R0]' 35362 35363 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, 35364 const int) 35365 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35366 [R0]' 35367 35368 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const 35369 int) 35370 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35371 [R0]' 35372 35373 * uint32x2x3_t vld3_dup_u32 (const uint32_t *) 35374 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 35375 [R0]' 35376 35377 * uint16x4x3_t vld3_dup_u16 (const uint16_t *) 35378 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 35379 [R0]' 35380 35381 * uint8x8x3_t vld3_dup_u8 (const uint8_t *) 35382 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 35383 [R0]' 35384 35385 * int32x2x3_t vld3_dup_s32 (const int32_t *) 35386 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 35387 [R0]' 35388 35389 * int16x4x3_t vld3_dup_s16 (const int16_t *) 35390 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 35391 [R0]' 35392 35393 * int8x8x3_t vld3_dup_s8 (const int8_t *) 35394 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 35395 [R0]' 35396 35397 * float32x2x3_t vld3_dup_f32 (const float32_t *) 35398 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 35399 [R0]' 35400 35401 * poly16x4x3_t vld3_dup_p16 (const poly16_t *) 35402 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 35403 [R0]' 35404 35405 * poly8x8x3_t vld3_dup_p8 (const poly8_t *) 35406 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 35407 [R0]' 35408 35409 * uint64x1x3_t vld3_dup_u64 (const uint64_t *) 35410 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 35411 35412 * int64x1x3_t vld3_dup_s64 (const int64_t *) 35413 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 35414 354156.56.3.80 Element/structure stores, VST3 variants 35416................................................. 35417 35418 * void vst3_u32 (uint32_t *, uint32x2x3_t) 35419 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 35420 35421 * void vst3_u16 (uint16_t *, uint16x4x3_t) 35422 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 35423 35424 * void vst3_u8 (uint8_t *, uint8x8x3_t) 35425 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 35426 35427 * void vst3_s32 (int32_t *, int32x2x3_t) 35428 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 35429 35430 * void vst3_s16 (int16_t *, int16x4x3_t) 35431 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 35432 35433 * void vst3_s8 (int8_t *, int8x8x3_t) 35434 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 35435 35436 * void vst3_f32 (float32_t *, float32x2x3_t) 35437 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 35438 35439 * void vst3_p16 (poly16_t *, poly16x4x3_t) 35440 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 35441 35442 * void vst3_p8 (poly8_t *, poly8x8x3_t) 35443 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 35444 35445 * void vst3_u64 (uint64_t *, uint64x1x3_t) 35446 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 35447 35448 * void vst3_s64 (int64_t *, int64x1x3_t) 35449 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 35450 35451 * void vst3q_u32 (uint32_t *, uint32x4x3_t) 35452 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 35453 35454 * void vst3q_u16 (uint16_t *, uint16x8x3_t) 35455 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 35456 35457 * void vst3q_u8 (uint8_t *, uint8x16x3_t) 35458 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 35459 35460 * void vst3q_s32 (int32_t *, int32x4x3_t) 35461 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 35462 35463 * void vst3q_s16 (int16_t *, int16x8x3_t) 35464 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 35465 35466 * void vst3q_s8 (int8_t *, int8x16x3_t) 35467 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 35468 35469 * void vst3q_f32 (float32_t *, float32x4x3_t) 35470 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 35471 35472 * void vst3q_p16 (poly16_t *, poly16x8x3_t) 35473 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 35474 35475 * void vst3q_p8 (poly8_t *, poly8x16x3_t) 35476 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 35477 35478 * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) 35479 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35480 [R0]' 35481 35482 * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) 35483 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35484 [R0]' 35485 35486 * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) 35487 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 35488 [R0]' 35489 35490 * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) 35491 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35492 [R0]' 35493 35494 * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) 35495 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35496 [R0]' 35497 35498 * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) 35499 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 35500 [R0]' 35501 35502 * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) 35503 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35504 [R0]' 35505 35506 * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) 35507 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35508 [R0]' 35509 35510 * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) 35511 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 35512 [R0]' 35513 35514 * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) 35515 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35516 [R0]' 35517 35518 * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) 35519 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35520 [R0]' 35521 35522 * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) 35523 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35524 [R0]' 35525 35526 * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) 35527 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35528 [R0]' 35529 35530 * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) 35531 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35532 [R0]' 35533 35534 * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) 35535 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35536 [R0]' 35537 355386.56.3.81 Element/structure loads, VLD4 variants 35539................................................ 35540 35541 * uint32x2x4_t vld4_u32 (const uint32_t *) 35542 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35543 35544 * uint16x4x4_t vld4_u16 (const uint16_t *) 35545 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35546 35547 * uint8x8x4_t vld4_u8 (const uint8_t *) 35548 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35549 35550 * int32x2x4_t vld4_s32 (const int32_t *) 35551 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35552 35553 * int16x4x4_t vld4_s16 (const int16_t *) 35554 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35555 35556 * int8x8x4_t vld4_s8 (const int8_t *) 35557 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35558 35559 * float32x2x4_t vld4_f32 (const float32_t *) 35560 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35561 35562 * poly16x4x4_t vld4_p16 (const poly16_t *) 35563 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35564 35565 * poly8x8x4_t vld4_p8 (const poly8_t *) 35566 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35567 35568 * uint64x1x4_t vld4_u64 (const uint64_t *) 35569 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 35570 35571 * int64x1x4_t vld4_s64 (const int64_t *) 35572 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 35573 35574 * uint32x4x4_t vld4q_u32 (const uint32_t *) 35575 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35576 35577 * uint16x8x4_t vld4q_u16 (const uint16_t *) 35578 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35579 35580 * uint8x16x4_t vld4q_u8 (const uint8_t *) 35581 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35582 35583 * int32x4x4_t vld4q_s32 (const int32_t *) 35584 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35585 35586 * int16x8x4_t vld4q_s16 (const int16_t *) 35587 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35588 35589 * int8x16x4_t vld4q_s8 (const int8_t *) 35590 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35591 35592 * float32x4x4_t vld4q_f32 (const float32_t *) 35593 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35594 35595 * poly16x8x4_t vld4q_p16 (const poly16_t *) 35596 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35597 35598 * poly8x16x4_t vld4q_p8 (const poly8_t *) 35599 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35600 35601 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const 35602 int) 35603 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35604 D3[0]}, [R0]' 35605 35606 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const 35607 int) 35608 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35609 D3[0]}, [R0]' 35610 35611 * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) 35612 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 35613 D3[0]}, [R0]' 35614 35615 * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) 35616 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35617 D3[0]}, [R0]' 35618 35619 * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) 35620 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35621 D3[0]}, [R0]' 35622 35623 * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) 35624 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 35625 D3[0]}, [R0]' 35626 35627 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, 35628 const int) 35629 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35630 D3[0]}, [R0]' 35631 35632 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const 35633 int) 35634 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35635 D3[0]}, [R0]' 35636 35637 * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) 35638 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 35639 D3[0]}, [R0]' 35640 35641 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const 35642 int) 35643 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35644 D3[0]}, [R0]' 35645 35646 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const 35647 int) 35648 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35649 D3[0]}, [R0]' 35650 35651 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const 35652 int) 35653 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35654 D3[0]}, [R0]' 35655 35656 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const 35657 int) 35658 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35659 D3[0]}, [R0]' 35660 35661 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, 35662 const int) 35663 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35664 D3[0]}, [R0]' 35665 35666 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const 35667 int) 35668 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35669 D3[0]}, [R0]' 35670 35671 * uint32x2x4_t vld4_dup_u32 (const uint32_t *) 35672 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 35673 D3[]}, [R0]' 35674 35675 * uint16x4x4_t vld4_dup_u16 (const uint16_t *) 35676 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 35677 D3[]}, [R0]' 35678 35679 * uint8x8x4_t vld4_dup_u8 (const uint8_t *) 35680 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 35681 D3[]}, [R0]' 35682 35683 * int32x2x4_t vld4_dup_s32 (const int32_t *) 35684 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 35685 D3[]}, [R0]' 35686 35687 * int16x4x4_t vld4_dup_s16 (const int16_t *) 35688 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 35689 D3[]}, [R0]' 35690 35691 * int8x8x4_t vld4_dup_s8 (const int8_t *) 35692 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 35693 D3[]}, [R0]' 35694 35695 * float32x2x4_t vld4_dup_f32 (const float32_t *) 35696 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 35697 D3[]}, [R0]' 35698 35699 * poly16x4x4_t vld4_dup_p16 (const poly16_t *) 35700 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 35701 D3[]}, [R0]' 35702 35703 * poly8x8x4_t vld4_dup_p8 (const poly8_t *) 35704 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 35705 D3[]}, [R0]' 35706 35707 * uint64x1x4_t vld4_dup_u64 (const uint64_t *) 35708 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 35709 35710 * int64x1x4_t vld4_dup_s64 (const int64_t *) 35711 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 35712 357136.56.3.82 Element/structure stores, VST4 variants 35714................................................. 35715 35716 * void vst4_u32 (uint32_t *, uint32x2x4_t) 35717 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35718 35719 * void vst4_u16 (uint16_t *, uint16x4x4_t) 35720 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35721 35722 * void vst4_u8 (uint8_t *, uint8x8x4_t) 35723 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35724 35725 * void vst4_s32 (int32_t *, int32x2x4_t) 35726 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35727 35728 * void vst4_s16 (int16_t *, int16x4x4_t) 35729 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35730 35731 * void vst4_s8 (int8_t *, int8x8x4_t) 35732 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35733 35734 * void vst4_f32 (float32_t *, float32x2x4_t) 35735 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35736 35737 * void vst4_p16 (poly16_t *, poly16x4x4_t) 35738 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35739 35740 * void vst4_p8 (poly8_t *, poly8x8x4_t) 35741 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35742 35743 * void vst4_u64 (uint64_t *, uint64x1x4_t) 35744 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 35745 35746 * void vst4_s64 (int64_t *, int64x1x4_t) 35747 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 35748 35749 * void vst4q_u32 (uint32_t *, uint32x4x4_t) 35750 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35751 35752 * void vst4q_u16 (uint16_t *, uint16x8x4_t) 35753 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35754 35755 * void vst4q_u8 (uint8_t *, uint8x16x4_t) 35756 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35757 35758 * void vst4q_s32 (int32_t *, int32x4x4_t) 35759 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35760 35761 * void vst4q_s16 (int16_t *, int16x8x4_t) 35762 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35763 35764 * void vst4q_s8 (int8_t *, int8x16x4_t) 35765 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35766 35767 * void vst4q_f32 (float32_t *, float32x4x4_t) 35768 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35769 35770 * void vst4q_p16 (poly16_t *, poly16x8x4_t) 35771 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35772 35773 * void vst4q_p8 (poly8_t *, poly8x16x4_t) 35774 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35775 35776 * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) 35777 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35778 D3[0]}, [R0]' 35779 35780 * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) 35781 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35782 D3[0]}, [R0]' 35783 35784 * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) 35785 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 35786 D3[0]}, [R0]' 35787 35788 * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) 35789 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35790 D3[0]}, [R0]' 35791 35792 * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) 35793 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35794 D3[0]}, [R0]' 35795 35796 * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) 35797 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 35798 D3[0]}, [R0]' 35799 35800 * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) 35801 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35802 D3[0]}, [R0]' 35803 35804 * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) 35805 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35806 D3[0]}, [R0]' 35807 35808 * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) 35809 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 35810 D3[0]}, [R0]' 35811 35812 * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) 35813 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35814 D3[0]}, [R0]' 35815 35816 * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) 35817 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35818 D3[0]}, [R0]' 35819 35820 * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) 35821 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35822 D3[0]}, [R0]' 35823 35824 * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) 35825 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35826 D3[0]}, [R0]' 35827 35828 * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) 35829 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35830 D3[0]}, [R0]' 35831 35832 * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) 35833 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35834 D3[0]}, [R0]' 35835 358366.56.3.83 Logical operations (AND) 35837.................................. 35838 35839 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) 35840 _Form of expected instruction(s):_ `vand D0, D0, D0' 35841 35842 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) 35843 _Form of expected instruction(s):_ `vand D0, D0, D0' 35844 35845 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) 35846 _Form of expected instruction(s):_ `vand D0, D0, D0' 35847 35848 * int32x2_t vand_s32 (int32x2_t, int32x2_t) 35849 _Form of expected instruction(s):_ `vand D0, D0, D0' 35850 35851 * int16x4_t vand_s16 (int16x4_t, int16x4_t) 35852 _Form of expected instruction(s):_ `vand D0, D0, D0' 35853 35854 * int8x8_t vand_s8 (int8x8_t, int8x8_t) 35855 _Form of expected instruction(s):_ `vand D0, D0, D0' 35856 35857 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) 35858 35859 * int64x1_t vand_s64 (int64x1_t, int64x1_t) 35860 35861 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) 35862 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35863 35864 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) 35865 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35866 35867 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) 35868 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35869 35870 * int32x4_t vandq_s32 (int32x4_t, int32x4_t) 35871 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35872 35873 * int16x8_t vandq_s16 (int16x8_t, int16x8_t) 35874 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35875 35876 * int8x16_t vandq_s8 (int8x16_t, int8x16_t) 35877 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35878 35879 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) 35880 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35881 35882 * int64x2_t vandq_s64 (int64x2_t, int64x2_t) 35883 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35884 358856.56.3.84 Logical operations (OR) 35886................................. 35887 35888 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) 35889 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35890 35891 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) 35892 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35893 35894 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) 35895 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35896 35897 * int32x2_t vorr_s32 (int32x2_t, int32x2_t) 35898 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35899 35900 * int16x4_t vorr_s16 (int16x4_t, int16x4_t) 35901 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35902 35903 * int8x8_t vorr_s8 (int8x8_t, int8x8_t) 35904 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35905 35906 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) 35907 35908 * int64x1_t vorr_s64 (int64x1_t, int64x1_t) 35909 35910 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) 35911 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35912 35913 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) 35914 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35915 35916 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) 35917 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35918 35919 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) 35920 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35921 35922 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) 35923 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35924 35925 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) 35926 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35927 35928 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) 35929 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35930 35931 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) 35932 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35933 359346.56.3.85 Logical operations (exclusive OR) 35935........................................... 35936 35937 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) 35938 _Form of expected instruction(s):_ `veor D0, D0, D0' 35939 35940 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) 35941 _Form of expected instruction(s):_ `veor D0, D0, D0' 35942 35943 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) 35944 _Form of expected instruction(s):_ `veor D0, D0, D0' 35945 35946 * int32x2_t veor_s32 (int32x2_t, int32x2_t) 35947 _Form of expected instruction(s):_ `veor D0, D0, D0' 35948 35949 * int16x4_t veor_s16 (int16x4_t, int16x4_t) 35950 _Form of expected instruction(s):_ `veor D0, D0, D0' 35951 35952 * int8x8_t veor_s8 (int8x8_t, int8x8_t) 35953 _Form of expected instruction(s):_ `veor D0, D0, D0' 35954 35955 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) 35956 35957 * int64x1_t veor_s64 (int64x1_t, int64x1_t) 35958 35959 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) 35960 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35961 35962 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) 35963 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35964 35965 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) 35966 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35967 35968 * int32x4_t veorq_s32 (int32x4_t, int32x4_t) 35969 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35970 35971 * int16x8_t veorq_s16 (int16x8_t, int16x8_t) 35972 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35973 35974 * int8x16_t veorq_s8 (int8x16_t, int8x16_t) 35975 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35976 35977 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) 35978 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35979 35980 * int64x2_t veorq_s64 (int64x2_t, int64x2_t) 35981 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35982 359836.56.3.86 Logical operations (AND-NOT) 35984...................................... 35985 35986 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) 35987 _Form of expected instruction(s):_ `vbic D0, D0, D0' 35988 35989 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) 35990 _Form of expected instruction(s):_ `vbic D0, D0, D0' 35991 35992 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) 35993 _Form of expected instruction(s):_ `vbic D0, D0, D0' 35994 35995 * int32x2_t vbic_s32 (int32x2_t, int32x2_t) 35996 _Form of expected instruction(s):_ `vbic D0, D0, D0' 35997 35998 * int16x4_t vbic_s16 (int16x4_t, int16x4_t) 35999 _Form of expected instruction(s):_ `vbic D0, D0, D0' 36000 36001 * int8x8_t vbic_s8 (int8x8_t, int8x8_t) 36002 _Form of expected instruction(s):_ `vbic D0, D0, D0' 36003 36004 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) 36005 36006 * int64x1_t vbic_s64 (int64x1_t, int64x1_t) 36007 36008 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) 36009 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 36010 36011 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) 36012 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 36013 36014 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) 36015 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 36016 36017 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) 36018 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 36019 36020 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) 36021 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 36022 36023 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) 36024 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 36025 36026 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) 36027 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 36028 36029 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) 36030 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 36031 360326.56.3.87 Logical operations (OR-NOT) 36033..................................... 36034 36035 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) 36036 _Form of expected instruction(s):_ `vorn D0, D0, D0' 36037 36038 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) 36039 _Form of expected instruction(s):_ `vorn D0, D0, D0' 36040 36041 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) 36042 _Form of expected instruction(s):_ `vorn D0, D0, D0' 36043 36044 * int32x2_t vorn_s32 (int32x2_t, int32x2_t) 36045 _Form of expected instruction(s):_ `vorn D0, D0, D0' 36046 36047 * int16x4_t vorn_s16 (int16x4_t, int16x4_t) 36048 _Form of expected instruction(s):_ `vorn D0, D0, D0' 36049 36050 * int8x8_t vorn_s8 (int8x8_t, int8x8_t) 36051 _Form of expected instruction(s):_ `vorn D0, D0, D0' 36052 36053 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) 36054 36055 * int64x1_t vorn_s64 (int64x1_t, int64x1_t) 36056 36057 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) 36058 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 36059 36060 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) 36061 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 36062 36063 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) 36064 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 36065 36066 * int32x4_t vornq_s32 (int32x4_t, int32x4_t) 36067 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 36068 36069 * int16x8_t vornq_s16 (int16x8_t, int16x8_t) 36070 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 36071 36072 * int8x16_t vornq_s8 (int8x16_t, int8x16_t) 36073 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 36074 36075 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) 36076 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 36077 36078 * int64x2_t vornq_s64 (int64x2_t, int64x2_t) 36079 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 36080 360816.56.3.88 Reinterpret casts 36082........................... 36083 36084 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) 36085 36086 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) 36087 36088 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) 36089 36090 * poly8x8_t vreinterpret_p8_s32 (int32x2_t) 36091 36092 * poly8x8_t vreinterpret_p8_s16 (int16x4_t) 36093 36094 * poly8x8_t vreinterpret_p8_s8 (int8x8_t) 36095 36096 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) 36097 36098 * poly8x8_t vreinterpret_p8_s64 (int64x1_t) 36099 36100 * poly8x8_t vreinterpret_p8_f32 (float32x2_t) 36101 36102 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) 36103 36104 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) 36105 36106 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) 36107 36108 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) 36109 36110 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) 36111 36112 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) 36113 36114 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) 36115 36116 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) 36117 36118 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) 36119 36120 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) 36121 36122 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) 36123 36124 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) 36125 36126 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) 36127 36128 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) 36129 36130 * poly16x4_t vreinterpret_p16_s32 (int32x2_t) 36131 36132 * poly16x4_t vreinterpret_p16_s16 (int16x4_t) 36133 36134 * poly16x4_t vreinterpret_p16_s8 (int8x8_t) 36135 36136 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) 36137 36138 * poly16x4_t vreinterpret_p16_s64 (int64x1_t) 36139 36140 * poly16x4_t vreinterpret_p16_f32 (float32x2_t) 36141 36142 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) 36143 36144 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) 36145 36146 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) 36147 36148 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) 36149 36150 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) 36151 36152 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) 36153 36154 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) 36155 36156 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) 36157 36158 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) 36159 36160 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) 36161 36162 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) 36163 36164 * float32x2_t vreinterpret_f32_u32 (uint32x2_t) 36165 36166 * float32x2_t vreinterpret_f32_u16 (uint16x4_t) 36167 36168 * float32x2_t vreinterpret_f32_u8 (uint8x8_t) 36169 36170 * float32x2_t vreinterpret_f32_s32 (int32x2_t) 36171 36172 * float32x2_t vreinterpret_f32_s16 (int16x4_t) 36173 36174 * float32x2_t vreinterpret_f32_s8 (int8x8_t) 36175 36176 * float32x2_t vreinterpret_f32_u64 (uint64x1_t) 36177 36178 * float32x2_t vreinterpret_f32_s64 (int64x1_t) 36179 36180 * float32x2_t vreinterpret_f32_p16 (poly16x4_t) 36181 36182 * float32x2_t vreinterpret_f32_p8 (poly8x8_t) 36183 36184 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) 36185 36186 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) 36187 36188 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) 36189 36190 * float32x4_t vreinterpretq_f32_s32 (int32x4_t) 36191 36192 * float32x4_t vreinterpretq_f32_s16 (int16x8_t) 36193 36194 * float32x4_t vreinterpretq_f32_s8 (int8x16_t) 36195 36196 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) 36197 36198 * float32x4_t vreinterpretq_f32_s64 (int64x2_t) 36199 36200 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) 36201 36202 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) 36203 36204 * int64x1_t vreinterpret_s64_u32 (uint32x2_t) 36205 36206 * int64x1_t vreinterpret_s64_u16 (uint16x4_t) 36207 36208 * int64x1_t vreinterpret_s64_u8 (uint8x8_t) 36209 36210 * int64x1_t vreinterpret_s64_s32 (int32x2_t) 36211 36212 * int64x1_t vreinterpret_s64_s16 (int16x4_t) 36213 36214 * int64x1_t vreinterpret_s64_s8 (int8x8_t) 36215 36216 * int64x1_t vreinterpret_s64_u64 (uint64x1_t) 36217 36218 * int64x1_t vreinterpret_s64_f32 (float32x2_t) 36219 36220 * int64x1_t vreinterpret_s64_p16 (poly16x4_t) 36221 36222 * int64x1_t vreinterpret_s64_p8 (poly8x8_t) 36223 36224 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) 36225 36226 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) 36227 36228 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) 36229 36230 * int64x2_t vreinterpretq_s64_s32 (int32x4_t) 36231 36232 * int64x2_t vreinterpretq_s64_s16 (int16x8_t) 36233 36234 * int64x2_t vreinterpretq_s64_s8 (int8x16_t) 36235 36236 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) 36237 36238 * int64x2_t vreinterpretq_s64_f32 (float32x4_t) 36239 36240 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) 36241 36242 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) 36243 36244 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) 36245 36246 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) 36247 36248 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) 36249 36250 * uint64x1_t vreinterpret_u64_s32 (int32x2_t) 36251 36252 * uint64x1_t vreinterpret_u64_s16 (int16x4_t) 36253 36254 * uint64x1_t vreinterpret_u64_s8 (int8x8_t) 36255 36256 * uint64x1_t vreinterpret_u64_s64 (int64x1_t) 36257 36258 * uint64x1_t vreinterpret_u64_f32 (float32x2_t) 36259 36260 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) 36261 36262 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) 36263 36264 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) 36265 36266 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) 36267 36268 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) 36269 36270 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) 36271 36272 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) 36273 36274 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) 36275 36276 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) 36277 36278 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) 36279 36280 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) 36281 36282 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) 36283 36284 * int8x8_t vreinterpret_s8_u32 (uint32x2_t) 36285 36286 * int8x8_t vreinterpret_s8_u16 (uint16x4_t) 36287 36288 * int8x8_t vreinterpret_s8_u8 (uint8x8_t) 36289 36290 * int8x8_t vreinterpret_s8_s32 (int32x2_t) 36291 36292 * int8x8_t vreinterpret_s8_s16 (int16x4_t) 36293 36294 * int8x8_t vreinterpret_s8_u64 (uint64x1_t) 36295 36296 * int8x8_t vreinterpret_s8_s64 (int64x1_t) 36297 36298 * int8x8_t vreinterpret_s8_f32 (float32x2_t) 36299 36300 * int8x8_t vreinterpret_s8_p16 (poly16x4_t) 36301 36302 * int8x8_t vreinterpret_s8_p8 (poly8x8_t) 36303 36304 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) 36305 36306 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) 36307 36308 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) 36309 36310 * int8x16_t vreinterpretq_s8_s32 (int32x4_t) 36311 36312 * int8x16_t vreinterpretq_s8_s16 (int16x8_t) 36313 36314 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) 36315 36316 * int8x16_t vreinterpretq_s8_s64 (int64x2_t) 36317 36318 * int8x16_t vreinterpretq_s8_f32 (float32x4_t) 36319 36320 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) 36321 36322 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) 36323 36324 * int16x4_t vreinterpret_s16_u32 (uint32x2_t) 36325 36326 * int16x4_t vreinterpret_s16_u16 (uint16x4_t) 36327 36328 * int16x4_t vreinterpret_s16_u8 (uint8x8_t) 36329 36330 * int16x4_t vreinterpret_s16_s32 (int32x2_t) 36331 36332 * int16x4_t vreinterpret_s16_s8 (int8x8_t) 36333 36334 * int16x4_t vreinterpret_s16_u64 (uint64x1_t) 36335 36336 * int16x4_t vreinterpret_s16_s64 (int64x1_t) 36337 36338 * int16x4_t vreinterpret_s16_f32 (float32x2_t) 36339 36340 * int16x4_t vreinterpret_s16_p16 (poly16x4_t) 36341 36342 * int16x4_t vreinterpret_s16_p8 (poly8x8_t) 36343 36344 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) 36345 36346 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) 36347 36348 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) 36349 36350 * int16x8_t vreinterpretq_s16_s32 (int32x4_t) 36351 36352 * int16x8_t vreinterpretq_s16_s8 (int8x16_t) 36353 36354 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) 36355 36356 * int16x8_t vreinterpretq_s16_s64 (int64x2_t) 36357 36358 * int16x8_t vreinterpretq_s16_f32 (float32x4_t) 36359 36360 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) 36361 36362 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) 36363 36364 * int32x2_t vreinterpret_s32_u32 (uint32x2_t) 36365 36366 * int32x2_t vreinterpret_s32_u16 (uint16x4_t) 36367 36368 * int32x2_t vreinterpret_s32_u8 (uint8x8_t) 36369 36370 * int32x2_t vreinterpret_s32_s16 (int16x4_t) 36371 36372 * int32x2_t vreinterpret_s32_s8 (int8x8_t) 36373 36374 * int32x2_t vreinterpret_s32_u64 (uint64x1_t) 36375 36376 * int32x2_t vreinterpret_s32_s64 (int64x1_t) 36377 36378 * int32x2_t vreinterpret_s32_f32 (float32x2_t) 36379 36380 * int32x2_t vreinterpret_s32_p16 (poly16x4_t) 36381 36382 * int32x2_t vreinterpret_s32_p8 (poly8x8_t) 36383 36384 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) 36385 36386 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) 36387 36388 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) 36389 36390 * int32x4_t vreinterpretq_s32_s16 (int16x8_t) 36391 36392 * int32x4_t vreinterpretq_s32_s8 (int8x16_t) 36393 36394 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) 36395 36396 * int32x4_t vreinterpretq_s32_s64 (int64x2_t) 36397 36398 * int32x4_t vreinterpretq_s32_f32 (float32x4_t) 36399 36400 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) 36401 36402 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) 36403 36404 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) 36405 36406 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) 36407 36408 * uint8x8_t vreinterpret_u8_s32 (int32x2_t) 36409 36410 * uint8x8_t vreinterpret_u8_s16 (int16x4_t) 36411 36412 * uint8x8_t vreinterpret_u8_s8 (int8x8_t) 36413 36414 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) 36415 36416 * uint8x8_t vreinterpret_u8_s64 (int64x1_t) 36417 36418 * uint8x8_t vreinterpret_u8_f32 (float32x2_t) 36419 36420 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) 36421 36422 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) 36423 36424 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) 36425 36426 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) 36427 36428 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) 36429 36430 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) 36431 36432 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) 36433 36434 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) 36435 36436 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) 36437 36438 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) 36439 36440 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) 36441 36442 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) 36443 36444 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) 36445 36446 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) 36447 36448 * uint16x4_t vreinterpret_u16_s32 (int32x2_t) 36449 36450 * uint16x4_t vreinterpret_u16_s16 (int16x4_t) 36451 36452 * uint16x4_t vreinterpret_u16_s8 (int8x8_t) 36453 36454 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) 36455 36456 * uint16x4_t vreinterpret_u16_s64 (int64x1_t) 36457 36458 * uint16x4_t vreinterpret_u16_f32 (float32x2_t) 36459 36460 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) 36461 36462 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) 36463 36464 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) 36465 36466 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) 36467 36468 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) 36469 36470 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) 36471 36472 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) 36473 36474 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) 36475 36476 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) 36477 36478 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) 36479 36480 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) 36481 36482 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) 36483 36484 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) 36485 36486 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) 36487 36488 * uint32x2_t vreinterpret_u32_s32 (int32x2_t) 36489 36490 * uint32x2_t vreinterpret_u32_s16 (int16x4_t) 36491 36492 * uint32x2_t vreinterpret_u32_s8 (int8x8_t) 36493 36494 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) 36495 36496 * uint32x2_t vreinterpret_u32_s64 (int64x1_t) 36497 36498 * uint32x2_t vreinterpret_u32_f32 (float32x2_t) 36499 36500 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) 36501 36502 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) 36503 36504 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) 36505 36506 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) 36507 36508 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) 36509 36510 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) 36511 36512 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) 36513 36514 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) 36515 36516 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) 36517 36518 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) 36519 36520 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) 36521 36522 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) 36523 36524 36525File: gcc.info, Node: AVR Built-in Functions, Next: Blackfin Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins 36526 365276.56.4 AVR Built-in Functions 36528----------------------------- 36529 36530For each built-in function for AVR, there is an equally named, 36531uppercase built-in macro defined. That way users can easily query if or 36532if not a specific built-in is implemented or not. For example, if 36533`__builtin_avr_nop' is available the macro `__BUILTIN_AVR_NOP' is 36534defined to `1' and undefined otherwise. 36535 36536 The following built-in functions map to the respective machine 36537instruction, i.e. `nop', `sei', `cli', `sleep', `wdr', `swap', `fmul', 36538`fmuls' resp. `fmulsu'. The three `fmul*' built-ins are implemented as 36539library call if no hardware multiplier is available. 36540 36541 void __builtin_avr_nop (void) 36542 void __builtin_avr_sei (void) 36543 void __builtin_avr_cli (void) 36544 void __builtin_avr_sleep (void) 36545 void __builtin_avr_wdr (void) 36546 unsigned char __builtin_avr_swap (unsigned char) 36547 unsigned int __builtin_avr_fmul (unsigned char, unsigned char) 36548 int __builtin_avr_fmuls (char, char) 36549 int __builtin_avr_fmulsu (char, unsigned char) 36550 36551 In order to delay execution for a specific number of cycles, GCC 36552implements 36553 void __builtin_avr_delay_cycles (unsigned long ticks) 36554 36555`ticks' is the number of ticks to delay execution. Note that this 36556built-in does not take into account the effect of interrupts that might 36557increase delay time. `ticks' must be a compile-time integer constant; 36558delays with a variable number of cycles are not supported. 36559 36560 char __builtin_avr_flash_segment (const __memx void*) 36561 36562This built-in takes a byte address to the 24-bit *note address space: 36563AVR Named Address Spaces. `__memx' and returns the number of the flash 36564segment (the 64 KiB chunk) where the address points to. Counting 36565starts at `0'. If the address does not point to flash memory, return 36566`-1'. 36567 36568 unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val) 36569 36570Insert bits from BITS into VAL and return the resulting value. The 36571nibbles of MAP determine how the insertion is performed: Let X be the 36572N-th nibble of MAP 36573 1. If X is `0xf', then the N-th bit of VAL is returned unaltered. 36574 36575 2. If X is in the range 0...7, then the N-th result bit is set to the 36576 X-th bit of BITS 36577 36578 3. If X is in the range 8...`0xe', then the N-th result bit is 36579 undefined. 36580 36581One typical use case for this built-in is adjusting input and output 36582values to non-contiguous port layouts. Some examples: 36583 36584 // same as val, bits is unused 36585 __builtin_avr_insert_bits (0xffffffff, bits, val) 36586 36587 // same as bits, val is unused 36588 __builtin_avr_insert_bits (0x76543210, bits, val) 36589 36590 // same as rotating bits by 4 36591 __builtin_avr_insert_bits (0x32107654, bits, 0) 36592 36593 // high nibble of result is the high nibble of val 36594 // low nibble of result is the low nibble of bits 36595 __builtin_avr_insert_bits (0xffff3210, bits, val) 36596 36597 // reverse the bit order of bits 36598 __builtin_avr_insert_bits (0x01234567, bits, 0) 36599 36600 36601File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: AVR Built-in Functions, Up: Target Builtins 36602 366036.56.5 Blackfin Built-in Functions 36604---------------------------------- 36605 36606Currently, there are two Blackfin-specific built-in functions. These 36607are used for generating `CSYNC' and `SSYNC' machine insns without using 36608inline assembly; by using these built-in functions the compiler can 36609automatically add workarounds for hardware errata involving these 36610instructions. These functions are named as follows: 36611 36612 void __builtin_bfin_csync (void) 36613 void __builtin_bfin_ssync (void) 36614 36615 36616File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 36617 366186.56.6 FR-V Built-in Functions 36619------------------------------ 36620 36621GCC provides many FR-V-specific built-in functions. In general, these 36622functions are intended to be compatible with those described by `FR-V 36623Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 36624The two exceptions are `__MDUNPACKH' and `__MBTOHE', the GCC forms of 36625which pass 128-bit values by pointer rather than by value. 36626 36627 Most of the functions are named after specific FR-V instructions. 36628Such functions are said to be "directly mapped" and are summarized here 36629in tabular form. 36630 36631* Menu: 36632 36633* Argument Types:: 36634* Directly-mapped Integer Functions:: 36635* Directly-mapped Media Functions:: 36636* Raw read/write Functions:: 36637* Other Built-in Functions:: 36638 36639 36640File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 36641 366426.56.6.1 Argument Types 36643....................... 36644 36645The arguments to the built-in functions can be divided into three 36646groups: register numbers, compile-time constants and run-time values. 36647In order to make this classification clear at a glance, the arguments 36648and return values are given the following pseudo types: 36649 36650Pseudo type Real C type Constant? Description 36651`uh' `unsigned short' No an unsigned halfword 36652`uw1' `unsigned int' No an unsigned word 36653`sw1' `int' No a signed word 36654`uw2' `unsigned long long' No an unsigned doubleword 36655`sw2' `long long' No a signed doubleword 36656`const' `int' Yes an integer constant 36657`acc' `int' Yes an ACC register number 36658`iacc' `int' Yes an IACC register number 36659 36660 These pseudo types are not defined by GCC, they are simply a notational 36661convenience used in this manual. 36662 36663 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 36664run time. They correspond to register operands in the underlying FR-V 36665instructions. 36666 36667 `const' arguments represent immediate operands in the underlying FR-V 36668instructions. They must be compile-time constants. 36669 36670 `acc' arguments are evaluated at compile time and specify the number 36671of an accumulator register. For example, an `acc' argument of 2 36672selects the ACC2 register. 36673 36674 `iacc' arguments are similar to `acc' arguments but specify the number 36675of an IACC register. See *note Other Built-in Functions:: for more 36676details. 36677 36678 36679File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 36680 366816.56.6.2 Directly-mapped Integer Functions 36682.......................................... 36683 36684The functions listed below map directly to FR-V I-type instructions. 36685 36686Function prototype Example usage Assembly output 36687`sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 36688`sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 36689`sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 36690`sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 36691`void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 36692`void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 36693`void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 36694`sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 36695`sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 36696`uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 36697 36698 36699File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 36700 367016.56.6.3 Directly-mapped Media Functions 36702........................................ 36703 36704The functions listed below map directly to FR-V M-type instructions. 36705 36706Function prototype Example usage Assembly output 36707`uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 36708`void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 36709`sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 36710`uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 36711`uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 36712`void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 36713`uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 36714`uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 36715`void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 36716`void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 36717`void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 36718`uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 36719`uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 36720`uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 36721`uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 36722`void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 36723`void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 36724`void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 36725`void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 36726`uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 36727`uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 36728`void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 36729`void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 36730`uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 36731`uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 36732`uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 36733`void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 36734`void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 36735`uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 36736`uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 36737`uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 36738`sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 36739`uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 36740`sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 36741`uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 36742`sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 36743`uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 36744`void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 36745`void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 36746`void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 36747`void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 36748`void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 36749`void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 36750`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 36751`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 36752`uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 36753`uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 36754`uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 36755`sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 36756`uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 36757`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 36758`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 36759`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 36760`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 36761`sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 36762`sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 36763`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 36764`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 36765`void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 36766sw2)' 36767`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 36768`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 36769`void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 36770sw2)' 36771`void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 36772uw2)' 36773`sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 36774`uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 36775`sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 36776`sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 36777`uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 36778`void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 36779sw2)' 36780`void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 36781sw2)' 36782`uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 36783`uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 36784`uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 36785`uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 36786`sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 36787`uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 36788`uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 36789`sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 36790`uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 36791`void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 36792`sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 36793`uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 36794`void __MTRAP (void)' `__MTRAP ()' `MTRAP' 36795`uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 36796`uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 36797`void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 36798`void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 36799`uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 36800 36801 36802File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 36803 368046.56.6.4 Raw read/write Functions 36805................................. 36806 36807This sections describes built-in functions related to read and write 36808instructions to access memory. These functions generate `membar' 36809instructions to flush the I/O load and stores where appropriate, as 36810described in Fujitsu's manual described above. 36811 36812`unsigned char __builtin_read8 (void *DATA)' 36813 36814`unsigned short __builtin_read16 (void *DATA)' 36815 36816`unsigned long __builtin_read32 (void *DATA)' 36817 36818`unsigned long long __builtin_read64 (void *DATA)' 36819 36820`void __builtin_write8 (void *DATA, unsigned char DATUM)' 36821 36822`void __builtin_write16 (void *DATA, unsigned short DATUM)' 36823 36824`void __builtin_write32 (void *DATA, unsigned long DATUM)' 36825 36826`void __builtin_write64 (void *DATA, unsigned long long DATUM)' 36827 36828 36829File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 36830 368316.56.6.5 Other Built-in Functions 36832................................. 36833 36834This section describes built-in functions that are not named after a 36835specific FR-V instruction. 36836 36837`sw2 __IACCreadll (iacc REG)' 36838 Return the full 64-bit value of IACC0. The REG argument is 36839 reserved for future expansion and must be 0. 36840 36841`sw1 __IACCreadl (iacc REG)' 36842 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 36843 Other values of REG are rejected as invalid. 36844 36845`void __IACCsetll (iacc REG, sw2 X)' 36846 Set the full 64-bit value of IACC0 to X. The REG argument is 36847 reserved for future expansion and must be 0. 36848 36849`void __IACCsetl (iacc REG, sw1 X)' 36850 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 36851 values of REG are rejected as invalid. 36852 36853`void __data_prefetch0 (const void *X)' 36854 Use the `dcpl' instruction to load the contents of address X into 36855 the data cache. 36856 36857`void __data_prefetch (const void *X)' 36858 Use the `nldub' instruction to load the contents of address X into 36859 the data cache. The instruction is issued in slot I1. 36860 36861 36862File: gcc.info, Node: X86 Built-in Functions, Next: X86 transactional memory intrinsics, Prev: FR-V Built-in Functions, Up: Target Builtins 36863 368646.56.7 X86 Built-in Functions 36865----------------------------- 36866 36867These built-in functions are available for the i386 and x86-64 family 36868of computers, depending on the command-line switches used. 36869 36870 If you specify command-line switches such as `-msse', the compiler 36871could use the extended instruction sets even if the built-ins are not 36872used explicitly in the program. For this reason, applications that 36873perform run-time CPU detection must compile separate files for each 36874supported architecture, using the appropriate flags. In particular, 36875the file containing the CPU detection code should be compiled without 36876these options. 36877 36878 The following machine modes are available for use with MMX built-in 36879functions (*note Vector Extensions::): `V2SI' for a vector of two 3688032-bit integers, `V4HI' for a vector of four 16-bit integers, and 36881`V8QI' for a vector of eight 8-bit integers. Some of the built-in 36882functions operate on MMX registers as a whole 64-bit entity, these use 36883`V1DI' as their mode. 36884 36885 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector 36886of two 32-bit floating-point values. 36887 36888 If SSE extensions are enabled, `V4SF' is used for a vector of four 3688932-bit floating-point values. Some instructions use a vector of four 3689032-bit integers, these use `V4SI'. Finally, some instructions operate 36891on an entire vector register, interpreting it as a 128-bit integer, 36892these use mode `TI'. 36893 36894 In 64-bit mode, the x86-64 family of processors uses additional 36895built-in functions for efficient use of `TF' (`__float128') 128-bit 36896floating point and `TC' 128-bit complex floating-point values. 36897 36898 The following floating-point built-in functions are available in 64-bit 36899mode. All of them implement the function that is part of the name. 36900 36901 __float128 __builtin_fabsq (__float128) 36902 __float128 __builtin_copysignq (__float128, __float128) 36903 36904 The following built-in function is always available. 36905 36906`void __builtin_ia32_pause (void)' 36907 Generates the `pause' machine instruction with a compiler memory 36908 barrier. 36909 36910 The following floating-point built-in functions are made available in 36911the 64-bit mode. 36912 36913`__float128 __builtin_infq (void)' 36914 Similar to `__builtin_inf', except the return type is `__float128'. 36915 36916`__float128 __builtin_huge_valq (void)' 36917 Similar to `__builtin_huge_val', except the return type is 36918 `__float128'. 36919 36920 The following built-in functions are always available and can be used 36921to check the target platform type. 36922 36923 -- Built-in Function: void __builtin_cpu_init (void) 36924 This function runs the CPU detection code to check the type of CPU 36925 and the features supported. This built-in function needs to be 36926 invoked along with the built-in functions to check CPU type and 36927 features, `__builtin_cpu_is' and `__builtin_cpu_supports', only 36928 when used in a function that is executed before any constructors 36929 are called. The CPU detection code is automatically executed in a 36930 very high priority constructor. 36931 36932 For example, this function has to be used in `ifunc' resolvers that 36933 check for CPU type using the built-in functions `__builtin_cpu_is' 36934 and `__builtin_cpu_supports', or in constructors on targets that 36935 don't support constructor priority. 36936 36937 static void (*resolve_memcpy (void)) (void) 36938 { 36939 // ifunc resolvers fire before constructors, explicitly call the init 36940 // function. 36941 __builtin_cpu_init (); 36942 if (__builtin_cpu_supports ("ssse3")) 36943 return ssse3_memcpy; // super fast memcpy with ssse3 instructions. 36944 else 36945 return default_memcpy; 36946 } 36947 36948 void *memcpy (void *, const void *, size_t) 36949 __attribute__ ((ifunc ("resolve_memcpy"))); 36950 36951 36952 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME) 36953 This function returns a positive integer if the run-time CPU is of 36954 type CPUNAME and returns `0' otherwise. The following CPU names 36955 can be detected: 36956 36957 `intel' 36958 Intel CPU. 36959 36960 `atom' 36961 Intel Atom CPU. 36962 36963 `core2' 36964 Intel Core 2 CPU. 36965 36966 `corei7' 36967 Intel Core i7 CPU. 36968 36969 `nehalem' 36970 Intel Core i7 Nehalem CPU. 36971 36972 `westmere' 36973 Intel Core i7 Westmere CPU. 36974 36975 `sandybridge' 36976 Intel Core i7 Sandy Bridge CPU. 36977 36978 `amd' 36979 AMD CPU. 36980 36981 `amdfam10h' 36982 AMD Family 10h CPU. 36983 36984 `barcelona' 36985 AMD Family 10h Barcelona CPU. 36986 36987 `shanghai' 36988 AMD Family 10h Shanghai CPU. 36989 36990 `istanbul' 36991 AMD Family 10h Istanbul CPU. 36992 36993 `btver1' 36994 AMD Family 14h CPU. 36995 36996 `amdfam15h' 36997 AMD Family 15h CPU. 36998 36999 `bdver1' 37000 AMD Family 15h Bulldozer version 1. 37001 37002 `bdver2' 37003 AMD Family 15h Bulldozer version 2. 37004 37005 `bdver3' 37006 AMD Family 15h Bulldozer version 3. 37007 37008 `btver2' 37009 AMD Family 16h CPU. 37010 37011 Here is an example: 37012 if (__builtin_cpu_is ("corei7")) 37013 { 37014 do_corei7 (); // Core i7 specific implementation. 37015 } 37016 else 37017 { 37018 do_generic (); // Generic implementation. 37019 } 37020 37021 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE) 37022 This function returns a positive integer if the run-time CPU 37023 supports FEATURE and returns `0' otherwise. The following features 37024 can be detected: 37025 37026 `cmov' 37027 CMOV instruction. 37028 37029 `mmx' 37030 MMX instructions. 37031 37032 `popcnt' 37033 POPCNT instruction. 37034 37035 `sse' 37036 SSE instructions. 37037 37038 `sse2' 37039 SSE2 instructions. 37040 37041 `sse3' 37042 SSE3 instructions. 37043 37044 `ssse3' 37045 SSSE3 instructions. 37046 37047 `sse4.1' 37048 SSE4.1 instructions. 37049 37050 `sse4.2' 37051 SSE4.2 instructions. 37052 37053 `avx' 37054 AVX instructions. 37055 37056 `avx2' 37057 AVX2 instructions. 37058 37059 Here is an example: 37060 if (__builtin_cpu_supports ("popcnt")) 37061 { 37062 asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc"); 37063 } 37064 else 37065 { 37066 count = generic_countbits (n); //generic implementation. 37067 } 37068 37069 The following built-in functions are made available by `-mmmx'. All 37070of them generate the machine instruction that is part of the name. 37071 37072 v8qi __builtin_ia32_paddb (v8qi, v8qi) 37073 v4hi __builtin_ia32_paddw (v4hi, v4hi) 37074 v2si __builtin_ia32_paddd (v2si, v2si) 37075 v8qi __builtin_ia32_psubb (v8qi, v8qi) 37076 v4hi __builtin_ia32_psubw (v4hi, v4hi) 37077 v2si __builtin_ia32_psubd (v2si, v2si) 37078 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 37079 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 37080 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 37081 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 37082 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 37083 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 37084 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 37085 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 37086 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 37087 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 37088 di __builtin_ia32_pand (di, di) 37089 di __builtin_ia32_pandn (di,di) 37090 di __builtin_ia32_por (di, di) 37091 di __builtin_ia32_pxor (di, di) 37092 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 37093 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 37094 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 37095 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 37096 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 37097 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 37098 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 37099 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 37100 v2si __builtin_ia32_punpckhdq (v2si, v2si) 37101 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 37102 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 37103 v2si __builtin_ia32_punpckldq (v2si, v2si) 37104 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 37105 v4hi __builtin_ia32_packssdw (v2si, v2si) 37106 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 37107 37108 v4hi __builtin_ia32_psllw (v4hi, v4hi) 37109 v2si __builtin_ia32_pslld (v2si, v2si) 37110 v1di __builtin_ia32_psllq (v1di, v1di) 37111 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 37112 v2si __builtin_ia32_psrld (v2si, v2si) 37113 v1di __builtin_ia32_psrlq (v1di, v1di) 37114 v4hi __builtin_ia32_psraw (v4hi, v4hi) 37115 v2si __builtin_ia32_psrad (v2si, v2si) 37116 v4hi __builtin_ia32_psllwi (v4hi, int) 37117 v2si __builtin_ia32_pslldi (v2si, int) 37118 v1di __builtin_ia32_psllqi (v1di, int) 37119 v4hi __builtin_ia32_psrlwi (v4hi, int) 37120 v2si __builtin_ia32_psrldi (v2si, int) 37121 v1di __builtin_ia32_psrlqi (v1di, int) 37122 v4hi __builtin_ia32_psrawi (v4hi, int) 37123 v2si __builtin_ia32_psradi (v2si, int) 37124 37125 The following built-in functions are made available either with 37126`-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 37127of them generate the machine instruction that is part of the name. 37128 37129 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 37130 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 37131 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 37132 v1di __builtin_ia32_psadbw (v8qi, v8qi) 37133 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 37134 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 37135 v8qi __builtin_ia32_pminub (v8qi, v8qi) 37136 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 37137 int __builtin_ia32_pextrw (v4hi, int) 37138 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 37139 int __builtin_ia32_pmovmskb (v8qi) 37140 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 37141 void __builtin_ia32_movntq (di *, di) 37142 void __builtin_ia32_sfence (void) 37143 37144 The following built-in functions are available when `-msse' is used. 37145All of them generate the machine instruction that is part of the name. 37146 37147 int __builtin_ia32_comieq (v4sf, v4sf) 37148 int __builtin_ia32_comineq (v4sf, v4sf) 37149 int __builtin_ia32_comilt (v4sf, v4sf) 37150 int __builtin_ia32_comile (v4sf, v4sf) 37151 int __builtin_ia32_comigt (v4sf, v4sf) 37152 int __builtin_ia32_comige (v4sf, v4sf) 37153 int __builtin_ia32_ucomieq (v4sf, v4sf) 37154 int __builtin_ia32_ucomineq (v4sf, v4sf) 37155 int __builtin_ia32_ucomilt (v4sf, v4sf) 37156 int __builtin_ia32_ucomile (v4sf, v4sf) 37157 int __builtin_ia32_ucomigt (v4sf, v4sf) 37158 int __builtin_ia32_ucomige (v4sf, v4sf) 37159 v4sf __builtin_ia32_addps (v4sf, v4sf) 37160 v4sf __builtin_ia32_subps (v4sf, v4sf) 37161 v4sf __builtin_ia32_mulps (v4sf, v4sf) 37162 v4sf __builtin_ia32_divps (v4sf, v4sf) 37163 v4sf __builtin_ia32_addss (v4sf, v4sf) 37164 v4sf __builtin_ia32_subss (v4sf, v4sf) 37165 v4sf __builtin_ia32_mulss (v4sf, v4sf) 37166 v4sf __builtin_ia32_divss (v4sf, v4sf) 37167 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 37168 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 37169 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 37170 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 37171 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 37172 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 37173 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 37174 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 37175 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 37176 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 37177 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 37178 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 37179 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 37180 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 37181 v4si __builtin_ia32_cmpless (v4sf, v4sf) 37182 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 37183 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 37184 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 37185 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 37186 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 37187 v4sf __builtin_ia32_maxps (v4sf, v4sf) 37188 v4sf __builtin_ia32_maxss (v4sf, v4sf) 37189 v4sf __builtin_ia32_minps (v4sf, v4sf) 37190 v4sf __builtin_ia32_minss (v4sf, v4sf) 37191 v4sf __builtin_ia32_andps (v4sf, v4sf) 37192 v4sf __builtin_ia32_andnps (v4sf, v4sf) 37193 v4sf __builtin_ia32_orps (v4sf, v4sf) 37194 v4sf __builtin_ia32_xorps (v4sf, v4sf) 37195 v4sf __builtin_ia32_movss (v4sf, v4sf) 37196 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 37197 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 37198 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 37199 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 37200 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 37201 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 37202 v2si __builtin_ia32_cvtps2pi (v4sf) 37203 int __builtin_ia32_cvtss2si (v4sf) 37204 v2si __builtin_ia32_cvttps2pi (v4sf) 37205 int __builtin_ia32_cvttss2si (v4sf) 37206 v4sf __builtin_ia32_rcpps (v4sf) 37207 v4sf __builtin_ia32_rsqrtps (v4sf) 37208 v4sf __builtin_ia32_sqrtps (v4sf) 37209 v4sf __builtin_ia32_rcpss (v4sf) 37210 v4sf __builtin_ia32_rsqrtss (v4sf) 37211 v4sf __builtin_ia32_sqrtss (v4sf) 37212 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 37213 void __builtin_ia32_movntps (float *, v4sf) 37214 int __builtin_ia32_movmskps (v4sf) 37215 37216 The following built-in functions are available when `-msse' is used. 37217 37218`v4sf __builtin_ia32_loadaps (float *)' 37219 Generates the `movaps' machine instruction as a load from memory. 37220 37221`void __builtin_ia32_storeaps (float *, v4sf)' 37222 Generates the `movaps' machine instruction as a store to memory. 37223 37224`v4sf __builtin_ia32_loadups (float *)' 37225 Generates the `movups' machine instruction as a load from memory. 37226 37227`void __builtin_ia32_storeups (float *, v4sf)' 37228 Generates the `movups' machine instruction as a store to memory. 37229 37230`v4sf __builtin_ia32_loadsss (float *)' 37231 Generates the `movss' machine instruction as a load from memory. 37232 37233`void __builtin_ia32_storess (float *, v4sf)' 37234 Generates the `movss' machine instruction as a store to memory. 37235 37236`v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 37237 Generates the `movhps' machine instruction as a load from memory. 37238 37239`v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 37240 Generates the `movlps' machine instruction as a load from memory 37241 37242`void __builtin_ia32_storehps (v2sf *, v4sf)' 37243 Generates the `movhps' machine instruction as a store to memory. 37244 37245`void __builtin_ia32_storelps (v2sf *, v4sf)' 37246 Generates the `movlps' machine instruction as a store to memory. 37247 37248 The following built-in functions are available when `-msse2' is used. 37249All of them generate the machine instruction that is part of the name. 37250 37251 int __builtin_ia32_comisdeq (v2df, v2df) 37252 int __builtin_ia32_comisdlt (v2df, v2df) 37253 int __builtin_ia32_comisdle (v2df, v2df) 37254 int __builtin_ia32_comisdgt (v2df, v2df) 37255 int __builtin_ia32_comisdge (v2df, v2df) 37256 int __builtin_ia32_comisdneq (v2df, v2df) 37257 int __builtin_ia32_ucomisdeq (v2df, v2df) 37258 int __builtin_ia32_ucomisdlt (v2df, v2df) 37259 int __builtin_ia32_ucomisdle (v2df, v2df) 37260 int __builtin_ia32_ucomisdgt (v2df, v2df) 37261 int __builtin_ia32_ucomisdge (v2df, v2df) 37262 int __builtin_ia32_ucomisdneq (v2df, v2df) 37263 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 37264 v2df __builtin_ia32_cmpltpd (v2df, v2df) 37265 v2df __builtin_ia32_cmplepd (v2df, v2df) 37266 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 37267 v2df __builtin_ia32_cmpgepd (v2df, v2df) 37268 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 37269 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 37270 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 37271 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 37272 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 37273 v2df __builtin_ia32_cmpngepd (v2df, v2df) 37274 v2df __builtin_ia32_cmpordpd (v2df, v2df) 37275 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 37276 v2df __builtin_ia32_cmpltsd (v2df, v2df) 37277 v2df __builtin_ia32_cmplesd (v2df, v2df) 37278 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 37279 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 37280 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 37281 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 37282 v2df __builtin_ia32_cmpordsd (v2df, v2df) 37283 v2di __builtin_ia32_paddq (v2di, v2di) 37284 v2di __builtin_ia32_psubq (v2di, v2di) 37285 v2df __builtin_ia32_addpd (v2df, v2df) 37286 v2df __builtin_ia32_subpd (v2df, v2df) 37287 v2df __builtin_ia32_mulpd (v2df, v2df) 37288 v2df __builtin_ia32_divpd (v2df, v2df) 37289 v2df __builtin_ia32_addsd (v2df, v2df) 37290 v2df __builtin_ia32_subsd (v2df, v2df) 37291 v2df __builtin_ia32_mulsd (v2df, v2df) 37292 v2df __builtin_ia32_divsd (v2df, v2df) 37293 v2df __builtin_ia32_minpd (v2df, v2df) 37294 v2df __builtin_ia32_maxpd (v2df, v2df) 37295 v2df __builtin_ia32_minsd (v2df, v2df) 37296 v2df __builtin_ia32_maxsd (v2df, v2df) 37297 v2df __builtin_ia32_andpd (v2df, v2df) 37298 v2df __builtin_ia32_andnpd (v2df, v2df) 37299 v2df __builtin_ia32_orpd (v2df, v2df) 37300 v2df __builtin_ia32_xorpd (v2df, v2df) 37301 v2df __builtin_ia32_movsd (v2df, v2df) 37302 v2df __builtin_ia32_unpckhpd (v2df, v2df) 37303 v2df __builtin_ia32_unpcklpd (v2df, v2df) 37304 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 37305 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 37306 v4si __builtin_ia32_paddd128 (v4si, v4si) 37307 v2di __builtin_ia32_paddq128 (v2di, v2di) 37308 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 37309 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 37310 v4si __builtin_ia32_psubd128 (v4si, v4si) 37311 v2di __builtin_ia32_psubq128 (v2di, v2di) 37312 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 37313 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 37314 v2di __builtin_ia32_pand128 (v2di, v2di) 37315 v2di __builtin_ia32_pandn128 (v2di, v2di) 37316 v2di __builtin_ia32_por128 (v2di, v2di) 37317 v2di __builtin_ia32_pxor128 (v2di, v2di) 37318 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 37319 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 37320 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 37321 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 37322 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 37323 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 37324 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 37325 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 37326 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 37327 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 37328 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 37329 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 37330 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 37331 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 37332 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 37333 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 37334 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 37335 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 37336 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 37337 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 37338 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 37339 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 37340 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 37341 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 37342 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 37343 v2df __builtin_ia32_loadupd (double *) 37344 void __builtin_ia32_storeupd (double *, v2df) 37345 v2df __builtin_ia32_loadhpd (v2df, double const *) 37346 v2df __builtin_ia32_loadlpd (v2df, double const *) 37347 int __builtin_ia32_movmskpd (v2df) 37348 int __builtin_ia32_pmovmskb128 (v16qi) 37349 void __builtin_ia32_movnti (int *, int) 37350 void __builtin_ia32_movnti64 (long long int *, long long int) 37351 void __builtin_ia32_movntpd (double *, v2df) 37352 void __builtin_ia32_movntdq (v2df *, v2df) 37353 v4si __builtin_ia32_pshufd (v4si, int) 37354 v8hi __builtin_ia32_pshuflw (v8hi, int) 37355 v8hi __builtin_ia32_pshufhw (v8hi, int) 37356 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 37357 v2df __builtin_ia32_sqrtpd (v2df) 37358 v2df __builtin_ia32_sqrtsd (v2df) 37359 v2df __builtin_ia32_shufpd (v2df, v2df, int) 37360 v2df __builtin_ia32_cvtdq2pd (v4si) 37361 v4sf __builtin_ia32_cvtdq2ps (v4si) 37362 v4si __builtin_ia32_cvtpd2dq (v2df) 37363 v2si __builtin_ia32_cvtpd2pi (v2df) 37364 v4sf __builtin_ia32_cvtpd2ps (v2df) 37365 v4si __builtin_ia32_cvttpd2dq (v2df) 37366 v2si __builtin_ia32_cvttpd2pi (v2df) 37367 v2df __builtin_ia32_cvtpi2pd (v2si) 37368 int __builtin_ia32_cvtsd2si (v2df) 37369 int __builtin_ia32_cvttsd2si (v2df) 37370 long long __builtin_ia32_cvtsd2si64 (v2df) 37371 long long __builtin_ia32_cvttsd2si64 (v2df) 37372 v4si __builtin_ia32_cvtps2dq (v4sf) 37373 v2df __builtin_ia32_cvtps2pd (v4sf) 37374 v4si __builtin_ia32_cvttps2dq (v4sf) 37375 v2df __builtin_ia32_cvtsi2sd (v2df, int) 37376 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 37377 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 37378 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 37379 void __builtin_ia32_clflush (const void *) 37380 void __builtin_ia32_lfence (void) 37381 void __builtin_ia32_mfence (void) 37382 v16qi __builtin_ia32_loaddqu (const char *) 37383 void __builtin_ia32_storedqu (char *, v16qi) 37384 v1di __builtin_ia32_pmuludq (v2si, v2si) 37385 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 37386 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 37387 v4si __builtin_ia32_pslld128 (v4si, v4si) 37388 v2di __builtin_ia32_psllq128 (v2di, v2di) 37389 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 37390 v4si __builtin_ia32_psrld128 (v4si, v4si) 37391 v2di __builtin_ia32_psrlq128 (v2di, v2di) 37392 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 37393 v4si __builtin_ia32_psrad128 (v4si, v4si) 37394 v2di __builtin_ia32_pslldqi128 (v2di, int) 37395 v8hi __builtin_ia32_psllwi128 (v8hi, int) 37396 v4si __builtin_ia32_pslldi128 (v4si, int) 37397 v2di __builtin_ia32_psllqi128 (v2di, int) 37398 v2di __builtin_ia32_psrldqi128 (v2di, int) 37399 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 37400 v4si __builtin_ia32_psrldi128 (v4si, int) 37401 v2di __builtin_ia32_psrlqi128 (v2di, int) 37402 v8hi __builtin_ia32_psrawi128 (v8hi, int) 37403 v4si __builtin_ia32_psradi128 (v4si, int) 37404 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 37405 v2di __builtin_ia32_movq128 (v2di) 37406 37407 The following built-in functions are available when `-msse3' is used. 37408All of them generate the machine instruction that is part of the name. 37409 37410 v2df __builtin_ia32_addsubpd (v2df, v2df) 37411 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 37412 v2df __builtin_ia32_haddpd (v2df, v2df) 37413 v4sf __builtin_ia32_haddps (v4sf, v4sf) 37414 v2df __builtin_ia32_hsubpd (v2df, v2df) 37415 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 37416 v16qi __builtin_ia32_lddqu (char const *) 37417 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 37418 v2df __builtin_ia32_movddup (v2df) 37419 v4sf __builtin_ia32_movshdup (v4sf) 37420 v4sf __builtin_ia32_movsldup (v4sf) 37421 void __builtin_ia32_mwait (unsigned int, unsigned int) 37422 37423 The following built-in functions are available when `-msse3' is used. 37424 37425`v2df __builtin_ia32_loadddup (double const *)' 37426 Generates the `movddup' machine instruction as a load from memory. 37427 37428 The following built-in functions are available when `-mssse3' is used. 37429All of them generate the machine instruction that is part of the name 37430with MMX registers. 37431 37432 v2si __builtin_ia32_phaddd (v2si, v2si) 37433 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 37434 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 37435 v2si __builtin_ia32_phsubd (v2si, v2si) 37436 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 37437 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 37438 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 37439 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 37440 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 37441 v8qi __builtin_ia32_psignb (v8qi, v8qi) 37442 v2si __builtin_ia32_psignd (v2si, v2si) 37443 v4hi __builtin_ia32_psignw (v4hi, v4hi) 37444 v1di __builtin_ia32_palignr (v1di, v1di, int) 37445 v8qi __builtin_ia32_pabsb (v8qi) 37446 v2si __builtin_ia32_pabsd (v2si) 37447 v4hi __builtin_ia32_pabsw (v4hi) 37448 37449 The following built-in functions are available when `-mssse3' is used. 37450All of them generate the machine instruction that is part of the name 37451with SSE registers. 37452 37453 v4si __builtin_ia32_phaddd128 (v4si, v4si) 37454 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 37455 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 37456 v4si __builtin_ia32_phsubd128 (v4si, v4si) 37457 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 37458 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 37459 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 37460 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 37461 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 37462 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 37463 v4si __builtin_ia32_psignd128 (v4si, v4si) 37464 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 37465 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 37466 v16qi __builtin_ia32_pabsb128 (v16qi) 37467 v4si __builtin_ia32_pabsd128 (v4si) 37468 v8hi __builtin_ia32_pabsw128 (v8hi) 37469 37470 The following built-in functions are available when `-msse4.1' is 37471used. All of them generate the machine instruction that is part of the 37472name. 37473 37474 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 37475 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 37476 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 37477 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 37478 v2df __builtin_ia32_dppd (v2df, v2df, const int) 37479 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 37480 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 37481 v2di __builtin_ia32_movntdqa (v2di *); 37482 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 37483 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 37484 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 37485 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 37486 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 37487 v8hi __builtin_ia32_phminposuw128 (v8hi) 37488 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 37489 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 37490 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 37491 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 37492 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 37493 v4si __builtin_ia32_pminsd128 (v4si, v4si) 37494 v4si __builtin_ia32_pminud128 (v4si, v4si) 37495 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 37496 v4si __builtin_ia32_pmovsxbd128 (v16qi) 37497 v2di __builtin_ia32_pmovsxbq128 (v16qi) 37498 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 37499 v2di __builtin_ia32_pmovsxdq128 (v4si) 37500 v4si __builtin_ia32_pmovsxwd128 (v8hi) 37501 v2di __builtin_ia32_pmovsxwq128 (v8hi) 37502 v4si __builtin_ia32_pmovzxbd128 (v16qi) 37503 v2di __builtin_ia32_pmovzxbq128 (v16qi) 37504 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 37505 v2di __builtin_ia32_pmovzxdq128 (v4si) 37506 v4si __builtin_ia32_pmovzxwd128 (v8hi) 37507 v2di __builtin_ia32_pmovzxwq128 (v8hi) 37508 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 37509 v4si __builtin_ia32_pmulld128 (v4si, v4si) 37510 int __builtin_ia32_ptestc128 (v2di, v2di) 37511 int __builtin_ia32_ptestnzc128 (v2di, v2di) 37512 int __builtin_ia32_ptestz128 (v2di, v2di) 37513 v2df __builtin_ia32_roundpd (v2df, const int) 37514 v4sf __builtin_ia32_roundps (v4sf, const int) 37515 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 37516 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 37517 37518 The following built-in functions are available when `-msse4.1' is used. 37519 37520`v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 37521 Generates the `insertps' machine instruction. 37522 37523`int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 37524 Generates the `pextrb' machine instruction. 37525 37526`v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 37527 Generates the `pinsrb' machine instruction. 37528 37529`v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 37530 Generates the `pinsrd' machine instruction. 37531 37532`v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 37533 Generates the `pinsrq' machine instruction in 64bit mode. 37534 37535 The following built-in functions are changed to generate new SSE4.1 37536instructions when `-msse4.1' is used. 37537 37538`float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 37539 Generates the `extractps' machine instruction. 37540 37541`int __builtin_ia32_vec_ext_v4si (v4si, const int)' 37542 Generates the `pextrd' machine instruction. 37543 37544`long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 37545 Generates the `pextrq' machine instruction in 64bit mode. 37546 37547 The following built-in functions are available when `-msse4.2' is 37548used. All of them generate the machine instruction that is part of the 37549name. 37550 37551 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 37552 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 37553 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 37554 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 37555 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 37556 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 37557 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 37558 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 37559 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 37560 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 37561 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 37562 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 37563 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 37564 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 37565 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 37566 37567 The following built-in functions are available when `-msse4.2' is used. 37568 37569`unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 37570 Generates the `crc32b' machine instruction. 37571 37572`unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 37573 Generates the `crc32w' machine instruction. 37574 37575`unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 37576 Generates the `crc32l' machine instruction. 37577 37578`unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 37579 Generates the `crc32q' machine instruction. 37580 37581 The following built-in functions are changed to generate new SSE4.2 37582instructions when `-msse4.2' is used. 37583 37584`int __builtin_popcount (unsigned int)' 37585 Generates the `popcntl' machine instruction. 37586 37587`int __builtin_popcountl (unsigned long)' 37588 Generates the `popcntl' or `popcntq' machine instruction, 37589 depending on the size of `unsigned long'. 37590 37591`int __builtin_popcountll (unsigned long long)' 37592 Generates the `popcntq' machine instruction. 37593 37594 The following built-in functions are available when `-mavx' is used. 37595All of them generate the machine instruction that is part of the name. 37596 37597 v4df __builtin_ia32_addpd256 (v4df,v4df) 37598 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 37599 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 37600 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 37601 v4df __builtin_ia32_andnpd256 (v4df,v4df) 37602 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 37603 v4df __builtin_ia32_andpd256 (v4df,v4df) 37604 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 37605 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 37606 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 37607 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 37608 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 37609 v2df __builtin_ia32_cmppd (v2df,v2df,int) 37610 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 37611 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 37612 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 37613 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 37614 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 37615 v4df __builtin_ia32_cvtdq2pd256 (v4si) 37616 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 37617 v4si __builtin_ia32_cvtpd2dq256 (v4df) 37618 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 37619 v8si __builtin_ia32_cvtps2dq256 (v8sf) 37620 v4df __builtin_ia32_cvtps2pd256 (v4sf) 37621 v4si __builtin_ia32_cvttpd2dq256 (v4df) 37622 v8si __builtin_ia32_cvttps2dq256 (v8sf) 37623 v4df __builtin_ia32_divpd256 (v4df,v4df) 37624 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 37625 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 37626 v4df __builtin_ia32_haddpd256 (v4df,v4df) 37627 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 37628 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 37629 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 37630 v32qi __builtin_ia32_lddqu256 (pcchar) 37631 v32qi __builtin_ia32_loaddqu256 (pcchar) 37632 v4df __builtin_ia32_loadupd256 (pcdouble) 37633 v8sf __builtin_ia32_loadups256 (pcfloat) 37634 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 37635 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 37636 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 37637 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 37638 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 37639 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 37640 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 37641 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 37642 v4df __builtin_ia32_maxpd256 (v4df,v4df) 37643 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 37644 v4df __builtin_ia32_minpd256 (v4df,v4df) 37645 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 37646 v4df __builtin_ia32_movddup256 (v4df) 37647 int __builtin_ia32_movmskpd256 (v4df) 37648 int __builtin_ia32_movmskps256 (v8sf) 37649 v8sf __builtin_ia32_movshdup256 (v8sf) 37650 v8sf __builtin_ia32_movsldup256 (v8sf) 37651 v4df __builtin_ia32_mulpd256 (v4df,v4df) 37652 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 37653 v4df __builtin_ia32_orpd256 (v4df,v4df) 37654 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 37655 v2df __builtin_ia32_pd_pd256 (v4df) 37656 v4df __builtin_ia32_pd256_pd (v2df) 37657 v4sf __builtin_ia32_ps_ps256 (v8sf) 37658 v8sf __builtin_ia32_ps256_ps (v4sf) 37659 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 37660 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 37661 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 37662 v8sf __builtin_ia32_rcpps256 (v8sf) 37663 v4df __builtin_ia32_roundpd256 (v4df,int) 37664 v8sf __builtin_ia32_roundps256 (v8sf,int) 37665 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 37666 v8sf __builtin_ia32_rsqrtps256 (v8sf) 37667 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 37668 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 37669 v4si __builtin_ia32_si_si256 (v8si) 37670 v8si __builtin_ia32_si256_si (v4si) 37671 v4df __builtin_ia32_sqrtpd256 (v4df) 37672 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 37673 v8sf __builtin_ia32_sqrtps256 (v8sf) 37674 void __builtin_ia32_storedqu256 (pchar,v32qi) 37675 void __builtin_ia32_storeupd256 (pdouble,v4df) 37676 void __builtin_ia32_storeups256 (pfloat,v8sf) 37677 v4df __builtin_ia32_subpd256 (v4df,v4df) 37678 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 37679 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 37680 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 37681 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 37682 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 37683 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 37684 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 37685 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 37686 v4sf __builtin_ia32_vbroadcastss (pcfloat) 37687 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 37688 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 37689 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 37690 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 37691 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 37692 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 37693 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 37694 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 37695 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 37696 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 37697 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 37698 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 37699 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 37700 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 37701 v2df __builtin_ia32_vpermilpd (v2df,int) 37702 v4df __builtin_ia32_vpermilpd256 (v4df,int) 37703 v4sf __builtin_ia32_vpermilps (v4sf,int) 37704 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 37705 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 37706 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 37707 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 37708 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 37709 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 37710 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 37711 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 37712 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 37713 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 37714 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 37715 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 37716 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 37717 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 37718 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 37719 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 37720 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 37721 void __builtin_ia32_vzeroall (void) 37722 void __builtin_ia32_vzeroupper (void) 37723 v4df __builtin_ia32_xorpd256 (v4df,v4df) 37724 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 37725 37726 The following built-in functions are available when `-mavx2' is used. 37727All of them generate the machine instruction that is part of the name. 37728 37729 v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int) 37730 v32qi __builtin_ia32_pabsb256 (v32qi) 37731 v16hi __builtin_ia32_pabsw256 (v16hi) 37732 v8si __builtin_ia32_pabsd256 (v8si) 37733 v16hi __builtin_ia32_packssdw256 (v8si,v8si) 37734 v32qi __builtin_ia32_packsswb256 (v16hi,v16hi) 37735 v16hi __builtin_ia32_packusdw256 (v8si,v8si) 37736 v32qi __builtin_ia32_packuswb256 (v16hi,v16hi) 37737 v32qi __builtin_ia32_paddb256 (v32qi,v32qi) 37738 v16hi __builtin_ia32_paddw256 (v16hi,v16hi) 37739 v8si __builtin_ia32_paddd256 (v8si,v8si) 37740 v4di __builtin_ia32_paddq256 (v4di,v4di) 37741 v32qi __builtin_ia32_paddsb256 (v32qi,v32qi) 37742 v16hi __builtin_ia32_paddsw256 (v16hi,v16hi) 37743 v32qi __builtin_ia32_paddusb256 (v32qi,v32qi) 37744 v16hi __builtin_ia32_paddusw256 (v16hi,v16hi) 37745 v4di __builtin_ia32_palignr256 (v4di,v4di,int) 37746 v4di __builtin_ia32_andsi256 (v4di,v4di) 37747 v4di __builtin_ia32_andnotsi256 (v4di,v4di) 37748 v32qi __builtin_ia32_pavgb256 (v32qi,v32qi) 37749 v16hi __builtin_ia32_pavgw256 (v16hi,v16hi) 37750 v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi) 37751 v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int) 37752 v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi) 37753 v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi) 37754 v8si __builtin_ia32_pcmpeqd256 (c8si,v8si) 37755 v4di __builtin_ia32_pcmpeqq256 (v4di,v4di) 37756 v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi) 37757 v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi) 37758 v8si __builtin_ia32_pcmpgtd256 (v8si,v8si) 37759 v4di __builtin_ia32_pcmpgtq256 (v4di,v4di) 37760 v16hi __builtin_ia32_phaddw256 (v16hi,v16hi) 37761 v8si __builtin_ia32_phaddd256 (v8si,v8si) 37762 v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi) 37763 v16hi __builtin_ia32_phsubw256 (v16hi,v16hi) 37764 v8si __builtin_ia32_phsubd256 (v8si,v8si) 37765 v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi) 37766 v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi) 37767 v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi) 37768 v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi) 37769 v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi) 37770 v8si __builtin_ia32_pmaxsd256 (v8si,v8si) 37771 v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi) 37772 v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi) 37773 v8si __builtin_ia32_pmaxud256 (v8si,v8si) 37774 v32qi __builtin_ia32_pminsb256 (v32qi,v32qi) 37775 v16hi __builtin_ia32_pminsw256 (v16hi,v16hi) 37776 v8si __builtin_ia32_pminsd256 (v8si,v8si) 37777 v32qi __builtin_ia32_pminub256 (v32qi,v32qi) 37778 v16hi __builtin_ia32_pminuw256 (v16hi,v16hi) 37779 v8si __builtin_ia32_pminud256 (v8si,v8si) 37780 int __builtin_ia32_pmovmskb256 (v32qi) 37781 v16hi __builtin_ia32_pmovsxbw256 (v16qi) 37782 v8si __builtin_ia32_pmovsxbd256 (v16qi) 37783 v4di __builtin_ia32_pmovsxbq256 (v16qi) 37784 v8si __builtin_ia32_pmovsxwd256 (v8hi) 37785 v4di __builtin_ia32_pmovsxwq256 (v8hi) 37786 v4di __builtin_ia32_pmovsxdq256 (v4si) 37787 v16hi __builtin_ia32_pmovzxbw256 (v16qi) 37788 v8si __builtin_ia32_pmovzxbd256 (v16qi) 37789 v4di __builtin_ia32_pmovzxbq256 (v16qi) 37790 v8si __builtin_ia32_pmovzxwd256 (v8hi) 37791 v4di __builtin_ia32_pmovzxwq256 (v8hi) 37792 v4di __builtin_ia32_pmovzxdq256 (v4si) 37793 v4di __builtin_ia32_pmuldq256 (v8si,v8si) 37794 v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi) 37795 v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi) 37796 v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi) 37797 v16hi __builtin_ia32_pmullw256 (v16hi,v16hi) 37798 v8si __builtin_ia32_pmulld256 (v8si,v8si) 37799 v4di __builtin_ia32_pmuludq256 (v8si,v8si) 37800 v4di __builtin_ia32_por256 (v4di,v4di) 37801 v16hi __builtin_ia32_psadbw256 (v32qi,v32qi) 37802 v32qi __builtin_ia32_pshufb256 (v32qi,v32qi) 37803 v8si __builtin_ia32_pshufd256 (v8si,int) 37804 v16hi __builtin_ia32_pshufhw256 (v16hi,int) 37805 v16hi __builtin_ia32_pshuflw256 (v16hi,int) 37806 v32qi __builtin_ia32_psignb256 (v32qi,v32qi) 37807 v16hi __builtin_ia32_psignw256 (v16hi,v16hi) 37808 v8si __builtin_ia32_psignd256 (v8si,v8si) 37809 v4di __builtin_ia32_pslldqi256 (v4di,int) 37810 v16hi __builtin_ia32_psllwi256 (16hi,int) 37811 v16hi __builtin_ia32_psllw256(v16hi,v8hi) 37812 v8si __builtin_ia32_pslldi256 (v8si,int) 37813 v8si __builtin_ia32_pslld256(v8si,v4si) 37814 v4di __builtin_ia32_psllqi256 (v4di,int) 37815 v4di __builtin_ia32_psllq256(v4di,v2di) 37816 v16hi __builtin_ia32_psrawi256 (v16hi,int) 37817 v16hi __builtin_ia32_psraw256 (v16hi,v8hi) 37818 v8si __builtin_ia32_psradi256 (v8si,int) 37819 v8si __builtin_ia32_psrad256 (v8si,v4si) 37820 v4di __builtin_ia32_psrldqi256 (v4di, int) 37821 v16hi __builtin_ia32_psrlwi256 (v16hi,int) 37822 v16hi __builtin_ia32_psrlw256 (v16hi,v8hi) 37823 v8si __builtin_ia32_psrldi256 (v8si,int) 37824 v8si __builtin_ia32_psrld256 (v8si,v4si) 37825 v4di __builtin_ia32_psrlqi256 (v4di,int) 37826 v4di __builtin_ia32_psrlq256(v4di,v2di) 37827 v32qi __builtin_ia32_psubb256 (v32qi,v32qi) 37828 v32hi __builtin_ia32_psubw256 (v16hi,v16hi) 37829 v8si __builtin_ia32_psubd256 (v8si,v8si) 37830 v4di __builtin_ia32_psubq256 (v4di,v4di) 37831 v32qi __builtin_ia32_psubsb256 (v32qi,v32qi) 37832 v16hi __builtin_ia32_psubsw256 (v16hi,v16hi) 37833 v32qi __builtin_ia32_psubusb256 (v32qi,v32qi) 37834 v16hi __builtin_ia32_psubusw256 (v16hi,v16hi) 37835 v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi) 37836 v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi) 37837 v8si __builtin_ia32_punpckhdq256 (v8si,v8si) 37838 v4di __builtin_ia32_punpckhqdq256 (v4di,v4di) 37839 v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi) 37840 v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi) 37841 v8si __builtin_ia32_punpckldq256 (v8si,v8si) 37842 v4di __builtin_ia32_punpcklqdq256 (v4di,v4di) 37843 v4di __builtin_ia32_pxor256 (v4di,v4di) 37844 v4di __builtin_ia32_movntdqa256 (pv4di) 37845 v4sf __builtin_ia32_vbroadcastss_ps (v4sf) 37846 v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf) 37847 v4df __builtin_ia32_vbroadcastsd_pd256 (v2df) 37848 v4di __builtin_ia32_vbroadcastsi256 (v2di) 37849 v4si __builtin_ia32_pblendd128 (v4si,v4si) 37850 v8si __builtin_ia32_pblendd256 (v8si,v8si) 37851 v32qi __builtin_ia32_pbroadcastb256 (v16qi) 37852 v16hi __builtin_ia32_pbroadcastw256 (v8hi) 37853 v8si __builtin_ia32_pbroadcastd256 (v4si) 37854 v4di __builtin_ia32_pbroadcastq256 (v2di) 37855 v16qi __builtin_ia32_pbroadcastb128 (v16qi) 37856 v8hi __builtin_ia32_pbroadcastw128 (v8hi) 37857 v4si __builtin_ia32_pbroadcastd128 (v4si) 37858 v2di __builtin_ia32_pbroadcastq128 (v2di) 37859 v8si __builtin_ia32_permvarsi256 (v8si,v8si) 37860 v4df __builtin_ia32_permdf256 (v4df,int) 37861 v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf) 37862 v4di __builtin_ia32_permdi256 (v4di,int) 37863 v4di __builtin_ia32_permti256 (v4di,v4di,int) 37864 v4di __builtin_ia32_extract128i256 (v4di,int) 37865 v4di __builtin_ia32_insert128i256 (v4di,v2di,int) 37866 v8si __builtin_ia32_maskloadd256 (pcv8si,v8si) 37867 v4di __builtin_ia32_maskloadq256 (pcv4di,v4di) 37868 v4si __builtin_ia32_maskloadd (pcv4si,v4si) 37869 v2di __builtin_ia32_maskloadq (pcv2di,v2di) 37870 void __builtin_ia32_maskstored256 (pv8si,v8si,v8si) 37871 void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di) 37872 void __builtin_ia32_maskstored (pv4si,v4si,v4si) 37873 void __builtin_ia32_maskstoreq (pv2di,v2di,v2di) 37874 v8si __builtin_ia32_psllv8si (v8si,v8si) 37875 v4si __builtin_ia32_psllv4si (v4si,v4si) 37876 v4di __builtin_ia32_psllv4di (v4di,v4di) 37877 v2di __builtin_ia32_psllv2di (v2di,v2di) 37878 v8si __builtin_ia32_psrav8si (v8si,v8si) 37879 v4si __builtin_ia32_psrav4si (v4si,v4si) 37880 v8si __builtin_ia32_psrlv8si (v8si,v8si) 37881 v4si __builtin_ia32_psrlv4si (v4si,v4si) 37882 v4di __builtin_ia32_psrlv4di (v4di,v4di) 37883 v2di __builtin_ia32_psrlv2di (v2di,v2di) 37884 v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int) 37885 v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int) 37886 v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int) 37887 v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int) 37888 v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int) 37889 v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int) 37890 v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int) 37891 v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int) 37892 v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int) 37893 v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int) 37894 v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int) 37895 v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int) 37896 v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int) 37897 v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int) 37898 v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int) 37899 v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int) 37900 37901 The following built-in functions are available when `-maes' is used. 37902All of them generate the machine instruction that is part of the name. 37903 37904 v2di __builtin_ia32_aesenc128 (v2di, v2di) 37905 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 37906 v2di __builtin_ia32_aesdec128 (v2di, v2di) 37907 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 37908 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 37909 v2di __builtin_ia32_aesimc128 (v2di) 37910 37911 The following built-in function is available when `-mpclmul' is used. 37912 37913`v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 37914 Generates the `pclmulqdq' machine instruction. 37915 37916 The following built-in function is available when `-mfsgsbase' is 37917used. All of them generate the machine instruction that is part of the 37918name. 37919 37920 unsigned int __builtin_ia32_rdfsbase32 (void) 37921 unsigned long long __builtin_ia32_rdfsbase64 (void) 37922 unsigned int __builtin_ia32_rdgsbase32 (void) 37923 unsigned long long __builtin_ia32_rdgsbase64 (void) 37924 void _writefsbase_u32 (unsigned int) 37925 void _writefsbase_u64 (unsigned long long) 37926 void _writegsbase_u32 (unsigned int) 37927 void _writegsbase_u64 (unsigned long long) 37928 37929 The following built-in function is available when `-mrdrnd' is used. 37930All of them generate the machine instruction that is part of the name. 37931 37932 unsigned int __builtin_ia32_rdrand16_step (unsigned short *) 37933 unsigned int __builtin_ia32_rdrand32_step (unsigned int *) 37934 unsigned int __builtin_ia32_rdrand64_step (unsigned long long *) 37935 37936 The following built-in functions are available when `-msse4a' is used. 37937All of them generate the machine instruction that is part of the name. 37938 37939 void __builtin_ia32_movntsd (double *, v2df) 37940 void __builtin_ia32_movntss (float *, v4sf) 37941 v2di __builtin_ia32_extrq (v2di, v16qi) 37942 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 37943 v2di __builtin_ia32_insertq (v2di, v2di) 37944 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 37945 37946 The following built-in functions are available when `-mxop' is used. 37947 v2df __builtin_ia32_vfrczpd (v2df) 37948 v4sf __builtin_ia32_vfrczps (v4sf) 37949 v2df __builtin_ia32_vfrczsd (v2df) 37950 v4sf __builtin_ia32_vfrczss (v4sf) 37951 v4df __builtin_ia32_vfrczpd256 (v4df) 37952 v8sf __builtin_ia32_vfrczps256 (v8sf) 37953 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di) 37954 v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di) 37955 v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si) 37956 v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi) 37957 v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi) 37958 v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df) 37959 v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf) 37960 v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di) 37961 v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si) 37962 v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi) 37963 v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi) 37964 v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df) 37965 v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf) 37966 v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi) 37967 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 37968 v4si __builtin_ia32_vpcomeqd (v4si, v4si) 37969 v2di __builtin_ia32_vpcomeqq (v2di, v2di) 37970 v16qi __builtin_ia32_vpcomequb (v16qi, v16qi) 37971 v4si __builtin_ia32_vpcomequd (v4si, v4si) 37972 v2di __builtin_ia32_vpcomequq (v2di, v2di) 37973 v8hi __builtin_ia32_vpcomequw (v8hi, v8hi) 37974 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 37975 v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi) 37976 v4si __builtin_ia32_vpcomfalsed (v4si, v4si) 37977 v2di __builtin_ia32_vpcomfalseq (v2di, v2di) 37978 v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi) 37979 v4si __builtin_ia32_vpcomfalseud (v4si, v4si) 37980 v2di __builtin_ia32_vpcomfalseuq (v2di, v2di) 37981 v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi) 37982 v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi) 37983 v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi) 37984 v4si __builtin_ia32_vpcomged (v4si, v4si) 37985 v2di __builtin_ia32_vpcomgeq (v2di, v2di) 37986 v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi) 37987 v4si __builtin_ia32_vpcomgeud (v4si, v4si) 37988 v2di __builtin_ia32_vpcomgeuq (v2di, v2di) 37989 v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi) 37990 v8hi __builtin_ia32_vpcomgew (v8hi, v8hi) 37991 v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi) 37992 v4si __builtin_ia32_vpcomgtd (v4si, v4si) 37993 v2di __builtin_ia32_vpcomgtq (v2di, v2di) 37994 v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi) 37995 v4si __builtin_ia32_vpcomgtud (v4si, v4si) 37996 v2di __builtin_ia32_vpcomgtuq (v2di, v2di) 37997 v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi) 37998 v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi) 37999 v16qi __builtin_ia32_vpcomleb (v16qi, v16qi) 38000 v4si __builtin_ia32_vpcomled (v4si, v4si) 38001 v2di __builtin_ia32_vpcomleq (v2di, v2di) 38002 v16qi __builtin_ia32_vpcomleub (v16qi, v16qi) 38003 v4si __builtin_ia32_vpcomleud (v4si, v4si) 38004 v2di __builtin_ia32_vpcomleuq (v2di, v2di) 38005 v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi) 38006 v8hi __builtin_ia32_vpcomlew (v8hi, v8hi) 38007 v16qi __builtin_ia32_vpcomltb (v16qi, v16qi) 38008 v4si __builtin_ia32_vpcomltd (v4si, v4si) 38009 v2di __builtin_ia32_vpcomltq (v2di, v2di) 38010 v16qi __builtin_ia32_vpcomltub (v16qi, v16qi) 38011 v4si __builtin_ia32_vpcomltud (v4si, v4si) 38012 v2di __builtin_ia32_vpcomltuq (v2di, v2di) 38013 v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi) 38014 v8hi __builtin_ia32_vpcomltw (v8hi, v8hi) 38015 v16qi __builtin_ia32_vpcomneb (v16qi, v16qi) 38016 v4si __builtin_ia32_vpcomned (v4si, v4si) 38017 v2di __builtin_ia32_vpcomneq (v2di, v2di) 38018 v16qi __builtin_ia32_vpcomneub (v16qi, v16qi) 38019 v4si __builtin_ia32_vpcomneud (v4si, v4si) 38020 v2di __builtin_ia32_vpcomneuq (v2di, v2di) 38021 v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi) 38022 v8hi __builtin_ia32_vpcomnew (v8hi, v8hi) 38023 v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi) 38024 v4si __builtin_ia32_vpcomtrued (v4si, v4si) 38025 v2di __builtin_ia32_vpcomtrueq (v2di, v2di) 38026 v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi) 38027 v4si __builtin_ia32_vpcomtrueud (v4si, v4si) 38028 v2di __builtin_ia32_vpcomtrueuq (v2di, v2di) 38029 v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi) 38030 v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi) 38031 v4si __builtin_ia32_vphaddbd (v16qi) 38032 v2di __builtin_ia32_vphaddbq (v16qi) 38033 v8hi __builtin_ia32_vphaddbw (v16qi) 38034 v2di __builtin_ia32_vphadddq (v4si) 38035 v4si __builtin_ia32_vphaddubd (v16qi) 38036 v2di __builtin_ia32_vphaddubq (v16qi) 38037 v8hi __builtin_ia32_vphaddubw (v16qi) 38038 v2di __builtin_ia32_vphaddudq (v4si) 38039 v4si __builtin_ia32_vphadduwd (v8hi) 38040 v2di __builtin_ia32_vphadduwq (v8hi) 38041 v4si __builtin_ia32_vphaddwd (v8hi) 38042 v2di __builtin_ia32_vphaddwq (v8hi) 38043 v8hi __builtin_ia32_vphsubbw (v16qi) 38044 v2di __builtin_ia32_vphsubdq (v4si) 38045 v4si __builtin_ia32_vphsubwd (v8hi) 38046 v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si) 38047 v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di) 38048 v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di) 38049 v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si) 38050 v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di) 38051 v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di) 38052 v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si) 38053 v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi) 38054 v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si) 38055 v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi) 38056 v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si) 38057 v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si) 38058 v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi) 38059 v16qi __builtin_ia32_vprotb (v16qi, v16qi) 38060 v4si __builtin_ia32_vprotd (v4si, v4si) 38061 v2di __builtin_ia32_vprotq (v2di, v2di) 38062 v8hi __builtin_ia32_vprotw (v8hi, v8hi) 38063 v16qi __builtin_ia32_vpshab (v16qi, v16qi) 38064 v4si __builtin_ia32_vpshad (v4si, v4si) 38065 v2di __builtin_ia32_vpshaq (v2di, v2di) 38066 v8hi __builtin_ia32_vpshaw (v8hi, v8hi) 38067 v16qi __builtin_ia32_vpshlb (v16qi, v16qi) 38068 v4si __builtin_ia32_vpshld (v4si, v4si) 38069 v2di __builtin_ia32_vpshlq (v2di, v2di) 38070 v8hi __builtin_ia32_vpshlw (v8hi, v8hi) 38071 38072 The following built-in functions are available when `-mfma4' is used. 38073All of them generate the machine instruction that is part of the name 38074with MMX registers. 38075 38076 v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df) 38077 v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf) 38078 v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df) 38079 v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf) 38080 v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df) 38081 v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf) 38082 v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df) 38083 v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf) 38084 v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df) 38085 v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf) 38086 v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df) 38087 v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf) 38088 v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df) 38089 v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf) 38090 v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df) 38091 v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf) 38092 v2df __builtin_ia32_fmaddsubpd (v2df, v2df, v2df) 38093 v4sf __builtin_ia32_fmaddsubps (v4sf, v4sf, v4sf) 38094 v2df __builtin_ia32_fmsubaddpd (v2df, v2df, v2df) 38095 v4sf __builtin_ia32_fmsubaddps (v4sf, v4sf, v4sf) 38096 v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df) 38097 v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf) 38098 v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df) 38099 v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf) 38100 v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df) 38101 v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf) 38102 v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df) 38103 v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf) 38104 v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df) 38105 v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf) 38106 v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df) 38107 v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf) 38108 38109 The following built-in functions are available when `-mlwp' is used. 38110 38111 void __builtin_ia32_llwpcb16 (void *); 38112 void __builtin_ia32_llwpcb32 (void *); 38113 void __builtin_ia32_llwpcb64 (void *); 38114 void * __builtin_ia32_llwpcb16 (void); 38115 void * __builtin_ia32_llwpcb32 (void); 38116 void * __builtin_ia32_llwpcb64 (void); 38117 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) 38118 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) 38119 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) 38120 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) 38121 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) 38122 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) 38123 38124 The following built-in functions are available when `-mbmi' is used. 38125All of them generate the machine instruction that is part of the name. 38126 unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int); 38127 unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long); 38128 38129 The following built-in functions are available when `-mbmi2' is used. 38130All of them generate the machine instruction that is part of the name. 38131 unsigned int _bzhi_u32 (unsigned int, unsigned int) 38132 unsigned int _pdep_u32 (unsigned int, unsigned int) 38133 unsigned int _pext_u32 (unsigned int, unsigned int) 38134 unsigned long long _bzhi_u64 (unsigned long long, unsigned long long) 38135 unsigned long long _pdep_u64 (unsigned long long, unsigned long long) 38136 unsigned long long _pext_u64 (unsigned long long, unsigned long long) 38137 38138 The following built-in functions are available when `-mlzcnt' is used. 38139All of them generate the machine instruction that is part of the name. 38140 unsigned short __builtin_ia32_lzcnt_16(unsigned short); 38141 unsigned int __builtin_ia32_lzcnt_u32(unsigned int); 38142 unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long); 38143 38144 The following built-in functions are available when `-mtbm' is used. 38145Both of them generate the immediate form of the bextr machine 38146instruction. 38147 unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int); 38148 unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long); 38149 38150 The following built-in functions are available when `-m3dnow' is used. 38151All of them generate the machine instruction that is part of the name. 38152 38153 void __builtin_ia32_femms (void) 38154 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 38155 v2si __builtin_ia32_pf2id (v2sf) 38156 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 38157 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 38158 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 38159 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 38160 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 38161 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 38162 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 38163 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 38164 v2sf __builtin_ia32_pfrcp (v2sf) 38165 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 38166 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 38167 v2sf __builtin_ia32_pfrsqrt (v2sf) 38168 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 38169 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 38170 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 38171 v2sf __builtin_ia32_pi2fd (v2si) 38172 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 38173 38174 The following built-in functions are available when both `-m3dnow' and 38175`-march=athlon' are used. All of them generate the machine instruction 38176that is part of the name. 38177 38178 v2si __builtin_ia32_pf2iw (v2sf) 38179 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 38180 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 38181 v2sf __builtin_ia32_pi2fw (v2si) 38182 v2sf __builtin_ia32_pswapdsf (v2sf) 38183 v2si __builtin_ia32_pswapdsi (v2si) 38184 38185 The following built-in functions are available when `-mrtm' is used 38186They are used for restricted transactional memory. These are the 38187internal low level functions. Normally the functions in *note X86 38188transactional memory intrinsics:: should be used instead. 38189 38190 int __builtin_ia32_xbegin () 38191 void __builtin_ia32_xend () 38192 void __builtin_ia32_xabort (status) 38193 int __builtin_ia32_xtest () 38194 38195 38196File: gcc.info, Node: X86 transactional memory intrinsics, Next: MIPS DSP Built-in Functions, Prev: X86 Built-in Functions, Up: Target Builtins 38197 381986.56.8 X86 transaction memory intrinsics 38199---------------------------------------- 38200 38201Hardware transactional memory intrinsics for i386. These allow to use 38202memory transactions with RTM (Restricted Transactional Memory). For 38203using HLE (Hardware Lock Elision) see *note x86 specific memory model 38204extensions for transactional memory:: instead. This support is enabled 38205with the `-mrtm' option. 38206 38207 A memory transaction commits all changes to memory in an atomic way, 38208as visible to other threads. If the transaction fails it is rolled back 38209and all side effects discarded. 38210 38211 Generally there is no guarantee that a memory transaction ever suceeds 38212and suitable fallback code always needs to be supplied. 38213 38214 -- RTM Function: unsigned _xbegin () 38215 Start a RTM (Restricted Transactional Memory) transaction. 38216 Returns _XBEGIN_STARTED when the transaction started successfully 38217 (note this is not 0, so the constant has to be explicitely 38218 tested). When the transaction aborts all side effects are undone 38219 and an abort code is returned. There is no guarantee any 38220 transaction ever succeeds, so there always needs to be a valid 38221 tested fallback path. 38222 38223 #include <immintrin.h> 38224 38225 if ((status = _xbegin ()) == _XBEGIN_STARTED) { 38226 ... transaction code... 38227 _xend (); 38228 } else { 38229 ... non transactional fallback path... 38230 } 38231 38232 Valid abort status bits (when the value is not `_XBEGIN_STARTED') are: 38233 38234`_XABORT_EXPLICIT' 38235 Transaction explicitely aborted with `_xabort'. The parameter 38236 passed to `_xabort' is available with `_XABORT_CODE(status)' 38237 38238`_XABORT_RETRY' 38239 Transaction retry is possible. 38240 38241`_XABORT_CONFLICT' 38242 Transaction abort due to a memory conflict with another thread 38243 38244`_XABORT_CAPACITY' 38245 Transaction abort due to the transaction using too much memory 38246 38247`_XABORT_DEBUG' 38248 Transaction abort due to a debug trap 38249 38250`_XABORT_NESTED' 38251 Transaction abort in a inner nested transaction 38252 38253 -- RTM Function: void _xend () 38254 Commit the current transaction. When no transaction is active this 38255 will fault. All memory side effects of the transactions will 38256 become visible to other threads in an atomic matter. 38257 38258 -- RTM Function: int _xtest () 38259 Return a value not zero when a transaction is currently active, 38260 otherwise 0. 38261 38262 -- RTM Function: void _xabort (status) 38263 Abort the current transaction. When no transaction is active this 38264 is a no-op. status must be a 8bit constant, that is included in 38265 the status code returned by `_xbegin' 38266 38267 38268File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 transactional memory intrinsics, Up: Target Builtins 38269 382706.56.9 MIPS DSP Built-in Functions 38271---------------------------------- 38272 38273The MIPS DSP Application-Specific Extension (ASE) includes new 38274instructions that are designed to improve the performance of DSP and 38275media applications. It provides instructions that operate on packed 382768-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 38277 38278 GCC supports MIPS DSP operations using both the generic vector 38279extensions (*note Vector Extensions::) and a collection of 38280MIPS-specific built-in functions. Both kinds of support are enabled by 38281the `-mdsp' command-line option. 38282 38283 Revision 2 of the ASE was introduced in the second half of 2006. This 38284revision adds extra instructions to the original ASE, but is otherwise 38285backwards-compatible with it. You can select revision 2 using the 38286command-line option `-mdspr2'; this option implies `-mdsp'. 38287 38288 The SCOUNT and POS bits of the DSP control register are global. The 38289WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and 38290POS bits. During optimization, the compiler does not delete these 38291instructions and it does not delete calls to functions containing these 38292instructions. 38293 38294 At present, GCC only provides support for operations on 32-bit 38295vectors. The vector type associated with 8-bit integer data is usually 38296called `v4i8', the vector type associated with Q7 is usually called 38297`v4q7', the vector type associated with 16-bit integer data is usually 38298called `v2i16', and the vector type associated with Q15 is usually 38299called `v2q15'. They can be defined in C as follows: 38300 38301 typedef signed char v4i8 __attribute__ ((vector_size(4))); 38302 typedef signed char v4q7 __attribute__ ((vector_size(4))); 38303 typedef short v2i16 __attribute__ ((vector_size(4))); 38304 typedef short v2q15 __attribute__ ((vector_size(4))); 38305 38306 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same 38307way as aggregates. For example: 38308 38309 v4i8 a = {1, 2, 3, 4}; 38310 v4i8 b; 38311 b = (v4i8) {5, 6, 7, 8}; 38312 38313 v2q15 c = {0x0fcb, 0x3a75}; 38314 v2q15 d; 38315 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 38316 38317 _Note:_ The CPU's endianness determines the order in which values are 38318packed. On little-endian targets, the first value is the least 38319significant and the last value is the most significant. The opposite 38320order applies to big-endian targets. For example, the code above sets 38321the lowest byte of `a' to `1' on little-endian targets and `4' on 38322big-endian targets. 38323 38324 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 38325representation. As shown in this example, the integer representation 38326of a Q7 value can be obtained by multiplying the fractional value by 38327`0x1.0p7'. The equivalent for Q15 values is to multiply by `0x1.0p15'. 38328The equivalent for Q31 values is to multiply by `0x1.0p31'. 38329 38330 The table below lists the `v4i8' and `v2q15' operations for which 38331hardware support exists. `a' and `b' are `v4i8' values, and `c' and 38332`d' are `v2q15' values. 38333 38334C code MIPS instruction 38335`a + b' `addu.qb' 38336`c + d' `addq.ph' 38337`a - b' `subu.qb' 38338`c - d' `subq.ph' 38339 38340 The table below lists the `v2i16' operation for which hardware support 38341exists for the DSP ASE REV 2. `e' and `f' are `v2i16' values. 38342 38343C code MIPS instruction 38344`e * f' `mul.ph' 38345 38346 It is easier to describe the DSP built-in functions if we first define 38347the following types: 38348 38349 typedef int q31; 38350 typedef int i32; 38351 typedef unsigned int ui32; 38352 typedef long long a64; 38353 38354 `q31' and `i32' are actually the same as `int', but we use `q31' to 38355indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 38356value. Similarly, `a64' is the same as `long long', but we use `a64' 38357to indicate values that are placed in one of the four DSP accumulators 38358(`$ac0', `$ac1', `$ac2' or `$ac3'). 38359 38360 Also, some built-in functions prefer or require immediate numbers as 38361parameters, because the corresponding DSP instructions accept both 38362immediate numbers and register operands, or accept immediate numbers 38363only. The immediate parameters are listed as follows. 38364 38365 imm0_3: 0 to 3. 38366 imm0_7: 0 to 7. 38367 imm0_15: 0 to 15. 38368 imm0_31: 0 to 31. 38369 imm0_63: 0 to 63. 38370 imm0_255: 0 to 255. 38371 imm_n32_31: -32 to 31. 38372 imm_n512_511: -512 to 511. 38373 38374 The following built-in functions map directly to a particular MIPS DSP 38375instruction. Please refer to the architecture specification for 38376details on what each instruction does. 38377 38378 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 38379 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 38380 q31 __builtin_mips_addq_s_w (q31, q31) 38381 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 38382 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 38383 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 38384 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 38385 q31 __builtin_mips_subq_s_w (q31, q31) 38386 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 38387 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 38388 i32 __builtin_mips_addsc (i32, i32) 38389 i32 __builtin_mips_addwc (i32, i32) 38390 i32 __builtin_mips_modsub (i32, i32) 38391 i32 __builtin_mips_raddu_w_qb (v4i8) 38392 v2q15 __builtin_mips_absq_s_ph (v2q15) 38393 q31 __builtin_mips_absq_s_w (q31) 38394 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 38395 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 38396 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 38397 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 38398 q31 __builtin_mips_preceq_w_phl (v2q15) 38399 q31 __builtin_mips_preceq_w_phr (v2q15) 38400 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 38401 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 38402 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 38403 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 38404 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 38405 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 38406 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 38407 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 38408 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 38409 v4i8 __builtin_mips_shll_qb (v4i8, i32) 38410 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 38411 v2q15 __builtin_mips_shll_ph (v2q15, i32) 38412 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 38413 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 38414 q31 __builtin_mips_shll_s_w (q31, imm0_31) 38415 q31 __builtin_mips_shll_s_w (q31, i32) 38416 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 38417 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 38418 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 38419 v2q15 __builtin_mips_shra_ph (v2q15, i32) 38420 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 38421 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 38422 q31 __builtin_mips_shra_r_w (q31, imm0_31) 38423 q31 __builtin_mips_shra_r_w (q31, i32) 38424 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 38425 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 38426 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 38427 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 38428 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 38429 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 38430 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 38431 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 38432 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 38433 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 38434 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 38435 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 38436 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 38437 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 38438 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 38439 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 38440 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 38441 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 38442 i32 __builtin_mips_bitrev (i32) 38443 i32 __builtin_mips_insv (i32, i32) 38444 v4i8 __builtin_mips_repl_qb (imm0_255) 38445 v4i8 __builtin_mips_repl_qb (i32) 38446 v2q15 __builtin_mips_repl_ph (imm_n512_511) 38447 v2q15 __builtin_mips_repl_ph (i32) 38448 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 38449 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 38450 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 38451 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 38452 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 38453 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 38454 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 38455 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 38456 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 38457 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 38458 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 38459 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 38460 i32 __builtin_mips_extr_w (a64, imm0_31) 38461 i32 __builtin_mips_extr_w (a64, i32) 38462 i32 __builtin_mips_extr_r_w (a64, imm0_31) 38463 i32 __builtin_mips_extr_s_h (a64, i32) 38464 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 38465 i32 __builtin_mips_extr_rs_w (a64, i32) 38466 i32 __builtin_mips_extr_s_h (a64, imm0_31) 38467 i32 __builtin_mips_extr_r_w (a64, i32) 38468 i32 __builtin_mips_extp (a64, imm0_31) 38469 i32 __builtin_mips_extp (a64, i32) 38470 i32 __builtin_mips_extpdp (a64, imm0_31) 38471 i32 __builtin_mips_extpdp (a64, i32) 38472 a64 __builtin_mips_shilo (a64, imm_n32_31) 38473 a64 __builtin_mips_shilo (a64, i32) 38474 a64 __builtin_mips_mthlip (a64, i32) 38475 void __builtin_mips_wrdsp (i32, imm0_63) 38476 i32 __builtin_mips_rddsp (imm0_63) 38477 i32 __builtin_mips_lbux (void *, i32) 38478 i32 __builtin_mips_lhx (void *, i32) 38479 i32 __builtin_mips_lwx (void *, i32) 38480 a64 __builtin_mips_ldx (void *, i32) [MIPS64 only] 38481 i32 __builtin_mips_bposge32 (void) 38482 a64 __builtin_mips_madd (a64, i32, i32); 38483 a64 __builtin_mips_maddu (a64, ui32, ui32); 38484 a64 __builtin_mips_msub (a64, i32, i32); 38485 a64 __builtin_mips_msubu (a64, ui32, ui32); 38486 a64 __builtin_mips_mult (i32, i32); 38487 a64 __builtin_mips_multu (ui32, ui32); 38488 38489 The following built-in functions map directly to a particular MIPS DSP 38490REV 2 instruction. Please refer to the architecture specification for 38491details on what each instruction does. 38492 38493 v4q7 __builtin_mips_absq_s_qb (v4q7); 38494 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 38495 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 38496 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 38497 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 38498 i32 __builtin_mips_append (i32, i32, imm0_31); 38499 i32 __builtin_mips_balign (i32, i32, imm0_3); 38500 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 38501 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 38502 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 38503 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 38504 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 38505 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 38506 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 38507 q31 __builtin_mips_mulq_rs_w (q31, q31); 38508 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 38509 q31 __builtin_mips_mulq_s_w (q31, q31); 38510 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 38511 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 38512 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 38513 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 38514 i32 __builtin_mips_prepend (i32, i32, imm0_31); 38515 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 38516 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 38517 v4i8 __builtin_mips_shra_qb (v4i8, i32); 38518 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 38519 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 38520 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 38521 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 38522 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 38523 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 38524 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 38525 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 38526 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 38527 q31 __builtin_mips_addqh_w (q31, q31); 38528 q31 __builtin_mips_addqh_r_w (q31, q31); 38529 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 38530 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 38531 q31 __builtin_mips_subqh_w (q31, q31); 38532 q31 __builtin_mips_subqh_r_w (q31, q31); 38533 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 38534 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 38535 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 38536 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 38537 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 38538 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 38539 38540 38541File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 38542 385436.56.10 MIPS Paired-Single Support 38544---------------------------------- 38545 38546The MIPS64 architecture includes a number of instructions that operate 38547on pairs of single-precision floating-point values. Each pair is 38548packed into a 64-bit floating-point register, with one element being 38549designated the "upper half" and the other being designated the "lower 38550half". 38551 38552 GCC supports paired-single operations using both the generic vector 38553extensions (*note Vector Extensions::) and a collection of 38554MIPS-specific built-in functions. Both kinds of support are enabled by 38555the `-mpaired-single' command-line option. 38556 38557 The vector type associated with paired-single values is usually called 38558`v2sf'. It can be defined in C as follows: 38559 38560 typedef float v2sf __attribute__ ((vector_size (8))); 38561 38562 `v2sf' values are initialized in the same way as aggregates. For 38563example: 38564 38565 v2sf a = {1.5, 9.1}; 38566 v2sf b; 38567 float e, f; 38568 b = (v2sf) {e, f}; 38569 38570 _Note:_ The CPU's endianness determines which value is stored in the 38571upper half of a register and which value is stored in the lower half. 38572On little-endian targets, the first value is the lower one and the 38573second value is the upper one. The opposite order applies to 38574big-endian targets. For example, the code above sets the lower half of 38575`a' to `1.5' on little-endian targets and `9.1' on big-endian targets. 38576 38577 38578File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 38579 385806.56.11 MIPS Loongson Built-in Functions 38581---------------------------------------- 38582 38583GCC provides intrinsics to access the SIMD instructions provided by the 38584ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 38585available after inclusion of the `loongson.h' header file, operate on 38586the following 64-bit vector types: 38587 38588 * `uint8x8_t', a vector of eight unsigned 8-bit integers; 38589 38590 * `uint16x4_t', a vector of four unsigned 16-bit integers; 38591 38592 * `uint32x2_t', a vector of two unsigned 32-bit integers; 38593 38594 * `int8x8_t', a vector of eight signed 8-bit integers; 38595 38596 * `int16x4_t', a vector of four signed 16-bit integers; 38597 38598 * `int32x2_t', a vector of two signed 32-bit integers. 38599 38600 The intrinsics provided are listed below; each is named after the 38601machine instruction to which it corresponds, with suffixes added as 38602appropriate to distinguish intrinsics that expand to the same machine 38603instruction yet have different argument types. Refer to the 38604architecture documentation for a description of the functionality of 38605each instruction. 38606 38607 int16x4_t packsswh (int32x2_t s, int32x2_t t); 38608 int8x8_t packsshb (int16x4_t s, int16x4_t t); 38609 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 38610 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 38611 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 38612 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 38613 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 38614 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 38615 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 38616 uint64_t paddd_u (uint64_t s, uint64_t t); 38617 int64_t paddd_s (int64_t s, int64_t t); 38618 int16x4_t paddsh (int16x4_t s, int16x4_t t); 38619 int8x8_t paddsb (int8x8_t s, int8x8_t t); 38620 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 38621 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 38622 uint64_t pandn_ud (uint64_t s, uint64_t t); 38623 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 38624 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 38625 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 38626 int64_t pandn_sd (int64_t s, int64_t t); 38627 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 38628 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 38629 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 38630 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 38631 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 38632 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 38633 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 38634 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 38635 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 38636 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 38637 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 38638 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 38639 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 38640 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 38641 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 38642 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 38643 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 38644 uint16x4_t pextrh_u (uint16x4_t s, int field); 38645 int16x4_t pextrh_s (int16x4_t s, int field); 38646 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 38647 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 38648 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 38649 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 38650 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 38651 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 38652 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 38653 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 38654 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 38655 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 38656 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 38657 int16x4_t pminsh (int16x4_t s, int16x4_t t); 38658 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 38659 uint8x8_t pmovmskb_u (uint8x8_t s); 38660 int8x8_t pmovmskb_s (int8x8_t s); 38661 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 38662 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 38663 int16x4_t pmullh (int16x4_t s, int16x4_t t); 38664 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 38665 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 38666 uint16x4_t biadd (uint8x8_t s); 38667 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 38668 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 38669 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 38670 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 38671 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 38672 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 38673 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 38674 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 38675 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 38676 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 38677 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 38678 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 38679 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 38680 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 38681 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 38682 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 38683 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 38684 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 38685 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 38686 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 38687 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 38688 uint64_t psubd_u (uint64_t s, uint64_t t); 38689 int64_t psubd_s (int64_t s, int64_t t); 38690 int16x4_t psubsh (int16x4_t s, int16x4_t t); 38691 int8x8_t psubsb (int8x8_t s, int8x8_t t); 38692 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 38693 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 38694 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 38695 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 38696 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 38697 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 38698 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 38699 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 38700 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 38701 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 38702 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 38703 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 38704 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 38705 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 38706 38707* Menu: 38708 38709* Paired-Single Arithmetic:: 38710* Paired-Single Built-in Functions:: 38711* MIPS-3D Built-in Functions:: 38712 38713 38714File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 38715 387166.56.11.1 Paired-Single Arithmetic 38717.................................. 38718 38719The table below lists the `v2sf' operations for which hardware support 38720exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 38721value. 38722 38723C code MIPS instruction 38724`a + b' `add.ps' 38725`a - b' `sub.ps' 38726`-a' `neg.ps' 38727`a * b' `mul.ps' 38728`a * b + c' `madd.ps' 38729`a * b - c' `msub.ps' 38730`-(a * b + c)' `nmadd.ps' 38731`-(a * b - c)' `nmsub.ps' 38732`x ? a : b' `movn.ps'/`movz.ps' 38733 38734 Note that the multiply-accumulate instructions can be disabled using 38735the command-line option `-mno-fused-madd'. 38736 38737 38738File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Loongson Built-in Functions 38739 387406.56.11.2 Paired-Single Built-in Functions 38741.......................................... 38742 38743The following paired-single functions map directly to a particular MIPS 38744instruction. Please refer to the architecture specification for 38745details on what each instruction does. 38746 38747`v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 38748 Pair lower lower (`pll.ps'). 38749 38750`v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 38751 Pair upper lower (`pul.ps'). 38752 38753`v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 38754 Pair lower upper (`plu.ps'). 38755 38756`v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 38757 Pair upper upper (`puu.ps'). 38758 38759`v2sf __builtin_mips_cvt_ps_s (float, float)' 38760 Convert pair to paired single (`cvt.ps.s'). 38761 38762`float __builtin_mips_cvt_s_pl (v2sf)' 38763 Convert pair lower to single (`cvt.s.pl'). 38764 38765`float __builtin_mips_cvt_s_pu (v2sf)' 38766 Convert pair upper to single (`cvt.s.pu'). 38767 38768`v2sf __builtin_mips_abs_ps (v2sf)' 38769 Absolute value (`abs.ps'). 38770 38771`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 38772 Align variable (`alnv.ps'). 38773 38774 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 38775 otherwise the result is unpredictable. Please read the 38776 instruction description for details. 38777 38778 The following multi-instruction functions are also available. In each 38779case, COND can be any of the 16 floating-point conditions: `f', `un', 38780`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 38781`lt', `nge', `le' or `ngt'. 38782 38783`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38784`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38785 Conditional move based on floating-point comparison (`c.COND.ps', 38786 `movt.ps'/`movf.ps'). 38787 38788 The `movt' functions return the value X computed by: 38789 38790 c.COND.ps CC,A,B 38791 mov.ps X,C 38792 movt.ps X,D,CC 38793 38794 The `movf' functions are similar but use `movf.ps' instead of 38795 `movt.ps'. 38796 38797`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 38798`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 38799 Comparison of two paired-single values (`c.COND.ps', 38800 `bc1t'/`bc1f'). 38801 38802 These functions compare A and B using `c.COND.ps' and return 38803 either the upper or lower half of the result. For example: 38804 38805 v2sf a, b; 38806 if (__builtin_mips_upper_c_eq_ps (a, b)) 38807 upper_halves_are_equal (); 38808 else 38809 upper_halves_are_unequal (); 38810 38811 if (__builtin_mips_lower_c_eq_ps (a, b)) 38812 lower_halves_are_equal (); 38813 else 38814 lower_halves_are_unequal (); 38815 38816 38817File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 38818 388196.56.11.3 MIPS-3D Built-in Functions 38820.................................... 38821 38822The MIPS-3D Application-Specific Extension (ASE) includes additional 38823paired-single instructions that are designed to improve the performance 38824of 3D graphics operations. Support for these instructions is controlled 38825by the `-mips3d' command-line option. 38826 38827 The functions listed below map directly to a particular MIPS-3D 38828instruction. Please refer to the architecture specification for more 38829details on what each instruction does. 38830 38831`v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 38832 Reduction add (`addr.ps'). 38833 38834`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 38835 Reduction multiply (`mulr.ps'). 38836 38837`v2sf __builtin_mips_cvt_pw_ps (v2sf)' 38838 Convert paired single to paired word (`cvt.pw.ps'). 38839 38840`v2sf __builtin_mips_cvt_ps_pw (v2sf)' 38841 Convert paired word to paired single (`cvt.ps.pw'). 38842 38843`float __builtin_mips_recip1_s (float)' 38844`double __builtin_mips_recip1_d (double)' 38845`v2sf __builtin_mips_recip1_ps (v2sf)' 38846 Reduced-precision reciprocal (sequence step 1) (`recip1.FMT'). 38847 38848`float __builtin_mips_recip2_s (float, float)' 38849`double __builtin_mips_recip2_d (double, double)' 38850`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 38851 Reduced-precision reciprocal (sequence step 2) (`recip2.FMT'). 38852 38853`float __builtin_mips_rsqrt1_s (float)' 38854`double __builtin_mips_rsqrt1_d (double)' 38855`v2sf __builtin_mips_rsqrt1_ps (v2sf)' 38856 Reduced-precision reciprocal square root (sequence step 1) 38857 (`rsqrt1.FMT'). 38858 38859`float __builtin_mips_rsqrt2_s (float, float)' 38860`double __builtin_mips_rsqrt2_d (double, double)' 38861`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 38862 Reduced-precision reciprocal square root (sequence step 2) 38863 (`rsqrt2.FMT'). 38864 38865 The following multi-instruction functions are also available. In each 38866case, COND can be any of the 16 floating-point conditions: `f', `un', 38867`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 38868`lt', `nge', `le' or `ngt'. 38869 38870`int __builtin_mips_cabs_COND_s (float A, float B)' 38871`int __builtin_mips_cabs_COND_d (double A, double B)' 38872 Absolute comparison of two scalar values (`cabs.COND.FMT', 38873 `bc1t'/`bc1f'). 38874 38875 These functions compare A and B using `cabs.COND.s' or 38876 `cabs.COND.d' and return the result as a boolean value. For 38877 example: 38878 38879 float a, b; 38880 if (__builtin_mips_cabs_eq_s (a, b)) 38881 true (); 38882 else 38883 false (); 38884 38885`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 38886`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 38887 Absolute comparison of two paired-single values (`cabs.COND.ps', 38888 `bc1t'/`bc1f'). 38889 38890 These functions compare A and B using `cabs.COND.ps' and return 38891 either the upper or lower half of the result. For example: 38892 38893 v2sf a, b; 38894 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 38895 upper_halves_are_equal (); 38896 else 38897 upper_halves_are_unequal (); 38898 38899 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 38900 lower_halves_are_equal (); 38901 else 38902 lower_halves_are_unequal (); 38903 38904`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38905`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38906 Conditional move based on absolute comparison (`cabs.COND.ps', 38907 `movt.ps'/`movf.ps'). 38908 38909 The `movt' functions return the value X computed by: 38910 38911 cabs.COND.ps CC,A,B 38912 mov.ps X,C 38913 movt.ps X,D,CC 38914 38915 The `movf' functions are similar but use `movf.ps' instead of 38916 `movt.ps'. 38917 38918`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 38919`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 38920`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 38921`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 38922 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 38923 `bc1any2t'/`bc1any2f'). 38924 38925 These functions compare A and B using `c.COND.ps' or 38926 `cabs.COND.ps'. The `any' forms return true if either result is 38927 true and the `all' forms return true if both results are true. 38928 For example: 38929 38930 v2sf a, b; 38931 if (__builtin_mips_any_c_eq_ps (a, b)) 38932 one_is_true (); 38933 else 38934 both_are_false (); 38935 38936 if (__builtin_mips_all_c_eq_ps (a, b)) 38937 both_are_true (); 38938 else 38939 one_is_false (); 38940 38941`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38942`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38943`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38944`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38945 Comparison of four paired-single values 38946 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 38947 38948 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 38949 with B and to compare C with D. The `any' forms return true if 38950 any of the four results are true and the `all' forms return true 38951 if all four results are true. For example: 38952 38953 v2sf a, b, c, d; 38954 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 38955 some_are_true (); 38956 else 38957 all_are_false (); 38958 38959 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 38960 all_are_true (); 38961 else 38962 some_are_false (); 38963 38964 38965File: gcc.info, Node: Other MIPS Built-in Functions, Next: picoChip Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 38966 389676.56.12 Other MIPS Built-in Functions 38968------------------------------------- 38969 38970GCC provides other MIPS-specific built-in functions: 38971 38972`void __builtin_mips_cache (int OP, const volatile void *ADDR)' 38973 Insert a `cache' instruction with operands OP and ADDR. GCC 38974 defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE' 38975 when this function is available. 38976 38977 38978File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 38979 389806.56.13 picoChip Built-in Functions 38981----------------------------------- 38982 38983GCC provides an interface to selected machine instructions from the 38984picoChip instruction set. 38985 38986`int __builtin_sbc (int VALUE)' 38987 Sign bit count. Return the number of consecutive bits in VALUE 38988 that have the same value as the sign bit. The result is the 38989 number of leading sign bits minus one, giving the number of 38990 redundant sign bits in VALUE. 38991 38992`int __builtin_byteswap (int VALUE)' 38993 Byte swap. Return the result of swapping the upper and lower 38994 bytes of VALUE. 38995 38996`int __builtin_brev (int VALUE)' 38997 Bit reversal. Return the result of reversing the bits in VALUE. 38998 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 38999 on. 39000 39001`int __builtin_adds (int X, int Y)' 39002 Saturating addition. Return the result of adding X and Y, storing 39003 the value 32767 if the result overflows. 39004 39005`int __builtin_subs (int X, int Y)' 39006 Saturating subtraction. Return the result of subtracting Y from 39007 X, storing the value -32768 if the result overflows. 39008 39009`void __builtin_halt (void)' 39010 Halt. The processor stops execution. This built-in is useful for 39011 implementing assertions. 39012 39013 39014 39015File: gcc.info, Node: PowerPC Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 39016 390176.56.14 PowerPC Built-in Functions 39018---------------------------------- 39019 39020These built-in functions are available for the PowerPC family of 39021processors: 39022 float __builtin_recipdivf (float, float); 39023 float __builtin_rsqrtf (float); 39024 double __builtin_recipdiv (double, double); 39025 double __builtin_rsqrt (double); 39026 uint64_t __builtin_ppc_get_timebase (); 39027 unsigned long __builtin_ppc_mftb (); 39028 double __builtin_unpack_longdouble (long double, int); 39029 long double __builtin_pack_longdouble (double, double); 39030 39031 The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions 39032generate multiple instructions to implement the reciprocal sqrt 39033functionality using reciprocal sqrt estimate instructions. 39034 39035 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate 39036multiple instructions to implement division using the reciprocal 39037estimate instructions. 39038 39039 The `__builtin_ppc_get_timebase' and `__builtin_ppc_mftb' functions 39040generate instructions to read the Time Base Register. The 39041`__builtin_ppc_get_timebase' function may generate multiple 39042instructions and always returns the 64 bits of the Time Base Register. 39043The `__builtin_ppc_mftb' function always generates one instruction and 39044returns the Time Base Register value as an unsigned long, throwing away 39045the most significant word on 32-bit environments. 39046 39047 The following built-in functions are available for the PowerPC family 39048of processors, starting with ISA 2.06 or later (`-mcpu=power7' or 39049`-mpopcntd'): 39050 long __builtin_bpermd (long, long); 39051 int __builtin_divwe (int, int); 39052 int __builtin_divweo (int, int); 39053 unsigned int __builtin_divweu (unsigned int, unsigned int); 39054 unsigned int __builtin_divweuo (unsigned int, unsigned int); 39055 long __builtin_divde (long, long); 39056 long __builtin_divdeo (long, long); 39057 unsigned long __builtin_divdeu (unsigned long, unsigned long); 39058 unsigned long __builtin_divdeuo (unsigned long, unsigned long); 39059 unsigned int cdtbcd (unsigned int); 39060 unsigned int cbcdtd (unsigned int); 39061 unsigned int addg6s (unsigned int, unsigned int); 39062 39063 The `__builtin_divde', `__builtin_divdeo', `__builitin_divdeu', 39064`__builtin_divdeou' functions require a 64-bit environment support ISA 390652.06 or later. 39066 39067 The following built-in functions are available for the PowerPC family 39068of processors when hardware decimal floating point (`-mhard-dfp') is 39069available: 39070 _Decimal64 __builtin_dxex (_Decimal64); 39071 _Decimal128 __builtin_dxexq (_Decimal128); 39072 _Decimal64 __builtin_ddedpd (int, _Decimal64); 39073 _Decimal128 __builtin_ddedpdq (int, _Decimal128); 39074 _Decimal64 __builtin_denbcd (int, _Decimal64); 39075 _Decimal128 __builtin_denbcdq (int, _Decimal128); 39076 _Decimal64 __builtin_diex (_Decimal64, _Decimal64); 39077 _Decimal128 _builtin_diexq (_Decimal128, _Decimal128); 39078 _Decimal64 __builtin_dscli (_Decimal64, int); 39079 _Decimal128 __builitn_dscliq (_Decimal128, int); 39080 _Decimal64 __builtin_dscri (_Decimal64, int); 39081 _Decimal128 __builitn_dscriq (_Decimal128, int); 39082 unsigned long long __builtin_unpack_dec128 (_Decimal128, int); 39083 _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long); 39084 39085 The following built-in functions are available for the PowerPC family 39086of processors when the Vector Scalar (vsx) instruction set is available: 39087 unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int); 39088 vector __int128_t __builtin_pack_vector_int128 (unsigned long long, 39089 unsigned long long); 39090 39091 39092File: 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 39093 390946.56.15 PowerPC AltiVec Built-in Functions 39095------------------------------------------ 39096 39097GCC provides an interface for the PowerPC family of processors to access 39098the AltiVec operations described in Motorola's AltiVec Programming 39099Interface Manual. The interface is made available by including 39100`<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 39101supports the following vector types. 39102 39103 vector unsigned char 39104 vector signed char 39105 vector bool char 39106 39107 vector unsigned short 39108 vector signed short 39109 vector bool short 39110 vector pixel 39111 39112 vector unsigned int 39113 vector signed int 39114 vector bool int 39115 vector float 39116 39117 If `-mvsx' is used the following additional vector types are 39118implemented. 39119 39120 vector unsigned long 39121 vector signed long 39122 vector double 39123 39124 The long types are only implemented for 64-bit code generation, and 39125the long type is only used in the floating point/integer conversion 39126instructions. 39127 39128 GCC's implementation of the high-level language interface available 39129from C and C++ code differs from Motorola's documentation in several 39130ways. 39131 39132 * A vector constant is a list of constant expressions within curly 39133 braces. 39134 39135 * A vector initializer requires no cast if the vector constant is of 39136 the same type as the variable it is initializing. 39137 39138 * If `signed' or `unsigned' is omitted, the signedness of the vector 39139 type is the default signedness of the base type. The default 39140 varies depending on the operating system, so a portable program 39141 should always specify the signedness. 39142 39143 * Compiling with `-maltivec' adds keywords `__vector', `vector', 39144 `__pixel', `pixel', `__bool' and `bool'. When compiling ISO C, 39145 the context-sensitive substitution of the keywords `vector', 39146 `pixel' and `bool' is disabled. To use them, you must include 39147 `<altivec.h>' instead. 39148 39149 * GCC allows using a `typedef' name as the type specifier for a 39150 vector type. 39151 39152 * For C, overloaded functions are implemented with macros so the 39153 following does not work: 39154 39155 vec_add ((vector signed int){1, 2, 3, 4}, foo); 39156 39157 Since `vec_add' is a macro, the vector constant in the example is 39158 treated as four separate arguments. Wrap the entire argument in 39159 parentheses for this to work. 39160 39161 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 39162GCC uses built-in functions to achieve the functionality in the 39163aforementioned header file, but they are not supported and are subject 39164to change without notice. 39165 39166 The following interfaces are supported for the generic and specific 39167AltiVec operations and the AltiVec predicates. In cases where there is 39168a direct mapping between generic and specific operations, only the 39169generic names are shown here, although the specific operations can also 39170be used. 39171 39172 Arguments that are documented as `const int' require literal integral 39173values within the range required for that operation. 39174 39175 vector signed char vec_abs (vector signed char); 39176 vector signed short vec_abs (vector signed short); 39177 vector signed int vec_abs (vector signed int); 39178 vector float vec_abs (vector float); 39179 39180 vector signed char vec_abss (vector signed char); 39181 vector signed short vec_abss (vector signed short); 39182 vector signed int vec_abss (vector signed int); 39183 39184 vector signed char vec_add (vector bool char, vector signed char); 39185 vector signed char vec_add (vector signed char, vector bool char); 39186 vector signed char vec_add (vector signed char, vector signed char); 39187 vector unsigned char vec_add (vector bool char, vector unsigned char); 39188 vector unsigned char vec_add (vector unsigned char, vector bool char); 39189 vector unsigned char vec_add (vector unsigned char, 39190 vector unsigned char); 39191 vector signed short vec_add (vector bool short, vector signed short); 39192 vector signed short vec_add (vector signed short, vector bool short); 39193 vector signed short vec_add (vector signed short, vector signed short); 39194 vector unsigned short vec_add (vector bool short, 39195 vector unsigned short); 39196 vector unsigned short vec_add (vector unsigned short, 39197 vector bool short); 39198 vector unsigned short vec_add (vector unsigned short, 39199 vector unsigned short); 39200 vector signed int vec_add (vector bool int, vector signed int); 39201 vector signed int vec_add (vector signed int, vector bool int); 39202 vector signed int vec_add (vector signed int, vector signed int); 39203 vector unsigned int vec_add (vector bool int, vector unsigned int); 39204 vector unsigned int vec_add (vector unsigned int, vector bool int); 39205 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 39206 vector float vec_add (vector float, vector float); 39207 39208 vector float vec_vaddfp (vector float, vector float); 39209 39210 vector signed int vec_vadduwm (vector bool int, vector signed int); 39211 vector signed int vec_vadduwm (vector signed int, vector bool int); 39212 vector signed int vec_vadduwm (vector signed int, vector signed int); 39213 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 39214 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 39215 vector unsigned int vec_vadduwm (vector unsigned int, 39216 vector unsigned int); 39217 39218 vector signed short vec_vadduhm (vector bool short, 39219 vector signed short); 39220 vector signed short vec_vadduhm (vector signed short, 39221 vector bool short); 39222 vector signed short vec_vadduhm (vector signed short, 39223 vector signed short); 39224 vector unsigned short vec_vadduhm (vector bool short, 39225 vector unsigned short); 39226 vector unsigned short vec_vadduhm (vector unsigned short, 39227 vector bool short); 39228 vector unsigned short vec_vadduhm (vector unsigned short, 39229 vector unsigned short); 39230 39231 vector signed char vec_vaddubm (vector bool char, vector signed char); 39232 vector signed char vec_vaddubm (vector signed char, vector bool char); 39233 vector signed char vec_vaddubm (vector signed char, vector signed char); 39234 vector unsigned char vec_vaddubm (vector bool char, 39235 vector unsigned char); 39236 vector unsigned char vec_vaddubm (vector unsigned char, 39237 vector bool char); 39238 vector unsigned char vec_vaddubm (vector unsigned char, 39239 vector unsigned char); 39240 39241 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 39242 39243 vector unsigned char vec_adds (vector bool char, vector unsigned char); 39244 vector unsigned char vec_adds (vector unsigned char, vector bool char); 39245 vector unsigned char vec_adds (vector unsigned char, 39246 vector unsigned char); 39247 vector signed char vec_adds (vector bool char, vector signed char); 39248 vector signed char vec_adds (vector signed char, vector bool char); 39249 vector signed char vec_adds (vector signed char, vector signed char); 39250 vector unsigned short vec_adds (vector bool short, 39251 vector unsigned short); 39252 vector unsigned short vec_adds (vector unsigned short, 39253 vector bool short); 39254 vector unsigned short vec_adds (vector unsigned short, 39255 vector unsigned short); 39256 vector signed short vec_adds (vector bool short, vector signed short); 39257 vector signed short vec_adds (vector signed short, vector bool short); 39258 vector signed short vec_adds (vector signed short, vector signed short); 39259 vector unsigned int vec_adds (vector bool int, vector unsigned int); 39260 vector unsigned int vec_adds (vector unsigned int, vector bool int); 39261 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 39262 vector signed int vec_adds (vector bool int, vector signed int); 39263 vector signed int vec_adds (vector signed int, vector bool int); 39264 vector signed int vec_adds (vector signed int, vector signed int); 39265 39266 vector signed int vec_vaddsws (vector bool int, vector signed int); 39267 vector signed int vec_vaddsws (vector signed int, vector bool int); 39268 vector signed int vec_vaddsws (vector signed int, vector signed int); 39269 39270 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 39271 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 39272 vector unsigned int vec_vadduws (vector unsigned int, 39273 vector unsigned int); 39274 39275 vector signed short vec_vaddshs (vector bool short, 39276 vector signed short); 39277 vector signed short vec_vaddshs (vector signed short, 39278 vector bool short); 39279 vector signed short vec_vaddshs (vector signed short, 39280 vector signed short); 39281 39282 vector unsigned short vec_vadduhs (vector bool short, 39283 vector unsigned short); 39284 vector unsigned short vec_vadduhs (vector unsigned short, 39285 vector bool short); 39286 vector unsigned short vec_vadduhs (vector unsigned short, 39287 vector unsigned short); 39288 39289 vector signed char vec_vaddsbs (vector bool char, vector signed char); 39290 vector signed char vec_vaddsbs (vector signed char, vector bool char); 39291 vector signed char vec_vaddsbs (vector signed char, vector signed char); 39292 39293 vector unsigned char vec_vaddubs (vector bool char, 39294 vector unsigned char); 39295 vector unsigned char vec_vaddubs (vector unsigned char, 39296 vector bool char); 39297 vector unsigned char vec_vaddubs (vector unsigned char, 39298 vector unsigned char); 39299 39300 vector float vec_and (vector float, vector float); 39301 vector float vec_and (vector float, vector bool int); 39302 vector float vec_and (vector bool int, vector float); 39303 vector bool int vec_and (vector bool int, vector bool int); 39304 vector signed int vec_and (vector bool int, vector signed int); 39305 vector signed int vec_and (vector signed int, vector bool int); 39306 vector signed int vec_and (vector signed int, vector signed int); 39307 vector unsigned int vec_and (vector bool int, vector unsigned int); 39308 vector unsigned int vec_and (vector unsigned int, vector bool int); 39309 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 39310 vector bool short vec_and (vector bool short, vector bool short); 39311 vector signed short vec_and (vector bool short, vector signed short); 39312 vector signed short vec_and (vector signed short, vector bool short); 39313 vector signed short vec_and (vector signed short, vector signed short); 39314 vector unsigned short vec_and (vector bool short, 39315 vector unsigned short); 39316 vector unsigned short vec_and (vector unsigned short, 39317 vector bool short); 39318 vector unsigned short vec_and (vector unsigned short, 39319 vector unsigned short); 39320 vector signed char vec_and (vector bool char, vector signed char); 39321 vector bool char vec_and (vector bool char, vector bool char); 39322 vector signed char vec_and (vector signed char, vector bool char); 39323 vector signed char vec_and (vector signed char, vector signed char); 39324 vector unsigned char vec_and (vector bool char, vector unsigned char); 39325 vector unsigned char vec_and (vector unsigned char, vector bool char); 39326 vector unsigned char vec_and (vector unsigned char, 39327 vector unsigned char); 39328 39329 vector float vec_andc (vector float, vector float); 39330 vector float vec_andc (vector float, vector bool int); 39331 vector float vec_andc (vector bool int, vector float); 39332 vector bool int vec_andc (vector bool int, vector bool int); 39333 vector signed int vec_andc (vector bool int, vector signed int); 39334 vector signed int vec_andc (vector signed int, vector bool int); 39335 vector signed int vec_andc (vector signed int, vector signed int); 39336 vector unsigned int vec_andc (vector bool int, vector unsigned int); 39337 vector unsigned int vec_andc (vector unsigned int, vector bool int); 39338 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 39339 vector bool short vec_andc (vector bool short, vector bool short); 39340 vector signed short vec_andc (vector bool short, vector signed short); 39341 vector signed short vec_andc (vector signed short, vector bool short); 39342 vector signed short vec_andc (vector signed short, vector signed short); 39343 vector unsigned short vec_andc (vector bool short, 39344 vector unsigned short); 39345 vector unsigned short vec_andc (vector unsigned short, 39346 vector bool short); 39347 vector unsigned short vec_andc (vector unsigned short, 39348 vector unsigned short); 39349 vector signed char vec_andc (vector bool char, vector signed char); 39350 vector bool char vec_andc (vector bool char, vector bool char); 39351 vector signed char vec_andc (vector signed char, vector bool char); 39352 vector signed char vec_andc (vector signed char, vector signed char); 39353 vector unsigned char vec_andc (vector bool char, vector unsigned char); 39354 vector unsigned char vec_andc (vector unsigned char, vector bool char); 39355 vector unsigned char vec_andc (vector unsigned char, 39356 vector unsigned char); 39357 39358 vector unsigned char vec_avg (vector unsigned char, 39359 vector unsigned char); 39360 vector signed char vec_avg (vector signed char, vector signed char); 39361 vector unsigned short vec_avg (vector unsigned short, 39362 vector unsigned short); 39363 vector signed short vec_avg (vector signed short, vector signed short); 39364 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 39365 vector signed int vec_avg (vector signed int, vector signed int); 39366 39367 vector signed int vec_vavgsw (vector signed int, vector signed int); 39368 39369 vector unsigned int vec_vavguw (vector unsigned int, 39370 vector unsigned int); 39371 39372 vector signed short vec_vavgsh (vector signed short, 39373 vector signed short); 39374 39375 vector unsigned short vec_vavguh (vector unsigned short, 39376 vector unsigned short); 39377 39378 vector signed char vec_vavgsb (vector signed char, vector signed char); 39379 39380 vector unsigned char vec_vavgub (vector unsigned char, 39381 vector unsigned char); 39382 39383 vector float vec_copysign (vector float); 39384 39385 vector float vec_ceil (vector float); 39386 39387 vector signed int vec_cmpb (vector float, vector float); 39388 39389 vector bool char vec_cmpeq (vector signed char, vector signed char); 39390 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 39391 vector bool short vec_cmpeq (vector signed short, vector signed short); 39392 vector bool short vec_cmpeq (vector unsigned short, 39393 vector unsigned short); 39394 vector bool int vec_cmpeq (vector signed int, vector signed int); 39395 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 39396 vector bool int vec_cmpeq (vector float, vector float); 39397 39398 vector bool int vec_vcmpeqfp (vector float, vector float); 39399 39400 vector bool int vec_vcmpequw (vector signed int, vector signed int); 39401 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 39402 39403 vector bool short vec_vcmpequh (vector signed short, 39404 vector signed short); 39405 vector bool short vec_vcmpequh (vector unsigned short, 39406 vector unsigned short); 39407 39408 vector bool char vec_vcmpequb (vector signed char, vector signed char); 39409 vector bool char vec_vcmpequb (vector unsigned char, 39410 vector unsigned char); 39411 39412 vector bool int vec_cmpge (vector float, vector float); 39413 39414 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 39415 vector bool char vec_cmpgt (vector signed char, vector signed char); 39416 vector bool short vec_cmpgt (vector unsigned short, 39417 vector unsigned short); 39418 vector bool short vec_cmpgt (vector signed short, vector signed short); 39419 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 39420 vector bool int vec_cmpgt (vector signed int, vector signed int); 39421 vector bool int vec_cmpgt (vector float, vector float); 39422 39423 vector bool int vec_vcmpgtfp (vector float, vector float); 39424 39425 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 39426 39427 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 39428 39429 vector bool short vec_vcmpgtsh (vector signed short, 39430 vector signed short); 39431 39432 vector bool short vec_vcmpgtuh (vector unsigned short, 39433 vector unsigned short); 39434 39435 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 39436 39437 vector bool char vec_vcmpgtub (vector unsigned char, 39438 vector unsigned char); 39439 39440 vector bool int vec_cmple (vector float, vector float); 39441 39442 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 39443 vector bool char vec_cmplt (vector signed char, vector signed char); 39444 vector bool short vec_cmplt (vector unsigned short, 39445 vector unsigned short); 39446 vector bool short vec_cmplt (vector signed short, vector signed short); 39447 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 39448 vector bool int vec_cmplt (vector signed int, vector signed int); 39449 vector bool int vec_cmplt (vector float, vector float); 39450 39451 vector float vec_cpsgn (vector float, vector float); 39452 39453 vector float vec_ctf (vector unsigned int, const int); 39454 vector float vec_ctf (vector signed int, const int); 39455 vector double vec_ctf (vector unsigned long, const int); 39456 vector double vec_ctf (vector signed long, const int); 39457 39458 vector float vec_vcfsx (vector signed int, const int); 39459 39460 vector float vec_vcfux (vector unsigned int, const int); 39461 39462 vector signed int vec_cts (vector float, const int); 39463 vector signed long vec_cts (vector double, const int); 39464 39465 vector unsigned int vec_ctu (vector float, const int); 39466 vector unsigned long vec_ctu (vector double, const int); 39467 39468 void vec_dss (const int); 39469 39470 void vec_dssall (void); 39471 39472 void vec_dst (const vector unsigned char *, int, const int); 39473 void vec_dst (const vector signed char *, int, const int); 39474 void vec_dst (const vector bool char *, int, const int); 39475 void vec_dst (const vector unsigned short *, int, const int); 39476 void vec_dst (const vector signed short *, int, const int); 39477 void vec_dst (const vector bool short *, int, const int); 39478 void vec_dst (const vector pixel *, int, const int); 39479 void vec_dst (const vector unsigned int *, int, const int); 39480 void vec_dst (const vector signed int *, int, const int); 39481 void vec_dst (const vector bool int *, int, const int); 39482 void vec_dst (const vector float *, int, const int); 39483 void vec_dst (const unsigned char *, int, const int); 39484 void vec_dst (const signed char *, int, const int); 39485 void vec_dst (const unsigned short *, int, const int); 39486 void vec_dst (const short *, int, const int); 39487 void vec_dst (const unsigned int *, int, const int); 39488 void vec_dst (const int *, int, const int); 39489 void vec_dst (const unsigned long *, int, const int); 39490 void vec_dst (const long *, int, const int); 39491 void vec_dst (const float *, int, const int); 39492 39493 void vec_dstst (const vector unsigned char *, int, const int); 39494 void vec_dstst (const vector signed char *, int, const int); 39495 void vec_dstst (const vector bool char *, int, const int); 39496 void vec_dstst (const vector unsigned short *, int, const int); 39497 void vec_dstst (const vector signed short *, int, const int); 39498 void vec_dstst (const vector bool short *, int, const int); 39499 void vec_dstst (const vector pixel *, int, const int); 39500 void vec_dstst (const vector unsigned int *, int, const int); 39501 void vec_dstst (const vector signed int *, int, const int); 39502 void vec_dstst (const vector bool int *, int, const int); 39503 void vec_dstst (const vector float *, int, const int); 39504 void vec_dstst (const unsigned char *, int, const int); 39505 void vec_dstst (const signed char *, int, const int); 39506 void vec_dstst (const unsigned short *, int, const int); 39507 void vec_dstst (const short *, int, const int); 39508 void vec_dstst (const unsigned int *, int, const int); 39509 void vec_dstst (const int *, int, const int); 39510 void vec_dstst (const unsigned long *, int, const int); 39511 void vec_dstst (const long *, int, const int); 39512 void vec_dstst (const float *, int, const int); 39513 39514 void vec_dststt (const vector unsigned char *, int, const int); 39515 void vec_dststt (const vector signed char *, int, const int); 39516 void vec_dststt (const vector bool char *, int, const int); 39517 void vec_dststt (const vector unsigned short *, int, const int); 39518 void vec_dststt (const vector signed short *, int, const int); 39519 void vec_dststt (const vector bool short *, int, const int); 39520 void vec_dststt (const vector pixel *, int, const int); 39521 void vec_dststt (const vector unsigned int *, int, const int); 39522 void vec_dststt (const vector signed int *, int, const int); 39523 void vec_dststt (const vector bool int *, int, const int); 39524 void vec_dststt (const vector float *, int, const int); 39525 void vec_dststt (const unsigned char *, int, const int); 39526 void vec_dststt (const signed char *, int, const int); 39527 void vec_dststt (const unsigned short *, int, const int); 39528 void vec_dststt (const short *, int, const int); 39529 void vec_dststt (const unsigned int *, int, const int); 39530 void vec_dststt (const int *, int, const int); 39531 void vec_dststt (const unsigned long *, int, const int); 39532 void vec_dststt (const long *, int, const int); 39533 void vec_dststt (const float *, int, const int); 39534 39535 void vec_dstt (const vector unsigned char *, int, const int); 39536 void vec_dstt (const vector signed char *, int, const int); 39537 void vec_dstt (const vector bool char *, int, const int); 39538 void vec_dstt (const vector unsigned short *, int, const int); 39539 void vec_dstt (const vector signed short *, int, const int); 39540 void vec_dstt (const vector bool short *, int, const int); 39541 void vec_dstt (const vector pixel *, int, const int); 39542 void vec_dstt (const vector unsigned int *, int, const int); 39543 void vec_dstt (const vector signed int *, int, const int); 39544 void vec_dstt (const vector bool int *, int, const int); 39545 void vec_dstt (const vector float *, int, const int); 39546 void vec_dstt (const unsigned char *, int, const int); 39547 void vec_dstt (const signed char *, int, const int); 39548 void vec_dstt (const unsigned short *, int, const int); 39549 void vec_dstt (const short *, int, const int); 39550 void vec_dstt (const unsigned int *, int, const int); 39551 void vec_dstt (const int *, int, const int); 39552 void vec_dstt (const unsigned long *, int, const int); 39553 void vec_dstt (const long *, int, const int); 39554 void vec_dstt (const float *, int, const int); 39555 39556 vector float vec_expte (vector float); 39557 39558 vector float vec_floor (vector float); 39559 39560 vector float vec_ld (int, const vector float *); 39561 vector float vec_ld (int, const float *); 39562 vector bool int vec_ld (int, const vector bool int *); 39563 vector signed int vec_ld (int, const vector signed int *); 39564 vector signed int vec_ld (int, const int *); 39565 vector signed int vec_ld (int, const long *); 39566 vector unsigned int vec_ld (int, const vector unsigned int *); 39567 vector unsigned int vec_ld (int, const unsigned int *); 39568 vector unsigned int vec_ld (int, const unsigned long *); 39569 vector bool short vec_ld (int, const vector bool short *); 39570 vector pixel vec_ld (int, const vector pixel *); 39571 vector signed short vec_ld (int, const vector signed short *); 39572 vector signed short vec_ld (int, const short *); 39573 vector unsigned short vec_ld (int, const vector unsigned short *); 39574 vector unsigned short vec_ld (int, const unsigned short *); 39575 vector bool char vec_ld (int, const vector bool char *); 39576 vector signed char vec_ld (int, const vector signed char *); 39577 vector signed char vec_ld (int, const signed char *); 39578 vector unsigned char vec_ld (int, const vector unsigned char *); 39579 vector unsigned char vec_ld (int, const unsigned char *); 39580 39581 vector signed char vec_lde (int, const signed char *); 39582 vector unsigned char vec_lde (int, const unsigned char *); 39583 vector signed short vec_lde (int, const short *); 39584 vector unsigned short vec_lde (int, const unsigned short *); 39585 vector float vec_lde (int, const float *); 39586 vector signed int vec_lde (int, const int *); 39587 vector unsigned int vec_lde (int, const unsigned int *); 39588 vector signed int vec_lde (int, const long *); 39589 vector unsigned int vec_lde (int, const unsigned long *); 39590 39591 vector float vec_lvewx (int, float *); 39592 vector signed int vec_lvewx (int, int *); 39593 vector unsigned int vec_lvewx (int, unsigned int *); 39594 vector signed int vec_lvewx (int, long *); 39595 vector unsigned int vec_lvewx (int, unsigned long *); 39596 39597 vector signed short vec_lvehx (int, short *); 39598 vector unsigned short vec_lvehx (int, unsigned short *); 39599 39600 vector signed char vec_lvebx (int, char *); 39601 vector unsigned char vec_lvebx (int, unsigned char *); 39602 39603 vector float vec_ldl (int, const vector float *); 39604 vector float vec_ldl (int, const float *); 39605 vector bool int vec_ldl (int, const vector bool int *); 39606 vector signed int vec_ldl (int, const vector signed int *); 39607 vector signed int vec_ldl (int, const int *); 39608 vector signed int vec_ldl (int, const long *); 39609 vector unsigned int vec_ldl (int, const vector unsigned int *); 39610 vector unsigned int vec_ldl (int, const unsigned int *); 39611 vector unsigned int vec_ldl (int, const unsigned long *); 39612 vector bool short vec_ldl (int, const vector bool short *); 39613 vector pixel vec_ldl (int, const vector pixel *); 39614 vector signed short vec_ldl (int, const vector signed short *); 39615 vector signed short vec_ldl (int, const short *); 39616 vector unsigned short vec_ldl (int, const vector unsigned short *); 39617 vector unsigned short vec_ldl (int, const unsigned short *); 39618 vector bool char vec_ldl (int, const vector bool char *); 39619 vector signed char vec_ldl (int, const vector signed char *); 39620 vector signed char vec_ldl (int, const signed char *); 39621 vector unsigned char vec_ldl (int, const vector unsigned char *); 39622 vector unsigned char vec_ldl (int, const unsigned char *); 39623 39624 vector float vec_loge (vector float); 39625 39626 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 39627 vector unsigned char vec_lvsl (int, const volatile signed char *); 39628 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 39629 vector unsigned char vec_lvsl (int, const volatile short *); 39630 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 39631 vector unsigned char vec_lvsl (int, const volatile int *); 39632 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 39633 vector unsigned char vec_lvsl (int, const volatile long *); 39634 vector unsigned char vec_lvsl (int, const volatile float *); 39635 39636 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 39637 vector unsigned char vec_lvsr (int, const volatile signed char *); 39638 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 39639 vector unsigned char vec_lvsr (int, const volatile short *); 39640 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 39641 vector unsigned char vec_lvsr (int, const volatile int *); 39642 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 39643 vector unsigned char vec_lvsr (int, const volatile long *); 39644 vector unsigned char vec_lvsr (int, const volatile float *); 39645 39646 vector float vec_madd (vector float, vector float, vector float); 39647 39648 vector signed short vec_madds (vector signed short, 39649 vector signed short, 39650 vector signed short); 39651 39652 vector unsigned char vec_max (vector bool char, vector unsigned char); 39653 vector unsigned char vec_max (vector unsigned char, vector bool char); 39654 vector unsigned char vec_max (vector unsigned char, 39655 vector unsigned char); 39656 vector signed char vec_max (vector bool char, vector signed char); 39657 vector signed char vec_max (vector signed char, vector bool char); 39658 vector signed char vec_max (vector signed char, vector signed char); 39659 vector unsigned short vec_max (vector bool short, 39660 vector unsigned short); 39661 vector unsigned short vec_max (vector unsigned short, 39662 vector bool short); 39663 vector unsigned short vec_max (vector unsigned short, 39664 vector unsigned short); 39665 vector signed short vec_max (vector bool short, vector signed short); 39666 vector signed short vec_max (vector signed short, vector bool short); 39667 vector signed short vec_max (vector signed short, vector signed short); 39668 vector unsigned int vec_max (vector bool int, vector unsigned int); 39669 vector unsigned int vec_max (vector unsigned int, vector bool int); 39670 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 39671 vector signed int vec_max (vector bool int, vector signed int); 39672 vector signed int vec_max (vector signed int, vector bool int); 39673 vector signed int vec_max (vector signed int, vector signed int); 39674 vector float vec_max (vector float, vector float); 39675 39676 vector float vec_vmaxfp (vector float, vector float); 39677 39678 vector signed int vec_vmaxsw (vector bool int, vector signed int); 39679 vector signed int vec_vmaxsw (vector signed int, vector bool int); 39680 vector signed int vec_vmaxsw (vector signed int, vector signed int); 39681 39682 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 39683 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 39684 vector unsigned int vec_vmaxuw (vector unsigned int, 39685 vector unsigned int); 39686 39687 vector signed short vec_vmaxsh (vector bool short, vector signed short); 39688 vector signed short vec_vmaxsh (vector signed short, vector bool short); 39689 vector signed short vec_vmaxsh (vector signed short, 39690 vector signed short); 39691 39692 vector unsigned short vec_vmaxuh (vector bool short, 39693 vector unsigned short); 39694 vector unsigned short vec_vmaxuh (vector unsigned short, 39695 vector bool short); 39696 vector unsigned short vec_vmaxuh (vector unsigned short, 39697 vector unsigned short); 39698 39699 vector signed char vec_vmaxsb (vector bool char, vector signed char); 39700 vector signed char vec_vmaxsb (vector signed char, vector bool char); 39701 vector signed char vec_vmaxsb (vector signed char, vector signed char); 39702 39703 vector unsigned char vec_vmaxub (vector bool char, 39704 vector unsigned char); 39705 vector unsigned char vec_vmaxub (vector unsigned char, 39706 vector bool char); 39707 vector unsigned char vec_vmaxub (vector unsigned char, 39708 vector unsigned char); 39709 39710 vector bool char vec_mergeh (vector bool char, vector bool char); 39711 vector signed char vec_mergeh (vector signed char, vector signed char); 39712 vector unsigned char vec_mergeh (vector unsigned char, 39713 vector unsigned char); 39714 vector bool short vec_mergeh (vector bool short, vector bool short); 39715 vector pixel vec_mergeh (vector pixel, vector pixel); 39716 vector signed short vec_mergeh (vector signed short, 39717 vector signed short); 39718 vector unsigned short vec_mergeh (vector unsigned short, 39719 vector unsigned short); 39720 vector float vec_mergeh (vector float, vector float); 39721 vector bool int vec_mergeh (vector bool int, vector bool int); 39722 vector signed int vec_mergeh (vector signed int, vector signed int); 39723 vector unsigned int vec_mergeh (vector unsigned int, 39724 vector unsigned int); 39725 39726 vector float vec_vmrghw (vector float, vector float); 39727 vector bool int vec_vmrghw (vector bool int, vector bool int); 39728 vector signed int vec_vmrghw (vector signed int, vector signed int); 39729 vector unsigned int vec_vmrghw (vector unsigned int, 39730 vector unsigned int); 39731 39732 vector bool short vec_vmrghh (vector bool short, vector bool short); 39733 vector signed short vec_vmrghh (vector signed short, 39734 vector signed short); 39735 vector unsigned short vec_vmrghh (vector unsigned short, 39736 vector unsigned short); 39737 vector pixel vec_vmrghh (vector pixel, vector pixel); 39738 39739 vector bool char vec_vmrghb (vector bool char, vector bool char); 39740 vector signed char vec_vmrghb (vector signed char, vector signed char); 39741 vector unsigned char vec_vmrghb (vector unsigned char, 39742 vector unsigned char); 39743 39744 vector bool char vec_mergel (vector bool char, vector bool char); 39745 vector signed char vec_mergel (vector signed char, vector signed char); 39746 vector unsigned char vec_mergel (vector unsigned char, 39747 vector unsigned char); 39748 vector bool short vec_mergel (vector bool short, vector bool short); 39749 vector pixel vec_mergel (vector pixel, vector pixel); 39750 vector signed short vec_mergel (vector signed short, 39751 vector signed short); 39752 vector unsigned short vec_mergel (vector unsigned short, 39753 vector unsigned short); 39754 vector float vec_mergel (vector float, vector float); 39755 vector bool int vec_mergel (vector bool int, vector bool int); 39756 vector signed int vec_mergel (vector signed int, vector signed int); 39757 vector unsigned int vec_mergel (vector unsigned int, 39758 vector unsigned int); 39759 39760 vector float vec_vmrglw (vector float, vector float); 39761 vector signed int vec_vmrglw (vector signed int, vector signed int); 39762 vector unsigned int vec_vmrglw (vector unsigned int, 39763 vector unsigned int); 39764 vector bool int vec_vmrglw (vector bool int, vector bool int); 39765 39766 vector bool short vec_vmrglh (vector bool short, vector bool short); 39767 vector signed short vec_vmrglh (vector signed short, 39768 vector signed short); 39769 vector unsigned short vec_vmrglh (vector unsigned short, 39770 vector unsigned short); 39771 vector pixel vec_vmrglh (vector pixel, vector pixel); 39772 39773 vector bool char vec_vmrglb (vector bool char, vector bool char); 39774 vector signed char vec_vmrglb (vector signed char, vector signed char); 39775 vector unsigned char vec_vmrglb (vector unsigned char, 39776 vector unsigned char); 39777 39778 vector unsigned short vec_mfvscr (void); 39779 39780 vector unsigned char vec_min (vector bool char, vector unsigned char); 39781 vector unsigned char vec_min (vector unsigned char, vector bool char); 39782 vector unsigned char vec_min (vector unsigned char, 39783 vector unsigned char); 39784 vector signed char vec_min (vector bool char, vector signed char); 39785 vector signed char vec_min (vector signed char, vector bool char); 39786 vector signed char vec_min (vector signed char, vector signed char); 39787 vector unsigned short vec_min (vector bool short, 39788 vector unsigned short); 39789 vector unsigned short vec_min (vector unsigned short, 39790 vector bool short); 39791 vector unsigned short vec_min (vector unsigned short, 39792 vector unsigned short); 39793 vector signed short vec_min (vector bool short, vector signed short); 39794 vector signed short vec_min (vector signed short, vector bool short); 39795 vector signed short vec_min (vector signed short, vector signed short); 39796 vector unsigned int vec_min (vector bool int, vector unsigned int); 39797 vector unsigned int vec_min (vector unsigned int, vector bool int); 39798 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 39799 vector signed int vec_min (vector bool int, vector signed int); 39800 vector signed int vec_min (vector signed int, vector bool int); 39801 vector signed int vec_min (vector signed int, vector signed int); 39802 vector float vec_min (vector float, vector float); 39803 39804 vector float vec_vminfp (vector float, vector float); 39805 39806 vector signed int vec_vminsw (vector bool int, vector signed int); 39807 vector signed int vec_vminsw (vector signed int, vector bool int); 39808 vector signed int vec_vminsw (vector signed int, vector signed int); 39809 39810 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 39811 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 39812 vector unsigned int vec_vminuw (vector unsigned int, 39813 vector unsigned int); 39814 39815 vector signed short vec_vminsh (vector bool short, vector signed short); 39816 vector signed short vec_vminsh (vector signed short, vector bool short); 39817 vector signed short vec_vminsh (vector signed short, 39818 vector signed short); 39819 39820 vector unsigned short vec_vminuh (vector bool short, 39821 vector unsigned short); 39822 vector unsigned short vec_vminuh (vector unsigned short, 39823 vector bool short); 39824 vector unsigned short vec_vminuh (vector unsigned short, 39825 vector unsigned short); 39826 39827 vector signed char vec_vminsb (vector bool char, vector signed char); 39828 vector signed char vec_vminsb (vector signed char, vector bool char); 39829 vector signed char vec_vminsb (vector signed char, vector signed char); 39830 39831 vector unsigned char vec_vminub (vector bool char, 39832 vector unsigned char); 39833 vector unsigned char vec_vminub (vector unsigned char, 39834 vector bool char); 39835 vector unsigned char vec_vminub (vector unsigned char, 39836 vector unsigned char); 39837 39838 vector signed short vec_mladd (vector signed short, 39839 vector signed short, 39840 vector signed short); 39841 vector signed short vec_mladd (vector signed short, 39842 vector unsigned short, 39843 vector unsigned short); 39844 vector signed short vec_mladd (vector unsigned short, 39845 vector signed short, 39846 vector signed short); 39847 vector unsigned short vec_mladd (vector unsigned short, 39848 vector unsigned short, 39849 vector unsigned short); 39850 39851 vector signed short vec_mradds (vector signed short, 39852 vector signed short, 39853 vector signed short); 39854 39855 vector unsigned int vec_msum (vector unsigned char, 39856 vector unsigned char, 39857 vector unsigned int); 39858 vector signed int vec_msum (vector signed char, 39859 vector unsigned char, 39860 vector signed int); 39861 vector unsigned int vec_msum (vector unsigned short, 39862 vector unsigned short, 39863 vector unsigned int); 39864 vector signed int vec_msum (vector signed short, 39865 vector signed short, 39866 vector signed int); 39867 39868 vector signed int vec_vmsumshm (vector signed short, 39869 vector signed short, 39870 vector signed int); 39871 39872 vector unsigned int vec_vmsumuhm (vector unsigned short, 39873 vector unsigned short, 39874 vector unsigned int); 39875 39876 vector signed int vec_vmsummbm (vector signed char, 39877 vector unsigned char, 39878 vector signed int); 39879 39880 vector unsigned int vec_vmsumubm (vector unsigned char, 39881 vector unsigned char, 39882 vector unsigned int); 39883 39884 vector unsigned int vec_msums (vector unsigned short, 39885 vector unsigned short, 39886 vector unsigned int); 39887 vector signed int vec_msums (vector signed short, 39888 vector signed short, 39889 vector signed int); 39890 39891 vector signed int vec_vmsumshs (vector signed short, 39892 vector signed short, 39893 vector signed int); 39894 39895 vector unsigned int vec_vmsumuhs (vector unsigned short, 39896 vector unsigned short, 39897 vector unsigned int); 39898 39899 void vec_mtvscr (vector signed int); 39900 void vec_mtvscr (vector unsigned int); 39901 void vec_mtvscr (vector bool int); 39902 void vec_mtvscr (vector signed short); 39903 void vec_mtvscr (vector unsigned short); 39904 void vec_mtvscr (vector bool short); 39905 void vec_mtvscr (vector pixel); 39906 void vec_mtvscr (vector signed char); 39907 void vec_mtvscr (vector unsigned char); 39908 void vec_mtvscr (vector bool char); 39909 39910 vector unsigned short vec_mule (vector unsigned char, 39911 vector unsigned char); 39912 vector signed short vec_mule (vector signed char, 39913 vector signed char); 39914 vector unsigned int vec_mule (vector unsigned short, 39915 vector unsigned short); 39916 vector signed int vec_mule (vector signed short, vector signed short); 39917 39918 vector signed int vec_vmulesh (vector signed short, 39919 vector signed short); 39920 39921 vector unsigned int vec_vmuleuh (vector unsigned short, 39922 vector unsigned short); 39923 39924 vector signed short vec_vmulesb (vector signed char, 39925 vector signed char); 39926 39927 vector unsigned short vec_vmuleub (vector unsigned char, 39928 vector unsigned char); 39929 39930 vector unsigned short vec_mulo (vector unsigned char, 39931 vector unsigned char); 39932 vector signed short vec_mulo (vector signed char, vector signed char); 39933 vector unsigned int vec_mulo (vector unsigned short, 39934 vector unsigned short); 39935 vector signed int vec_mulo (vector signed short, vector signed short); 39936 39937 vector signed int vec_vmulosh (vector signed short, 39938 vector signed short); 39939 39940 vector unsigned int vec_vmulouh (vector unsigned short, 39941 vector unsigned short); 39942 39943 vector signed short vec_vmulosb (vector signed char, 39944 vector signed char); 39945 39946 vector unsigned short vec_vmuloub (vector unsigned char, 39947 vector unsigned char); 39948 39949 vector float vec_nmsub (vector float, vector float, vector float); 39950 39951 vector float vec_nor (vector float, vector float); 39952 vector signed int vec_nor (vector signed int, vector signed int); 39953 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 39954 vector bool int vec_nor (vector bool int, vector bool int); 39955 vector signed short vec_nor (vector signed short, vector signed short); 39956 vector unsigned short vec_nor (vector unsigned short, 39957 vector unsigned short); 39958 vector bool short vec_nor (vector bool short, vector bool short); 39959 vector signed char vec_nor (vector signed char, vector signed char); 39960 vector unsigned char vec_nor (vector unsigned char, 39961 vector unsigned char); 39962 vector bool char vec_nor (vector bool char, vector bool char); 39963 39964 vector float vec_or (vector float, vector float); 39965 vector float vec_or (vector float, vector bool int); 39966 vector float vec_or (vector bool int, vector float); 39967 vector bool int vec_or (vector bool int, vector bool int); 39968 vector signed int vec_or (vector bool int, vector signed int); 39969 vector signed int vec_or (vector signed int, vector bool int); 39970 vector signed int vec_or (vector signed int, vector signed int); 39971 vector unsigned int vec_or (vector bool int, vector unsigned int); 39972 vector unsigned int vec_or (vector unsigned int, vector bool int); 39973 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 39974 vector bool short vec_or (vector bool short, vector bool short); 39975 vector signed short vec_or (vector bool short, vector signed short); 39976 vector signed short vec_or (vector signed short, vector bool short); 39977 vector signed short vec_or (vector signed short, vector signed short); 39978 vector unsigned short vec_or (vector bool short, vector unsigned short); 39979 vector unsigned short vec_or (vector unsigned short, vector bool short); 39980 vector unsigned short vec_or (vector unsigned short, 39981 vector unsigned short); 39982 vector signed char vec_or (vector bool char, vector signed char); 39983 vector bool char vec_or (vector bool char, vector bool char); 39984 vector signed char vec_or (vector signed char, vector bool char); 39985 vector signed char vec_or (vector signed char, vector signed char); 39986 vector unsigned char vec_or (vector bool char, vector unsigned char); 39987 vector unsigned char vec_or (vector unsigned char, vector bool char); 39988 vector unsigned char vec_or (vector unsigned char, 39989 vector unsigned char); 39990 39991 vector signed char vec_pack (vector signed short, vector signed short); 39992 vector unsigned char vec_pack (vector unsigned short, 39993 vector unsigned short); 39994 vector bool char vec_pack (vector bool short, vector bool short); 39995 vector signed short vec_pack (vector signed int, vector signed int); 39996 vector unsigned short vec_pack (vector unsigned int, 39997 vector unsigned int); 39998 vector bool short vec_pack (vector bool int, vector bool int); 39999 40000 vector bool short vec_vpkuwum (vector bool int, vector bool int); 40001 vector signed short vec_vpkuwum (vector signed int, vector signed int); 40002 vector unsigned short vec_vpkuwum (vector unsigned int, 40003 vector unsigned int); 40004 40005 vector bool char vec_vpkuhum (vector bool short, vector bool short); 40006 vector signed char vec_vpkuhum (vector signed short, 40007 vector signed short); 40008 vector unsigned char vec_vpkuhum (vector unsigned short, 40009 vector unsigned short); 40010 40011 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 40012 40013 vector unsigned char vec_packs (vector unsigned short, 40014 vector unsigned short); 40015 vector signed char vec_packs (vector signed short, vector signed short); 40016 vector unsigned short vec_packs (vector unsigned int, 40017 vector unsigned int); 40018 vector signed short vec_packs (vector signed int, vector signed int); 40019 40020 vector signed short vec_vpkswss (vector signed int, vector signed int); 40021 40022 vector unsigned short vec_vpkuwus (vector unsigned int, 40023 vector unsigned int); 40024 40025 vector signed char vec_vpkshss (vector signed short, 40026 vector signed short); 40027 40028 vector unsigned char vec_vpkuhus (vector unsigned short, 40029 vector unsigned short); 40030 40031 vector unsigned char vec_packsu (vector unsigned short, 40032 vector unsigned short); 40033 vector unsigned char vec_packsu (vector signed short, 40034 vector signed short); 40035 vector unsigned short vec_packsu (vector unsigned int, 40036 vector unsigned int); 40037 vector unsigned short vec_packsu (vector signed int, vector signed int); 40038 40039 vector unsigned short vec_vpkswus (vector signed int, 40040 vector signed int); 40041 40042 vector unsigned char vec_vpkshus (vector signed short, 40043 vector signed short); 40044 40045 vector float vec_perm (vector float, 40046 vector float, 40047 vector unsigned char); 40048 vector signed int vec_perm (vector signed int, 40049 vector signed int, 40050 vector unsigned char); 40051 vector unsigned int vec_perm (vector unsigned int, 40052 vector unsigned int, 40053 vector unsigned char); 40054 vector bool int vec_perm (vector bool int, 40055 vector bool int, 40056 vector unsigned char); 40057 vector signed short vec_perm (vector signed short, 40058 vector signed short, 40059 vector unsigned char); 40060 vector unsigned short vec_perm (vector unsigned short, 40061 vector unsigned short, 40062 vector unsigned char); 40063 vector bool short vec_perm (vector bool short, 40064 vector bool short, 40065 vector unsigned char); 40066 vector pixel vec_perm (vector pixel, 40067 vector pixel, 40068 vector unsigned char); 40069 vector signed char vec_perm (vector signed char, 40070 vector signed char, 40071 vector unsigned char); 40072 vector unsigned char vec_perm (vector unsigned char, 40073 vector unsigned char, 40074 vector unsigned char); 40075 vector bool char vec_perm (vector bool char, 40076 vector bool char, 40077 vector unsigned char); 40078 40079 vector float vec_re (vector float); 40080 40081 vector signed char vec_rl (vector signed char, 40082 vector unsigned char); 40083 vector unsigned char vec_rl (vector unsigned char, 40084 vector unsigned char); 40085 vector signed short vec_rl (vector signed short, vector unsigned short); 40086 vector unsigned short vec_rl (vector unsigned short, 40087 vector unsigned short); 40088 vector signed int vec_rl (vector signed int, vector unsigned int); 40089 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 40090 40091 vector signed int vec_vrlw (vector signed int, vector unsigned int); 40092 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 40093 40094 vector signed short vec_vrlh (vector signed short, 40095 vector unsigned short); 40096 vector unsigned short vec_vrlh (vector unsigned short, 40097 vector unsigned short); 40098 40099 vector signed char vec_vrlb (vector signed char, vector unsigned char); 40100 vector unsigned char vec_vrlb (vector unsigned char, 40101 vector unsigned char); 40102 40103 vector float vec_round (vector float); 40104 40105 vector float vec_recip (vector float, vector float); 40106 40107 vector float vec_rsqrt (vector float); 40108 40109 vector float vec_rsqrte (vector float); 40110 40111 vector float vec_sel (vector float, vector float, vector bool int); 40112 vector float vec_sel (vector float, vector float, vector unsigned int); 40113 vector signed int vec_sel (vector signed int, 40114 vector signed int, 40115 vector bool int); 40116 vector signed int vec_sel (vector signed int, 40117 vector signed int, 40118 vector unsigned int); 40119 vector unsigned int vec_sel (vector unsigned int, 40120 vector unsigned int, 40121 vector bool int); 40122 vector unsigned int vec_sel (vector unsigned int, 40123 vector unsigned int, 40124 vector unsigned int); 40125 vector bool int vec_sel (vector bool int, 40126 vector bool int, 40127 vector bool int); 40128 vector bool int vec_sel (vector bool int, 40129 vector bool int, 40130 vector unsigned int); 40131 vector signed short vec_sel (vector signed short, 40132 vector signed short, 40133 vector bool short); 40134 vector signed short vec_sel (vector signed short, 40135 vector signed short, 40136 vector unsigned short); 40137 vector unsigned short vec_sel (vector unsigned short, 40138 vector unsigned short, 40139 vector bool short); 40140 vector unsigned short vec_sel (vector unsigned short, 40141 vector unsigned short, 40142 vector unsigned short); 40143 vector bool short vec_sel (vector bool short, 40144 vector bool short, 40145 vector bool short); 40146 vector bool short vec_sel (vector bool short, 40147 vector bool short, 40148 vector unsigned short); 40149 vector signed char vec_sel (vector signed char, 40150 vector signed char, 40151 vector bool char); 40152 vector signed char vec_sel (vector signed char, 40153 vector signed char, 40154 vector unsigned char); 40155 vector unsigned char vec_sel (vector unsigned char, 40156 vector unsigned char, 40157 vector bool char); 40158 vector unsigned char vec_sel (vector unsigned char, 40159 vector unsigned char, 40160 vector unsigned char); 40161 vector bool char vec_sel (vector bool char, 40162 vector bool char, 40163 vector bool char); 40164 vector bool char vec_sel (vector bool char, 40165 vector bool char, 40166 vector unsigned char); 40167 40168 vector signed char vec_sl (vector signed char, 40169 vector unsigned char); 40170 vector unsigned char vec_sl (vector unsigned char, 40171 vector unsigned char); 40172 vector signed short vec_sl (vector signed short, vector unsigned short); 40173 vector unsigned short vec_sl (vector unsigned short, 40174 vector unsigned short); 40175 vector signed int vec_sl (vector signed int, vector unsigned int); 40176 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 40177 40178 vector signed int vec_vslw (vector signed int, vector unsigned int); 40179 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 40180 40181 vector signed short vec_vslh (vector signed short, 40182 vector unsigned short); 40183 vector unsigned short vec_vslh (vector unsigned short, 40184 vector unsigned short); 40185 40186 vector signed char vec_vslb (vector signed char, vector unsigned char); 40187 vector unsigned char vec_vslb (vector unsigned char, 40188 vector unsigned char); 40189 40190 vector float vec_sld (vector float, vector float, const int); 40191 vector signed int vec_sld (vector signed int, 40192 vector signed int, 40193 const int); 40194 vector unsigned int vec_sld (vector unsigned int, 40195 vector unsigned int, 40196 const int); 40197 vector bool int vec_sld (vector bool int, 40198 vector bool int, 40199 const int); 40200 vector signed short vec_sld (vector signed short, 40201 vector signed short, 40202 const int); 40203 vector unsigned short vec_sld (vector unsigned short, 40204 vector unsigned short, 40205 const int); 40206 vector bool short vec_sld (vector bool short, 40207 vector bool short, 40208 const int); 40209 vector pixel vec_sld (vector pixel, 40210 vector pixel, 40211 const int); 40212 vector signed char vec_sld (vector signed char, 40213 vector signed char, 40214 const int); 40215 vector unsigned char vec_sld (vector unsigned char, 40216 vector unsigned char, 40217 const int); 40218 vector bool char vec_sld (vector bool char, 40219 vector bool char, 40220 const int); 40221 40222 vector signed int vec_sll (vector signed int, 40223 vector unsigned int); 40224 vector signed int vec_sll (vector signed int, 40225 vector unsigned short); 40226 vector signed int vec_sll (vector signed int, 40227 vector unsigned char); 40228 vector unsigned int vec_sll (vector unsigned int, 40229 vector unsigned int); 40230 vector unsigned int vec_sll (vector unsigned int, 40231 vector unsigned short); 40232 vector unsigned int vec_sll (vector unsigned int, 40233 vector unsigned char); 40234 vector bool int vec_sll (vector bool int, 40235 vector unsigned int); 40236 vector bool int vec_sll (vector bool int, 40237 vector unsigned short); 40238 vector bool int vec_sll (vector bool int, 40239 vector unsigned char); 40240 vector signed short vec_sll (vector signed short, 40241 vector unsigned int); 40242 vector signed short vec_sll (vector signed short, 40243 vector unsigned short); 40244 vector signed short vec_sll (vector signed short, 40245 vector unsigned char); 40246 vector unsigned short vec_sll (vector unsigned short, 40247 vector unsigned int); 40248 vector unsigned short vec_sll (vector unsigned short, 40249 vector unsigned short); 40250 vector unsigned short vec_sll (vector unsigned short, 40251 vector unsigned char); 40252 vector bool short vec_sll (vector bool short, vector unsigned int); 40253 vector bool short vec_sll (vector bool short, vector unsigned short); 40254 vector bool short vec_sll (vector bool short, vector unsigned char); 40255 vector pixel vec_sll (vector pixel, vector unsigned int); 40256 vector pixel vec_sll (vector pixel, vector unsigned short); 40257 vector pixel vec_sll (vector pixel, vector unsigned char); 40258 vector signed char vec_sll (vector signed char, vector unsigned int); 40259 vector signed char vec_sll (vector signed char, vector unsigned short); 40260 vector signed char vec_sll (vector signed char, vector unsigned char); 40261 vector unsigned char vec_sll (vector unsigned char, 40262 vector unsigned int); 40263 vector unsigned char vec_sll (vector unsigned char, 40264 vector unsigned short); 40265 vector unsigned char vec_sll (vector unsigned char, 40266 vector unsigned char); 40267 vector bool char vec_sll (vector bool char, vector unsigned int); 40268 vector bool char vec_sll (vector bool char, vector unsigned short); 40269 vector bool char vec_sll (vector bool char, vector unsigned char); 40270 40271 vector float vec_slo (vector float, vector signed char); 40272 vector float vec_slo (vector float, vector unsigned char); 40273 vector signed int vec_slo (vector signed int, vector signed char); 40274 vector signed int vec_slo (vector signed int, vector unsigned char); 40275 vector unsigned int vec_slo (vector unsigned int, vector signed char); 40276 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 40277 vector signed short vec_slo (vector signed short, vector signed char); 40278 vector signed short vec_slo (vector signed short, vector unsigned char); 40279 vector unsigned short vec_slo (vector unsigned short, 40280 vector signed char); 40281 vector unsigned short vec_slo (vector unsigned short, 40282 vector unsigned char); 40283 vector pixel vec_slo (vector pixel, vector signed char); 40284 vector pixel vec_slo (vector pixel, vector unsigned char); 40285 vector signed char vec_slo (vector signed char, vector signed char); 40286 vector signed char vec_slo (vector signed char, vector unsigned char); 40287 vector unsigned char vec_slo (vector unsigned char, vector signed char); 40288 vector unsigned char vec_slo (vector unsigned char, 40289 vector unsigned char); 40290 40291 vector signed char vec_splat (vector signed char, const int); 40292 vector unsigned char vec_splat (vector unsigned char, const int); 40293 vector bool char vec_splat (vector bool char, const int); 40294 vector signed short vec_splat (vector signed short, const int); 40295 vector unsigned short vec_splat (vector unsigned short, const int); 40296 vector bool short vec_splat (vector bool short, const int); 40297 vector pixel vec_splat (vector pixel, const int); 40298 vector float vec_splat (vector float, const int); 40299 vector signed int vec_splat (vector signed int, const int); 40300 vector unsigned int vec_splat (vector unsigned int, const int); 40301 vector bool int vec_splat (vector bool int, const int); 40302 vector signed long vec_splat (vector signed long, const int); 40303 vector unsigned long vec_splat (vector unsigned long, const int); 40304 40305 vector signed char vec_splats (signed char); 40306 vector unsigned char vec_splats (unsigned char); 40307 vector signed short vec_splats (signed short); 40308 vector unsigned short vec_splats (unsigned short); 40309 vector signed int vec_splats (signed int); 40310 vector unsigned int vec_splats (unsigned int); 40311 vector float vec_splats (float); 40312 40313 vector float vec_vspltw (vector float, const int); 40314 vector signed int vec_vspltw (vector signed int, const int); 40315 vector unsigned int vec_vspltw (vector unsigned int, const int); 40316 vector bool int vec_vspltw (vector bool int, const int); 40317 40318 vector bool short vec_vsplth (vector bool short, const int); 40319 vector signed short vec_vsplth (vector signed short, const int); 40320 vector unsigned short vec_vsplth (vector unsigned short, const int); 40321 vector pixel vec_vsplth (vector pixel, const int); 40322 40323 vector signed char vec_vspltb (vector signed char, const int); 40324 vector unsigned char vec_vspltb (vector unsigned char, const int); 40325 vector bool char vec_vspltb (vector bool char, const int); 40326 40327 vector signed char vec_splat_s8 (const int); 40328 40329 vector signed short vec_splat_s16 (const int); 40330 40331 vector signed int vec_splat_s32 (const int); 40332 40333 vector unsigned char vec_splat_u8 (const int); 40334 40335 vector unsigned short vec_splat_u16 (const int); 40336 40337 vector unsigned int vec_splat_u32 (const int); 40338 40339 vector signed char vec_sr (vector signed char, vector unsigned char); 40340 vector unsigned char vec_sr (vector unsigned char, 40341 vector unsigned char); 40342 vector signed short vec_sr (vector signed short, 40343 vector unsigned short); 40344 vector unsigned short vec_sr (vector unsigned short, 40345 vector unsigned short); 40346 vector signed int vec_sr (vector signed int, vector unsigned int); 40347 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 40348 40349 vector signed int vec_vsrw (vector signed int, vector unsigned int); 40350 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 40351 40352 vector signed short vec_vsrh (vector signed short, 40353 vector unsigned short); 40354 vector unsigned short vec_vsrh (vector unsigned short, 40355 vector unsigned short); 40356 40357 vector signed char vec_vsrb (vector signed char, vector unsigned char); 40358 vector unsigned char vec_vsrb (vector unsigned char, 40359 vector unsigned char); 40360 40361 vector signed char vec_sra (vector signed char, vector unsigned char); 40362 vector unsigned char vec_sra (vector unsigned char, 40363 vector unsigned char); 40364 vector signed short vec_sra (vector signed short, 40365 vector unsigned short); 40366 vector unsigned short vec_sra (vector unsigned short, 40367 vector unsigned short); 40368 vector signed int vec_sra (vector signed int, vector unsigned int); 40369 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 40370 40371 vector signed int vec_vsraw (vector signed int, vector unsigned int); 40372 vector unsigned int vec_vsraw (vector unsigned int, 40373 vector unsigned int); 40374 40375 vector signed short vec_vsrah (vector signed short, 40376 vector unsigned short); 40377 vector unsigned short vec_vsrah (vector unsigned short, 40378 vector unsigned short); 40379 40380 vector signed char vec_vsrab (vector signed char, vector unsigned char); 40381 vector unsigned char vec_vsrab (vector unsigned char, 40382 vector unsigned char); 40383 40384 vector signed int vec_srl (vector signed int, vector unsigned int); 40385 vector signed int vec_srl (vector signed int, vector unsigned short); 40386 vector signed int vec_srl (vector signed int, vector unsigned char); 40387 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 40388 vector unsigned int vec_srl (vector unsigned int, 40389 vector unsigned short); 40390 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 40391 vector bool int vec_srl (vector bool int, vector unsigned int); 40392 vector bool int vec_srl (vector bool int, vector unsigned short); 40393 vector bool int vec_srl (vector bool int, vector unsigned char); 40394 vector signed short vec_srl (vector signed short, vector unsigned int); 40395 vector signed short vec_srl (vector signed short, 40396 vector unsigned short); 40397 vector signed short vec_srl (vector signed short, vector unsigned char); 40398 vector unsigned short vec_srl (vector unsigned short, 40399 vector unsigned int); 40400 vector unsigned short vec_srl (vector unsigned short, 40401 vector unsigned short); 40402 vector unsigned short vec_srl (vector unsigned short, 40403 vector unsigned char); 40404 vector bool short vec_srl (vector bool short, vector unsigned int); 40405 vector bool short vec_srl (vector bool short, vector unsigned short); 40406 vector bool short vec_srl (vector bool short, vector unsigned char); 40407 vector pixel vec_srl (vector pixel, vector unsigned int); 40408 vector pixel vec_srl (vector pixel, vector unsigned short); 40409 vector pixel vec_srl (vector pixel, vector unsigned char); 40410 vector signed char vec_srl (vector signed char, vector unsigned int); 40411 vector signed char vec_srl (vector signed char, vector unsigned short); 40412 vector signed char vec_srl (vector signed char, vector unsigned char); 40413 vector unsigned char vec_srl (vector unsigned char, 40414 vector unsigned int); 40415 vector unsigned char vec_srl (vector unsigned char, 40416 vector unsigned short); 40417 vector unsigned char vec_srl (vector unsigned char, 40418 vector unsigned char); 40419 vector bool char vec_srl (vector bool char, vector unsigned int); 40420 vector bool char vec_srl (vector bool char, vector unsigned short); 40421 vector bool char vec_srl (vector bool char, vector unsigned char); 40422 40423 vector float vec_sro (vector float, vector signed char); 40424 vector float vec_sro (vector float, vector unsigned char); 40425 vector signed int vec_sro (vector signed int, vector signed char); 40426 vector signed int vec_sro (vector signed int, vector unsigned char); 40427 vector unsigned int vec_sro (vector unsigned int, vector signed char); 40428 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 40429 vector signed short vec_sro (vector signed short, vector signed char); 40430 vector signed short vec_sro (vector signed short, vector unsigned char); 40431 vector unsigned short vec_sro (vector unsigned short, 40432 vector signed char); 40433 vector unsigned short vec_sro (vector unsigned short, 40434 vector unsigned char); 40435 vector pixel vec_sro (vector pixel, vector signed char); 40436 vector pixel vec_sro (vector pixel, vector unsigned char); 40437 vector signed char vec_sro (vector signed char, vector signed char); 40438 vector signed char vec_sro (vector signed char, vector unsigned char); 40439 vector unsigned char vec_sro (vector unsigned char, vector signed char); 40440 vector unsigned char vec_sro (vector unsigned char, 40441 vector unsigned char); 40442 40443 void vec_st (vector float, int, vector float *); 40444 void vec_st (vector float, int, float *); 40445 void vec_st (vector signed int, int, vector signed int *); 40446 void vec_st (vector signed int, int, int *); 40447 void vec_st (vector unsigned int, int, vector unsigned int *); 40448 void vec_st (vector unsigned int, int, unsigned int *); 40449 void vec_st (vector bool int, int, vector bool int *); 40450 void vec_st (vector bool int, int, unsigned int *); 40451 void vec_st (vector bool int, int, int *); 40452 void vec_st (vector signed short, int, vector signed short *); 40453 void vec_st (vector signed short, int, short *); 40454 void vec_st (vector unsigned short, int, vector unsigned short *); 40455 void vec_st (vector unsigned short, int, unsigned short *); 40456 void vec_st (vector bool short, int, vector bool short *); 40457 void vec_st (vector bool short, int, unsigned short *); 40458 void vec_st (vector pixel, int, vector pixel *); 40459 void vec_st (vector pixel, int, unsigned short *); 40460 void vec_st (vector pixel, int, short *); 40461 void vec_st (vector bool short, int, short *); 40462 void vec_st (vector signed char, int, vector signed char *); 40463 void vec_st (vector signed char, int, signed char *); 40464 void vec_st (vector unsigned char, int, vector unsigned char *); 40465 void vec_st (vector unsigned char, int, unsigned char *); 40466 void vec_st (vector bool char, int, vector bool char *); 40467 void vec_st (vector bool char, int, unsigned char *); 40468 void vec_st (vector bool char, int, signed char *); 40469 40470 void vec_ste (vector signed char, int, signed char *); 40471 void vec_ste (vector unsigned char, int, unsigned char *); 40472 void vec_ste (vector bool char, int, signed char *); 40473 void vec_ste (vector bool char, int, unsigned char *); 40474 void vec_ste (vector signed short, int, short *); 40475 void vec_ste (vector unsigned short, int, unsigned short *); 40476 void vec_ste (vector bool short, int, short *); 40477 void vec_ste (vector bool short, int, unsigned short *); 40478 void vec_ste (vector pixel, int, short *); 40479 void vec_ste (vector pixel, int, unsigned short *); 40480 void vec_ste (vector float, int, float *); 40481 void vec_ste (vector signed int, int, int *); 40482 void vec_ste (vector unsigned int, int, unsigned int *); 40483 void vec_ste (vector bool int, int, int *); 40484 void vec_ste (vector bool int, int, unsigned int *); 40485 40486 void vec_stvewx (vector float, int, float *); 40487 void vec_stvewx (vector signed int, int, int *); 40488 void vec_stvewx (vector unsigned int, int, unsigned int *); 40489 void vec_stvewx (vector bool int, int, int *); 40490 void vec_stvewx (vector bool int, int, unsigned int *); 40491 40492 void vec_stvehx (vector signed short, int, short *); 40493 void vec_stvehx (vector unsigned short, int, unsigned short *); 40494 void vec_stvehx (vector bool short, int, short *); 40495 void vec_stvehx (vector bool short, int, unsigned short *); 40496 void vec_stvehx (vector pixel, int, short *); 40497 void vec_stvehx (vector pixel, int, unsigned short *); 40498 40499 void vec_stvebx (vector signed char, int, signed char *); 40500 void vec_stvebx (vector unsigned char, int, unsigned char *); 40501 void vec_stvebx (vector bool char, int, signed char *); 40502 void vec_stvebx (vector bool char, int, unsigned char *); 40503 40504 void vec_stl (vector float, int, vector float *); 40505 void vec_stl (vector float, int, float *); 40506 void vec_stl (vector signed int, int, vector signed int *); 40507 void vec_stl (vector signed int, int, int *); 40508 void vec_stl (vector unsigned int, int, vector unsigned int *); 40509 void vec_stl (vector unsigned int, int, unsigned int *); 40510 void vec_stl (vector bool int, int, vector bool int *); 40511 void vec_stl (vector bool int, int, unsigned int *); 40512 void vec_stl (vector bool int, int, int *); 40513 void vec_stl (vector signed short, int, vector signed short *); 40514 void vec_stl (vector signed short, int, short *); 40515 void vec_stl (vector unsigned short, int, vector unsigned short *); 40516 void vec_stl (vector unsigned short, int, unsigned short *); 40517 void vec_stl (vector bool short, int, vector bool short *); 40518 void vec_stl (vector bool short, int, unsigned short *); 40519 void vec_stl (vector bool short, int, short *); 40520 void vec_stl (vector pixel, int, vector pixel *); 40521 void vec_stl (vector pixel, int, unsigned short *); 40522 void vec_stl (vector pixel, int, short *); 40523 void vec_stl (vector signed char, int, vector signed char *); 40524 void vec_stl (vector signed char, int, signed char *); 40525 void vec_stl (vector unsigned char, int, vector unsigned char *); 40526 void vec_stl (vector unsigned char, int, unsigned char *); 40527 void vec_stl (vector bool char, int, vector bool char *); 40528 void vec_stl (vector bool char, int, unsigned char *); 40529 void vec_stl (vector bool char, int, signed char *); 40530 40531 vector signed char vec_sub (vector bool char, vector signed char); 40532 vector signed char vec_sub (vector signed char, vector bool char); 40533 vector signed char vec_sub (vector signed char, vector signed char); 40534 vector unsigned char vec_sub (vector bool char, vector unsigned char); 40535 vector unsigned char vec_sub (vector unsigned char, vector bool char); 40536 vector unsigned char vec_sub (vector unsigned char, 40537 vector unsigned char); 40538 vector signed short vec_sub (vector bool short, vector signed short); 40539 vector signed short vec_sub (vector signed short, vector bool short); 40540 vector signed short vec_sub (vector signed short, vector signed short); 40541 vector unsigned short vec_sub (vector bool short, 40542 vector unsigned short); 40543 vector unsigned short vec_sub (vector unsigned short, 40544 vector bool short); 40545 vector unsigned short vec_sub (vector unsigned short, 40546 vector unsigned short); 40547 vector signed int vec_sub (vector bool int, vector signed int); 40548 vector signed int vec_sub (vector signed int, vector bool int); 40549 vector signed int vec_sub (vector signed int, vector signed int); 40550 vector unsigned int vec_sub (vector bool int, vector unsigned int); 40551 vector unsigned int vec_sub (vector unsigned int, vector bool int); 40552 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 40553 vector float vec_sub (vector float, vector float); 40554 40555 vector float vec_vsubfp (vector float, vector float); 40556 40557 vector signed int vec_vsubuwm (vector bool int, vector signed int); 40558 vector signed int vec_vsubuwm (vector signed int, vector bool int); 40559 vector signed int vec_vsubuwm (vector signed int, vector signed int); 40560 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 40561 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 40562 vector unsigned int vec_vsubuwm (vector unsigned int, 40563 vector unsigned int); 40564 40565 vector signed short vec_vsubuhm (vector bool short, 40566 vector signed short); 40567 vector signed short vec_vsubuhm (vector signed short, 40568 vector bool short); 40569 vector signed short vec_vsubuhm (vector signed short, 40570 vector signed short); 40571 vector unsigned short vec_vsubuhm (vector bool short, 40572 vector unsigned short); 40573 vector unsigned short vec_vsubuhm (vector unsigned short, 40574 vector bool short); 40575 vector unsigned short vec_vsubuhm (vector unsigned short, 40576 vector unsigned short); 40577 40578 vector signed char vec_vsububm (vector bool char, vector signed char); 40579 vector signed char vec_vsububm (vector signed char, vector bool char); 40580 vector signed char vec_vsububm (vector signed char, vector signed char); 40581 vector unsigned char vec_vsububm (vector bool char, 40582 vector unsigned char); 40583 vector unsigned char vec_vsububm (vector unsigned char, 40584 vector bool char); 40585 vector unsigned char vec_vsububm (vector unsigned char, 40586 vector unsigned char); 40587 40588 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 40589 40590 vector unsigned char vec_subs (vector bool char, vector unsigned char); 40591 vector unsigned char vec_subs (vector unsigned char, vector bool char); 40592 vector unsigned char vec_subs (vector unsigned char, 40593 vector unsigned char); 40594 vector signed char vec_subs (vector bool char, vector signed char); 40595 vector signed char vec_subs (vector signed char, vector bool char); 40596 vector signed char vec_subs (vector signed char, vector signed char); 40597 vector unsigned short vec_subs (vector bool short, 40598 vector unsigned short); 40599 vector unsigned short vec_subs (vector unsigned short, 40600 vector bool short); 40601 vector unsigned short vec_subs (vector unsigned short, 40602 vector unsigned short); 40603 vector signed short vec_subs (vector bool short, vector signed short); 40604 vector signed short vec_subs (vector signed short, vector bool short); 40605 vector signed short vec_subs (vector signed short, vector signed short); 40606 vector unsigned int vec_subs (vector bool int, vector unsigned int); 40607 vector unsigned int vec_subs (vector unsigned int, vector bool int); 40608 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 40609 vector signed int vec_subs (vector bool int, vector signed int); 40610 vector signed int vec_subs (vector signed int, vector bool int); 40611 vector signed int vec_subs (vector signed int, vector signed int); 40612 40613 vector signed int vec_vsubsws (vector bool int, vector signed int); 40614 vector signed int vec_vsubsws (vector signed int, vector bool int); 40615 vector signed int vec_vsubsws (vector signed int, vector signed int); 40616 40617 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 40618 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 40619 vector unsigned int vec_vsubuws (vector unsigned int, 40620 vector unsigned int); 40621 40622 vector signed short vec_vsubshs (vector bool short, 40623 vector signed short); 40624 vector signed short vec_vsubshs (vector signed short, 40625 vector bool short); 40626 vector signed short vec_vsubshs (vector signed short, 40627 vector signed short); 40628 40629 vector unsigned short vec_vsubuhs (vector bool short, 40630 vector unsigned short); 40631 vector unsigned short vec_vsubuhs (vector unsigned short, 40632 vector bool short); 40633 vector unsigned short vec_vsubuhs (vector unsigned short, 40634 vector unsigned short); 40635 40636 vector signed char vec_vsubsbs (vector bool char, vector signed char); 40637 vector signed char vec_vsubsbs (vector signed char, vector bool char); 40638 vector signed char vec_vsubsbs (vector signed char, vector signed char); 40639 40640 vector unsigned char vec_vsububs (vector bool char, 40641 vector unsigned char); 40642 vector unsigned char vec_vsububs (vector unsigned char, 40643 vector bool char); 40644 vector unsigned char vec_vsububs (vector unsigned char, 40645 vector unsigned char); 40646 40647 vector unsigned int vec_sum4s (vector unsigned char, 40648 vector unsigned int); 40649 vector signed int vec_sum4s (vector signed char, vector signed int); 40650 vector signed int vec_sum4s (vector signed short, vector signed int); 40651 40652 vector signed int vec_vsum4shs (vector signed short, vector signed int); 40653 40654 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 40655 40656 vector unsigned int vec_vsum4ubs (vector unsigned char, 40657 vector unsigned int); 40658 40659 vector signed int vec_sum2s (vector signed int, vector signed int); 40660 40661 vector signed int vec_sums (vector signed int, vector signed int); 40662 40663 vector float vec_trunc (vector float); 40664 40665 vector signed short vec_unpackh (vector signed char); 40666 vector bool short vec_unpackh (vector bool char); 40667 vector signed int vec_unpackh (vector signed short); 40668 vector bool int vec_unpackh (vector bool short); 40669 vector unsigned int vec_unpackh (vector pixel); 40670 40671 vector bool int vec_vupkhsh (vector bool short); 40672 vector signed int vec_vupkhsh (vector signed short); 40673 40674 vector unsigned int vec_vupkhpx (vector pixel); 40675 40676 vector bool short vec_vupkhsb (vector bool char); 40677 vector signed short vec_vupkhsb (vector signed char); 40678 40679 vector signed short vec_unpackl (vector signed char); 40680 vector bool short vec_unpackl (vector bool char); 40681 vector unsigned int vec_unpackl (vector pixel); 40682 vector signed int vec_unpackl (vector signed short); 40683 vector bool int vec_unpackl (vector bool short); 40684 40685 vector unsigned int vec_vupklpx (vector pixel); 40686 40687 vector bool int vec_vupklsh (vector bool short); 40688 vector signed int vec_vupklsh (vector signed short); 40689 40690 vector bool short vec_vupklsb (vector bool char); 40691 vector signed short vec_vupklsb (vector signed char); 40692 40693 vector float vec_xor (vector float, vector float); 40694 vector float vec_xor (vector float, vector bool int); 40695 vector float vec_xor (vector bool int, vector float); 40696 vector bool int vec_xor (vector bool int, vector bool int); 40697 vector signed int vec_xor (vector bool int, vector signed int); 40698 vector signed int vec_xor (vector signed int, vector bool int); 40699 vector signed int vec_xor (vector signed int, vector signed int); 40700 vector unsigned int vec_xor (vector bool int, vector unsigned int); 40701 vector unsigned int vec_xor (vector unsigned int, vector bool int); 40702 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 40703 vector bool short vec_xor (vector bool short, vector bool short); 40704 vector signed short vec_xor (vector bool short, vector signed short); 40705 vector signed short vec_xor (vector signed short, vector bool short); 40706 vector signed short vec_xor (vector signed short, vector signed short); 40707 vector unsigned short vec_xor (vector bool short, 40708 vector unsigned short); 40709 vector unsigned short vec_xor (vector unsigned short, 40710 vector bool short); 40711 vector unsigned short vec_xor (vector unsigned short, 40712 vector unsigned short); 40713 vector signed char vec_xor (vector bool char, vector signed char); 40714 vector bool char vec_xor (vector bool char, vector bool char); 40715 vector signed char vec_xor (vector signed char, vector bool char); 40716 vector signed char vec_xor (vector signed char, vector signed char); 40717 vector unsigned char vec_xor (vector bool char, vector unsigned char); 40718 vector unsigned char vec_xor (vector unsigned char, vector bool char); 40719 vector unsigned char vec_xor (vector unsigned char, 40720 vector unsigned char); 40721 40722 int vec_all_eq (vector signed char, vector bool char); 40723 int vec_all_eq (vector signed char, vector signed char); 40724 int vec_all_eq (vector unsigned char, vector bool char); 40725 int vec_all_eq (vector unsigned char, vector unsigned char); 40726 int vec_all_eq (vector bool char, vector bool char); 40727 int vec_all_eq (vector bool char, vector unsigned char); 40728 int vec_all_eq (vector bool char, vector signed char); 40729 int vec_all_eq (vector signed short, vector bool short); 40730 int vec_all_eq (vector signed short, vector signed short); 40731 int vec_all_eq (vector unsigned short, vector bool short); 40732 int vec_all_eq (vector unsigned short, vector unsigned short); 40733 int vec_all_eq (vector bool short, vector bool short); 40734 int vec_all_eq (vector bool short, vector unsigned short); 40735 int vec_all_eq (vector bool short, vector signed short); 40736 int vec_all_eq (vector pixel, vector pixel); 40737 int vec_all_eq (vector signed int, vector bool int); 40738 int vec_all_eq (vector signed int, vector signed int); 40739 int vec_all_eq (vector unsigned int, vector bool int); 40740 int vec_all_eq (vector unsigned int, vector unsigned int); 40741 int vec_all_eq (vector bool int, vector bool int); 40742 int vec_all_eq (vector bool int, vector unsigned int); 40743 int vec_all_eq (vector bool int, vector signed int); 40744 int vec_all_eq (vector float, vector float); 40745 40746 int vec_all_ge (vector bool char, vector unsigned char); 40747 int vec_all_ge (vector unsigned char, vector bool char); 40748 int vec_all_ge (vector unsigned char, vector unsigned char); 40749 int vec_all_ge (vector bool char, vector signed char); 40750 int vec_all_ge (vector signed char, vector bool char); 40751 int vec_all_ge (vector signed char, vector signed char); 40752 int vec_all_ge (vector bool short, vector unsigned short); 40753 int vec_all_ge (vector unsigned short, vector bool short); 40754 int vec_all_ge (vector unsigned short, vector unsigned short); 40755 int vec_all_ge (vector signed short, vector signed short); 40756 int vec_all_ge (vector bool short, vector signed short); 40757 int vec_all_ge (vector signed short, vector bool short); 40758 int vec_all_ge (vector bool int, vector unsigned int); 40759 int vec_all_ge (vector unsigned int, vector bool int); 40760 int vec_all_ge (vector unsigned int, vector unsigned int); 40761 int vec_all_ge (vector bool int, vector signed int); 40762 int vec_all_ge (vector signed int, vector bool int); 40763 int vec_all_ge (vector signed int, vector signed int); 40764 int vec_all_ge (vector float, vector float); 40765 40766 int vec_all_gt (vector bool char, vector unsigned char); 40767 int vec_all_gt (vector unsigned char, vector bool char); 40768 int vec_all_gt (vector unsigned char, vector unsigned char); 40769 int vec_all_gt (vector bool char, vector signed char); 40770 int vec_all_gt (vector signed char, vector bool char); 40771 int vec_all_gt (vector signed char, vector signed char); 40772 int vec_all_gt (vector bool short, vector unsigned short); 40773 int vec_all_gt (vector unsigned short, vector bool short); 40774 int vec_all_gt (vector unsigned short, vector unsigned short); 40775 int vec_all_gt (vector bool short, vector signed short); 40776 int vec_all_gt (vector signed short, vector bool short); 40777 int vec_all_gt (vector signed short, vector signed short); 40778 int vec_all_gt (vector bool int, vector unsigned int); 40779 int vec_all_gt (vector unsigned int, vector bool int); 40780 int vec_all_gt (vector unsigned int, vector unsigned int); 40781 int vec_all_gt (vector bool int, vector signed int); 40782 int vec_all_gt (vector signed int, vector bool int); 40783 int vec_all_gt (vector signed int, vector signed int); 40784 int vec_all_gt (vector float, vector float); 40785 40786 int vec_all_in (vector float, vector float); 40787 40788 int vec_all_le (vector bool char, vector unsigned char); 40789 int vec_all_le (vector unsigned char, vector bool char); 40790 int vec_all_le (vector unsigned char, vector unsigned char); 40791 int vec_all_le (vector bool char, vector signed char); 40792 int vec_all_le (vector signed char, vector bool char); 40793 int vec_all_le (vector signed char, vector signed char); 40794 int vec_all_le (vector bool short, vector unsigned short); 40795 int vec_all_le (vector unsigned short, vector bool short); 40796 int vec_all_le (vector unsigned short, vector unsigned short); 40797 int vec_all_le (vector bool short, vector signed short); 40798 int vec_all_le (vector signed short, vector bool short); 40799 int vec_all_le (vector signed short, vector signed short); 40800 int vec_all_le (vector bool int, vector unsigned int); 40801 int vec_all_le (vector unsigned int, vector bool int); 40802 int vec_all_le (vector unsigned int, vector unsigned int); 40803 int vec_all_le (vector bool int, vector signed int); 40804 int vec_all_le (vector signed int, vector bool int); 40805 int vec_all_le (vector signed int, vector signed int); 40806 int vec_all_le (vector float, vector float); 40807 40808 int vec_all_lt (vector bool char, vector unsigned char); 40809 int vec_all_lt (vector unsigned char, vector bool char); 40810 int vec_all_lt (vector unsigned char, vector unsigned char); 40811 int vec_all_lt (vector bool char, vector signed char); 40812 int vec_all_lt (vector signed char, vector bool char); 40813 int vec_all_lt (vector signed char, vector signed char); 40814 int vec_all_lt (vector bool short, vector unsigned short); 40815 int vec_all_lt (vector unsigned short, vector bool short); 40816 int vec_all_lt (vector unsigned short, vector unsigned short); 40817 int vec_all_lt (vector bool short, vector signed short); 40818 int vec_all_lt (vector signed short, vector bool short); 40819 int vec_all_lt (vector signed short, vector signed short); 40820 int vec_all_lt (vector bool int, vector unsigned int); 40821 int vec_all_lt (vector unsigned int, vector bool int); 40822 int vec_all_lt (vector unsigned int, vector unsigned int); 40823 int vec_all_lt (vector bool int, vector signed int); 40824 int vec_all_lt (vector signed int, vector bool int); 40825 int vec_all_lt (vector signed int, vector signed int); 40826 int vec_all_lt (vector float, vector float); 40827 40828 int vec_all_nan (vector float); 40829 40830 int vec_all_ne (vector signed char, vector bool char); 40831 int vec_all_ne (vector signed char, vector signed char); 40832 int vec_all_ne (vector unsigned char, vector bool char); 40833 int vec_all_ne (vector unsigned char, vector unsigned char); 40834 int vec_all_ne (vector bool char, vector bool char); 40835 int vec_all_ne (vector bool char, vector unsigned char); 40836 int vec_all_ne (vector bool char, vector signed char); 40837 int vec_all_ne (vector signed short, vector bool short); 40838 int vec_all_ne (vector signed short, vector signed short); 40839 int vec_all_ne (vector unsigned short, vector bool short); 40840 int vec_all_ne (vector unsigned short, vector unsigned short); 40841 int vec_all_ne (vector bool short, vector bool short); 40842 int vec_all_ne (vector bool short, vector unsigned short); 40843 int vec_all_ne (vector bool short, vector signed short); 40844 int vec_all_ne (vector pixel, vector pixel); 40845 int vec_all_ne (vector signed int, vector bool int); 40846 int vec_all_ne (vector signed int, vector signed int); 40847 int vec_all_ne (vector unsigned int, vector bool int); 40848 int vec_all_ne (vector unsigned int, vector unsigned int); 40849 int vec_all_ne (vector bool int, vector bool int); 40850 int vec_all_ne (vector bool int, vector unsigned int); 40851 int vec_all_ne (vector bool int, vector signed int); 40852 int vec_all_ne (vector float, vector float); 40853 40854 int vec_all_nge (vector float, vector float); 40855 40856 int vec_all_ngt (vector float, vector float); 40857 40858 int vec_all_nle (vector float, vector float); 40859 40860 int vec_all_nlt (vector float, vector float); 40861 40862 int vec_all_numeric (vector float); 40863 40864 int vec_any_eq (vector signed char, vector bool char); 40865 int vec_any_eq (vector signed char, vector signed char); 40866 int vec_any_eq (vector unsigned char, vector bool char); 40867 int vec_any_eq (vector unsigned char, vector unsigned char); 40868 int vec_any_eq (vector bool char, vector bool char); 40869 int vec_any_eq (vector bool char, vector unsigned char); 40870 int vec_any_eq (vector bool char, vector signed char); 40871 int vec_any_eq (vector signed short, vector bool short); 40872 int vec_any_eq (vector signed short, vector signed short); 40873 int vec_any_eq (vector unsigned short, vector bool short); 40874 int vec_any_eq (vector unsigned short, vector unsigned short); 40875 int vec_any_eq (vector bool short, vector bool short); 40876 int vec_any_eq (vector bool short, vector unsigned short); 40877 int vec_any_eq (vector bool short, vector signed short); 40878 int vec_any_eq (vector pixel, vector pixel); 40879 int vec_any_eq (vector signed int, vector bool int); 40880 int vec_any_eq (vector signed int, vector signed int); 40881 int vec_any_eq (vector unsigned int, vector bool int); 40882 int vec_any_eq (vector unsigned int, vector unsigned int); 40883 int vec_any_eq (vector bool int, vector bool int); 40884 int vec_any_eq (vector bool int, vector unsigned int); 40885 int vec_any_eq (vector bool int, vector signed int); 40886 int vec_any_eq (vector float, vector float); 40887 40888 int vec_any_ge (vector signed char, vector bool char); 40889 int vec_any_ge (vector unsigned char, vector bool char); 40890 int vec_any_ge (vector unsigned char, vector unsigned char); 40891 int vec_any_ge (vector signed char, vector signed char); 40892 int vec_any_ge (vector bool char, vector unsigned char); 40893 int vec_any_ge (vector bool char, vector signed char); 40894 int vec_any_ge (vector unsigned short, vector bool short); 40895 int vec_any_ge (vector unsigned short, vector unsigned short); 40896 int vec_any_ge (vector signed short, vector signed short); 40897 int vec_any_ge (vector signed short, vector bool short); 40898 int vec_any_ge (vector bool short, vector unsigned short); 40899 int vec_any_ge (vector bool short, vector signed short); 40900 int vec_any_ge (vector signed int, vector bool int); 40901 int vec_any_ge (vector unsigned int, vector bool int); 40902 int vec_any_ge (vector unsigned int, vector unsigned int); 40903 int vec_any_ge (vector signed int, vector signed int); 40904 int vec_any_ge (vector bool int, vector unsigned int); 40905 int vec_any_ge (vector bool int, vector signed int); 40906 int vec_any_ge (vector float, vector float); 40907 40908 int vec_any_gt (vector bool char, vector unsigned char); 40909 int vec_any_gt (vector unsigned char, vector bool char); 40910 int vec_any_gt (vector unsigned char, vector unsigned char); 40911 int vec_any_gt (vector bool char, vector signed char); 40912 int vec_any_gt (vector signed char, vector bool char); 40913 int vec_any_gt (vector signed char, vector signed char); 40914 int vec_any_gt (vector bool short, vector unsigned short); 40915 int vec_any_gt (vector unsigned short, vector bool short); 40916 int vec_any_gt (vector unsigned short, vector unsigned short); 40917 int vec_any_gt (vector bool short, vector signed short); 40918 int vec_any_gt (vector signed short, vector bool short); 40919 int vec_any_gt (vector signed short, vector signed short); 40920 int vec_any_gt (vector bool int, vector unsigned int); 40921 int vec_any_gt (vector unsigned int, vector bool int); 40922 int vec_any_gt (vector unsigned int, vector unsigned int); 40923 int vec_any_gt (vector bool int, vector signed int); 40924 int vec_any_gt (vector signed int, vector bool int); 40925 int vec_any_gt (vector signed int, vector signed int); 40926 int vec_any_gt (vector float, vector float); 40927 40928 int vec_any_le (vector bool char, vector unsigned char); 40929 int vec_any_le (vector unsigned char, vector bool char); 40930 int vec_any_le (vector unsigned char, vector unsigned char); 40931 int vec_any_le (vector bool char, vector signed char); 40932 int vec_any_le (vector signed char, vector bool char); 40933 int vec_any_le (vector signed char, vector signed char); 40934 int vec_any_le (vector bool short, vector unsigned short); 40935 int vec_any_le (vector unsigned short, vector bool short); 40936 int vec_any_le (vector unsigned short, vector unsigned short); 40937 int vec_any_le (vector bool short, vector signed short); 40938 int vec_any_le (vector signed short, vector bool short); 40939 int vec_any_le (vector signed short, vector signed short); 40940 int vec_any_le (vector bool int, vector unsigned int); 40941 int vec_any_le (vector unsigned int, vector bool int); 40942 int vec_any_le (vector unsigned int, vector unsigned int); 40943 int vec_any_le (vector bool int, vector signed int); 40944 int vec_any_le (vector signed int, vector bool int); 40945 int vec_any_le (vector signed int, vector signed int); 40946 int vec_any_le (vector float, vector float); 40947 40948 int vec_any_lt (vector bool char, vector unsigned char); 40949 int vec_any_lt (vector unsigned char, vector bool char); 40950 int vec_any_lt (vector unsigned char, vector unsigned char); 40951 int vec_any_lt (vector bool char, vector signed char); 40952 int vec_any_lt (vector signed char, vector bool char); 40953 int vec_any_lt (vector signed char, vector signed char); 40954 int vec_any_lt (vector bool short, vector unsigned short); 40955 int vec_any_lt (vector unsigned short, vector bool short); 40956 int vec_any_lt (vector unsigned short, vector unsigned short); 40957 int vec_any_lt (vector bool short, vector signed short); 40958 int vec_any_lt (vector signed short, vector bool short); 40959 int vec_any_lt (vector signed short, vector signed short); 40960 int vec_any_lt (vector bool int, vector unsigned int); 40961 int vec_any_lt (vector unsigned int, vector bool int); 40962 int vec_any_lt (vector unsigned int, vector unsigned int); 40963 int vec_any_lt (vector bool int, vector signed int); 40964 int vec_any_lt (vector signed int, vector bool int); 40965 int vec_any_lt (vector signed int, vector signed int); 40966 int vec_any_lt (vector float, vector float); 40967 40968 int vec_any_nan (vector float); 40969 40970 int vec_any_ne (vector signed char, vector bool char); 40971 int vec_any_ne (vector signed char, vector signed char); 40972 int vec_any_ne (vector unsigned char, vector bool char); 40973 int vec_any_ne (vector unsigned char, vector unsigned char); 40974 int vec_any_ne (vector bool char, vector bool char); 40975 int vec_any_ne (vector bool char, vector unsigned char); 40976 int vec_any_ne (vector bool char, vector signed char); 40977 int vec_any_ne (vector signed short, vector bool short); 40978 int vec_any_ne (vector signed short, vector signed short); 40979 int vec_any_ne (vector unsigned short, vector bool short); 40980 int vec_any_ne (vector unsigned short, vector unsigned short); 40981 int vec_any_ne (vector bool short, vector bool short); 40982 int vec_any_ne (vector bool short, vector unsigned short); 40983 int vec_any_ne (vector bool short, vector signed short); 40984 int vec_any_ne (vector pixel, vector pixel); 40985 int vec_any_ne (vector signed int, vector bool int); 40986 int vec_any_ne (vector signed int, vector signed int); 40987 int vec_any_ne (vector unsigned int, vector bool int); 40988 int vec_any_ne (vector unsigned int, vector unsigned int); 40989 int vec_any_ne (vector bool int, vector bool int); 40990 int vec_any_ne (vector bool int, vector unsigned int); 40991 int vec_any_ne (vector bool int, vector signed int); 40992 int vec_any_ne (vector float, vector float); 40993 40994 int vec_any_nge (vector float, vector float); 40995 40996 int vec_any_ngt (vector float, vector float); 40997 40998 int vec_any_nle (vector float, vector float); 40999 41000 int vec_any_nlt (vector float, vector float); 41001 41002 int vec_any_numeric (vector float); 41003 41004 int vec_any_out (vector float, vector float); 41005 41006 If the vector/scalar (VSX) instruction set is available, the following 41007additional functions are available: 41008 41009 vector double vec_abs (vector double); 41010 vector double vec_add (vector double, vector double); 41011 vector double vec_and (vector double, vector double); 41012 vector double vec_and (vector double, vector bool long); 41013 vector double vec_and (vector bool long, vector double); 41014 vector long vec_and (vector long, vector long); 41015 vector long vec_and (vector long, vector bool long); 41016 vector long vec_and (vector bool long, vector long); 41017 vector unsigned long vec_and (vector unsigned long, vector unsigned long); 41018 vector unsigned long vec_and (vector unsigned long, vector bool long); 41019 vector unsigned long vec_and (vector bool long, vector unsigned long); 41020 vector double vec_andc (vector double, vector double); 41021 vector double vec_andc (vector double, vector bool long); 41022 vector double vec_andc (vector bool long, vector double); 41023 vector long vec_andc (vector long, vector long); 41024 vector long vec_andc (vector long, vector bool long); 41025 vector long vec_andc (vector bool long, vector long); 41026 vector unsigned long vec_andc (vector unsigned long, vector unsigned long); 41027 vector unsigned long vec_andc (vector unsigned long, vector bool long); 41028 vector unsigned long vec_andc (vector bool long, vector unsigned long); 41029 vector double vec_ceil (vector double); 41030 vector bool long vec_cmpeq (vector double, vector double); 41031 vector bool long vec_cmpge (vector double, vector double); 41032 vector bool long vec_cmpgt (vector double, vector double); 41033 vector bool long vec_cmple (vector double, vector double); 41034 vector bool long vec_cmplt (vector double, vector double); 41035 vector double vec_cpsgn (vector double, vector double); 41036 vector float vec_div (vector float, vector float); 41037 vector double vec_div (vector double, vector double); 41038 vector long vec_div (vector long, vector long); 41039 vector unsigned long vec_div (vector unsigned long, vector unsigned long); 41040 vector double vec_floor (vector double); 41041 vector double vec_ld (int, const vector double *); 41042 vector double vec_ld (int, const double *); 41043 vector double vec_ldl (int, const vector double *); 41044 vector double vec_ldl (int, const double *); 41045 vector unsigned char vec_lvsl (int, const volatile double *); 41046 vector unsigned char vec_lvsr (int, const volatile double *); 41047 vector double vec_madd (vector double, vector double, vector double); 41048 vector double vec_max (vector double, vector double); 41049 vector signed long vec_mergeh (vector signed long, vector signed long); 41050 vector signed long vec_mergeh (vector signed long, vector bool long); 41051 vector signed long vec_mergeh (vector bool long, vector signed long); 41052 vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long); 41053 vector unsigned long vec_mergeh (vector unsigned long, vector bool long); 41054 vector unsigned long vec_mergeh (vector bool long, vector unsigned long); 41055 vector signed long vec_mergel (vector signed long, vector signed long); 41056 vector signed long vec_mergel (vector signed long, vector bool long); 41057 vector signed long vec_mergel (vector bool long, vector signed long); 41058 vector unsigned long vec_mergel (vector unsigned long, vector unsigned long); 41059 vector unsigned long vec_mergel (vector unsigned long, vector bool long); 41060 vector unsigned long vec_mergel (vector bool long, vector unsigned long); 41061 vector double vec_min (vector double, vector double); 41062 vector float vec_msub (vector float, vector float, vector float); 41063 vector double vec_msub (vector double, vector double, vector double); 41064 vector float vec_mul (vector float, vector float); 41065 vector double vec_mul (vector double, vector double); 41066 vector long vec_mul (vector long, vector long); 41067 vector unsigned long vec_mul (vector unsigned long, vector unsigned long); 41068 vector float vec_nearbyint (vector float); 41069 vector double vec_nearbyint (vector double); 41070 vector float vec_nmadd (vector float, vector float, vector float); 41071 vector double vec_nmadd (vector double, vector double, vector double); 41072 vector double vec_nmsub (vector double, vector double, vector double); 41073 vector double vec_nor (vector double, vector double); 41074 vector long vec_nor (vector long, vector long); 41075 vector long vec_nor (vector long, vector bool long); 41076 vector long vec_nor (vector bool long, vector long); 41077 vector unsigned long vec_nor (vector unsigned long, vector unsigned long); 41078 vector unsigned long vec_nor (vector unsigned long, vector bool long); 41079 vector unsigned long vec_nor (vector bool long, vector unsigned long); 41080 vector double vec_or (vector double, vector double); 41081 vector double vec_or (vector double, vector bool long); 41082 vector double vec_or (vector bool long, vector double); 41083 vector long vec_or (vector long, vector long); 41084 vector long vec_or (vector long, vector bool long); 41085 vector long vec_or (vector bool long, vector long); 41086 vector unsigned long vec_or (vector unsigned long, vector unsigned long); 41087 vector unsigned long vec_or (vector unsigned long, vector bool long); 41088 vector unsigned long vec_or (vector bool long, vector unsigned long); 41089 vector double vec_perm (vector double, vector double, vector unsigned char); 41090 vector long vec_perm (vector long, vector long, vector unsigned char); 41091 vector unsigned long vec_perm (vector unsigned long, vector unsigned long, 41092 vector unsigned char); 41093 vector double vec_rint (vector double); 41094 vector double vec_recip (vector double, vector double); 41095 vector double vec_rsqrt (vector double); 41096 vector double vec_rsqrte (vector double); 41097 vector double vec_sel (vector double, vector double, vector bool long); 41098 vector double vec_sel (vector double, vector double, vector unsigned long); 41099 vector long vec_sel (vector long, vector long, vector long); 41100 vector long vec_sel (vector long, vector long, vector unsigned long); 41101 vector long vec_sel (vector long, vector long, vector bool long); 41102 vector unsigned long vec_sel (vector unsigned long, vector unsigned long, 41103 vector long); 41104 vector unsigned long vec_sel (vector unsigned long, vector unsigned long, 41105 vector unsigned long); 41106 vector unsigned long vec_sel (vector unsigned long, vector unsigned long, 41107 vector bool long); 41108 vector double vec_splats (double); 41109 vector signed long vec_splats (signed long); 41110 vector unsigned long vec_splats (unsigned long); 41111 vector float vec_sqrt (vector float); 41112 vector double vec_sqrt (vector double); 41113 void vec_st (vector double, int, vector double *); 41114 void vec_st (vector double, int, double *); 41115 vector double vec_sub (vector double, vector double); 41116 vector double vec_trunc (vector double); 41117 vector double vec_xor (vector double, vector double); 41118 vector double vec_xor (vector double, vector bool long); 41119 vector double vec_xor (vector bool long, vector double); 41120 vector long vec_xor (vector long, vector long); 41121 vector long vec_xor (vector long, vector bool long); 41122 vector long vec_xor (vector bool long, vector long); 41123 vector unsigned long vec_xor (vector unsigned long, vector unsigned long); 41124 vector unsigned long vec_xor (vector unsigned long, vector bool long); 41125 vector unsigned long vec_xor (vector bool long, vector unsigned long); 41126 int vec_all_eq (vector double, vector double); 41127 int vec_all_ge (vector double, vector double); 41128 int vec_all_gt (vector double, vector double); 41129 int vec_all_le (vector double, vector double); 41130 int vec_all_lt (vector double, vector double); 41131 int vec_all_nan (vector double); 41132 int vec_all_ne (vector double, vector double); 41133 int vec_all_nge (vector double, vector double); 41134 int vec_all_ngt (vector double, vector double); 41135 int vec_all_nle (vector double, vector double); 41136 int vec_all_nlt (vector double, vector double); 41137 int vec_all_numeric (vector double); 41138 int vec_any_eq (vector double, vector double); 41139 int vec_any_ge (vector double, vector double); 41140 int vec_any_gt (vector double, vector double); 41141 int vec_any_le (vector double, vector double); 41142 int vec_any_lt (vector double, vector double); 41143 int vec_any_nan (vector double); 41144 int vec_any_ne (vector double, vector double); 41145 int vec_any_nge (vector double, vector double); 41146 int vec_any_ngt (vector double, vector double); 41147 int vec_any_nle (vector double, vector double); 41148 int vec_any_nlt (vector double, vector double); 41149 int vec_any_numeric (vector double); 41150 41151 vector double vec_vsx_ld (int, const vector double *); 41152 vector double vec_vsx_ld (int, const double *); 41153 vector float vec_vsx_ld (int, const vector float *); 41154 vector float vec_vsx_ld (int, const float *); 41155 vector bool int vec_vsx_ld (int, const vector bool int *); 41156 vector signed int vec_vsx_ld (int, const vector signed int *); 41157 vector signed int vec_vsx_ld (int, const int *); 41158 vector signed int vec_vsx_ld (int, const long *); 41159 vector unsigned int vec_vsx_ld (int, const vector unsigned int *); 41160 vector unsigned int vec_vsx_ld (int, const unsigned int *); 41161 vector unsigned int vec_vsx_ld (int, const unsigned long *); 41162 vector bool short vec_vsx_ld (int, const vector bool short *); 41163 vector pixel vec_vsx_ld (int, const vector pixel *); 41164 vector signed short vec_vsx_ld (int, const vector signed short *); 41165 vector signed short vec_vsx_ld (int, const short *); 41166 vector unsigned short vec_vsx_ld (int, const vector unsigned short *); 41167 vector unsigned short vec_vsx_ld (int, const unsigned short *); 41168 vector bool char vec_vsx_ld (int, const vector bool char *); 41169 vector signed char vec_vsx_ld (int, const vector signed char *); 41170 vector signed char vec_vsx_ld (int, const signed char *); 41171 vector unsigned char vec_vsx_ld (int, const vector unsigned char *); 41172 vector unsigned char vec_vsx_ld (int, const unsigned char *); 41173 41174 void vec_vsx_st (vector double, int, vector double *); 41175 void vec_vsx_st (vector double, int, double *); 41176 void vec_vsx_st (vector float, int, vector float *); 41177 void vec_vsx_st (vector float, int, float *); 41178 void vec_vsx_st (vector signed int, int, vector signed int *); 41179 void vec_vsx_st (vector signed int, int, int *); 41180 void vec_vsx_st (vector unsigned int, int, vector unsigned int *); 41181 void vec_vsx_st (vector unsigned int, int, unsigned int *); 41182 void vec_vsx_st (vector bool int, int, vector bool int *); 41183 void vec_vsx_st (vector bool int, int, unsigned int *); 41184 void vec_vsx_st (vector bool int, int, int *); 41185 void vec_vsx_st (vector signed short, int, vector signed short *); 41186 void vec_vsx_st (vector signed short, int, short *); 41187 void vec_vsx_st (vector unsigned short, int, vector unsigned short *); 41188 void vec_vsx_st (vector unsigned short, int, unsigned short *); 41189 void vec_vsx_st (vector bool short, int, vector bool short *); 41190 void vec_vsx_st (vector bool short, int, unsigned short *); 41191 void vec_vsx_st (vector pixel, int, vector pixel *); 41192 void vec_vsx_st (vector pixel, int, unsigned short *); 41193 void vec_vsx_st (vector pixel, int, short *); 41194 void vec_vsx_st (vector bool short, int, short *); 41195 void vec_vsx_st (vector signed char, int, vector signed char *); 41196 void vec_vsx_st (vector signed char, int, signed char *); 41197 void vec_vsx_st (vector unsigned char, int, vector unsigned char *); 41198 void vec_vsx_st (vector unsigned char, int, unsigned char *); 41199 void vec_vsx_st (vector bool char, int, vector bool char *); 41200 void vec_vsx_st (vector bool char, int, unsigned char *); 41201 void vec_vsx_st (vector bool char, int, signed char *); 41202 41203 vector double vec_xxpermdi (vector double, vector double, int); 41204 vector float vec_xxpermdi (vector float, vector float, int); 41205 vector long long vec_xxpermdi (vector long long, vector long long, int); 41206 vector unsigned long long vec_xxpermdi (vector unsigned long long, 41207 vector unsigned long long, int); 41208 vector int vec_xxpermdi (vector int, vector int, int); 41209 vector unsigned int vec_xxpermdi (vector unsigned int, 41210 vector unsigned int, int); 41211 vector short vec_xxpermdi (vector short, vector short, int); 41212 vector unsigned short vec_xxpermdi (vector unsigned short, 41213 vector unsigned short, int); 41214 vector signed char vec_xxpermdi (vector signed char, vector signed char, int); 41215 vector unsigned char vec_xxpermdi (vector unsigned char, 41216 vector unsigned char, int); 41217 41218 vector double vec_xxsldi (vector double, vector double, int); 41219 vector float vec_xxsldi (vector float, vector float, int); 41220 vector long long vec_xxsldi (vector long long, vector long long, int); 41221 vector unsigned long long vec_xxsldi (vector unsigned long long, 41222 vector unsigned long long, int); 41223 vector int vec_xxsldi (vector int, vector int, int); 41224 vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int); 41225 vector short vec_xxsldi (vector short, vector short, int); 41226 vector unsigned short vec_xxsldi (vector unsigned short, 41227 vector unsigned short, int); 41228 vector signed char vec_xxsldi (vector signed char, vector signed char, int); 41229 vector unsigned char vec_xxsldi (vector unsigned char, 41230 vector unsigned char, int); 41231 41232 Note that the `vec_ld' and `vec_st' built-in functions always generate 41233the AltiVec `LVX' and `STVX' instructions even if the VSX instruction 41234set is available. The `vec_vsx_ld' and `vec_vsx_st' built-in functions 41235always generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X' 41236instructions. 41237 41238 If the ISA 2.07 additions to the vector/scalar (power8-vector) 41239instruction set is available, the following additional functions are 41240available for both 32-bit and 64-bit targets. For 64-bit targets, you 41241can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG 41242instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of 41243VECTOR UNSIGNED LONG LONG. 41244 41245 vector long long vec_abs (vector long long); 41246 41247 vector long long vec_add (vector long long, vector long long); 41248 vector unsigned long long vec_add (vector unsigned long long, 41249 vector unsigned long long); 41250 41251 int vec_all_eq (vector long long, vector long long); 41252 int vec_all_eq (vector unsigned long long, vector unsigned long long); 41253 int vec_all_ge (vector long long, vector long long); 41254 int vec_all_ge (vector unsigned long long, vector unsigned long long); 41255 int vec_all_gt (vector long long, vector long long); 41256 int vec_all_gt (vector unsigned long long, vector unsigned long long); 41257 int vec_all_le (vector long long, vector long long); 41258 int vec_all_le (vector unsigned long long, vector unsigned long long); 41259 int vec_all_lt (vector long long, vector long long); 41260 int vec_all_lt (vector unsigned long long, vector unsigned long long); 41261 int vec_all_ne (vector long long, vector long long); 41262 int vec_all_ne (vector unsigned long long, vector unsigned long long); 41263 41264 int vec_any_eq (vector long long, vector long long); 41265 int vec_any_eq (vector unsigned long long, vector unsigned long long); 41266 int vec_any_ge (vector long long, vector long long); 41267 int vec_any_ge (vector unsigned long long, vector unsigned long long); 41268 int vec_any_gt (vector long long, vector long long); 41269 int vec_any_gt (vector unsigned long long, vector unsigned long long); 41270 int vec_any_le (vector long long, vector long long); 41271 int vec_any_le (vector unsigned long long, vector unsigned long long); 41272 int vec_any_lt (vector long long, vector long long); 41273 int vec_any_lt (vector unsigned long long, vector unsigned long long); 41274 int vec_any_ne (vector long long, vector long long); 41275 int vec_any_ne (vector unsigned long long, vector unsigned long long); 41276 41277 vector long long vec_eqv (vector long long, vector long long); 41278 vector long long vec_eqv (vector bool long long, vector long long); 41279 vector long long vec_eqv (vector long long, vector bool long long); 41280 vector unsigned long long vec_eqv (vector unsigned long long, 41281 vector unsigned long long); 41282 vector unsigned long long vec_eqv (vector bool long long, 41283 vector unsigned long long); 41284 vector unsigned long long vec_eqv (vector unsigned long long, 41285 vector bool long long); 41286 vector int vec_eqv (vector int, vector int); 41287 vector int vec_eqv (vector bool int, vector int); 41288 vector int vec_eqv (vector int, vector bool int); 41289 vector unsigned int vec_eqv (vector unsigned int, vector unsigned int); 41290 vector unsigned int vec_eqv (vector bool unsigned int, 41291 vector unsigned int); 41292 vector unsigned int vec_eqv (vector unsigned int, 41293 vector bool unsigned int); 41294 vector short vec_eqv (vector short, vector short); 41295 vector short vec_eqv (vector bool short, vector short); 41296 vector short vec_eqv (vector short, vector bool short); 41297 vector unsigned short vec_eqv (vector unsigned short, vector unsigned short); 41298 vector unsigned short vec_eqv (vector bool unsigned short, 41299 vector unsigned short); 41300 vector unsigned short vec_eqv (vector unsigned short, 41301 vector bool unsigned short); 41302 vector signed char vec_eqv (vector signed char, vector signed char); 41303 vector signed char vec_eqv (vector bool signed char, vector signed char); 41304 vector signed char vec_eqv (vector signed char, vector bool signed char); 41305 vector unsigned char vec_eqv (vector unsigned char, vector unsigned char); 41306 vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char); 41307 vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char); 41308 41309 vector long long vec_max (vector long long, vector long long); 41310 vector unsigned long long vec_max (vector unsigned long long, 41311 vector unsigned long long); 41312 41313 vector signed int vec_mergee (vector signed int, vector signed int); 41314 vector unsigned int vec_mergee (vector unsigned int, vector unsigned int); 41315 vector bool int vec_mergee (vector bool int, vector bool int); 41316 41317 vector signed int vec_mergeo (vector signed int, vector signed int); 41318 vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int); 41319 vector bool int vec_mergeo (vector bool int, vector bool int); 41320 41321 vector long long vec_min (vector long long, vector long long); 41322 vector unsigned long long vec_min (vector unsigned long long, 41323 vector unsigned long long); 41324 41325 vector long long vec_nand (vector long long, vector long long); 41326 vector long long vec_nand (vector bool long long, vector long long); 41327 vector long long vec_nand (vector long long, vector bool long long); 41328 vector unsigned long long vec_nand (vector unsigned long long, 41329 vector unsigned long long); 41330 vector unsigned long long vec_nand (vector bool long long, 41331 vector unsigned long long); 41332 vector unsigned long long vec_nand (vector unsigned long long, 41333 vector bool long long); 41334 vector int vec_nand (vector int, vector int); 41335 vector int vec_nand (vector bool int, vector int); 41336 vector int vec_nand (vector int, vector bool int); 41337 vector unsigned int vec_nand (vector unsigned int, vector unsigned int); 41338 vector unsigned int vec_nand (vector bool unsigned int, 41339 vector unsigned int); 41340 vector unsigned int vec_nand (vector unsigned int, 41341 vector bool unsigned int); 41342 vector short vec_nand (vector short, vector short); 41343 vector short vec_nand (vector bool short, vector short); 41344 vector short vec_nand (vector short, vector bool short); 41345 vector unsigned short vec_nand (vector unsigned short, vector unsigned short); 41346 vector unsigned short vec_nand (vector bool unsigned short, 41347 vector unsigned short); 41348 vector unsigned short vec_nand (vector unsigned short, 41349 vector bool unsigned short); 41350 vector signed char vec_nand (vector signed char, vector signed char); 41351 vector signed char vec_nand (vector bool signed char, vector signed char); 41352 vector signed char vec_nand (vector signed char, vector bool signed char); 41353 vector unsigned char vec_nand (vector unsigned char, vector unsigned char); 41354 vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char); 41355 vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char); 41356 41357 vector long long vec_orc (vector long long, vector long long); 41358 vector long long vec_orc (vector bool long long, vector long long); 41359 vector long long vec_orc (vector long long, vector bool long long); 41360 vector unsigned long long vec_orc (vector unsigned long long, 41361 vector unsigned long long); 41362 vector unsigned long long vec_orc (vector bool long long, 41363 vector unsigned long long); 41364 vector unsigned long long vec_orc (vector unsigned long long, 41365 vector bool long long); 41366 vector int vec_orc (vector int, vector int); 41367 vector int vec_orc (vector bool int, vector int); 41368 vector int vec_orc (vector int, vector bool int); 41369 vector unsigned int vec_orc (vector unsigned int, vector unsigned int); 41370 vector unsigned int vec_orc (vector bool unsigned int, 41371 vector unsigned int); 41372 vector unsigned int vec_orc (vector unsigned int, 41373 vector bool unsigned int); 41374 vector short vec_orc (vector short, vector short); 41375 vector short vec_orc (vector bool short, vector short); 41376 vector short vec_orc (vector short, vector bool short); 41377 vector unsigned short vec_orc (vector unsigned short, vector unsigned short); 41378 vector unsigned short vec_orc (vector bool unsigned short, 41379 vector unsigned short); 41380 vector unsigned short vec_orc (vector unsigned short, 41381 vector bool unsigned short); 41382 vector signed char vec_orc (vector signed char, vector signed char); 41383 vector signed char vec_orc (vector bool signed char, vector signed char); 41384 vector signed char vec_orc (vector signed char, vector bool signed char); 41385 vector unsigned char vec_orc (vector unsigned char, vector unsigned char); 41386 vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char); 41387 vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char); 41388 41389 vector int vec_pack (vector long long, vector long long); 41390 vector unsigned int vec_pack (vector unsigned long long, 41391 vector unsigned long long); 41392 vector bool int vec_pack (vector bool long long, vector bool long long); 41393 41394 vector int vec_packs (vector long long, vector long long); 41395 vector unsigned int vec_packs (vector unsigned long long, 41396 vector unsigned long long); 41397 41398 vector unsigned int vec_packsu (vector long long, vector long long); 41399 vector unsigned int vec_packsu (vector unsigned long long, 41400 vector unsigned long long); 41401 41402 vector long long vec_rl (vector long long, 41403 vector unsigned long long); 41404 vector long long vec_rl (vector unsigned long long, 41405 vector unsigned long long); 41406 41407 vector long long vec_sl (vector long long, vector unsigned long long); 41408 vector long long vec_sl (vector unsigned long long, 41409 vector unsigned long long); 41410 41411 vector long long vec_sr (vector long long, vector unsigned long long); 41412 vector unsigned long long char vec_sr (vector unsigned long long, 41413 vector unsigned long long); 41414 41415 vector long long vec_sra (vector long long, vector unsigned long long); 41416 vector unsigned long long vec_sra (vector unsigned long long, 41417 vector unsigned long long); 41418 41419 vector long long vec_sub (vector long long, vector long long); 41420 vector unsigned long long vec_sub (vector unsigned long long, 41421 vector unsigned long long); 41422 41423 vector long long vec_unpackh (vector int); 41424 vector unsigned long long vec_unpackh (vector unsigned int); 41425 41426 vector long long vec_unpackl (vector int); 41427 vector unsigned long long vec_unpackl (vector unsigned int); 41428 41429 vector long long vec_vaddudm (vector long long, vector long long); 41430 vector long long vec_vaddudm (vector bool long long, vector long long); 41431 vector long long vec_vaddudm (vector long long, vector bool long long); 41432 vector unsigned long long vec_vaddudm (vector unsigned long long, 41433 vector unsigned long long); 41434 vector unsigned long long vec_vaddudm (vector bool unsigned long long, 41435 vector unsigned long long); 41436 vector unsigned long long vec_vaddudm (vector unsigned long long, 41437 vector bool unsigned long long); 41438 41439 vector long long vec_vbpermq (vector signed char, vector signed char); 41440 vector long long vec_vbpermq (vector unsigned char, vector unsigned char); 41441 41442 vector long long vec_cntlz (vector long long); 41443 vector unsigned long long vec_cntlz (vector unsigned long long); 41444 vector int vec_cntlz (vector int); 41445 vector unsigned int vec_cntlz (vector int); 41446 vector short vec_cntlz (vector short); 41447 vector unsigned short vec_cntlz (vector unsigned short); 41448 vector signed char vec_cntlz (vector signed char); 41449 vector unsigned char vec_cntlz (vector unsigned char); 41450 41451 vector long long vec_vclz (vector long long); 41452 vector unsigned long long vec_vclz (vector unsigned long long); 41453 vector int vec_vclz (vector int); 41454 vector unsigned int vec_vclz (vector int); 41455 vector short vec_vclz (vector short); 41456 vector unsigned short vec_vclz (vector unsigned short); 41457 vector signed char vec_vclz (vector signed char); 41458 vector unsigned char vec_vclz (vector unsigned char); 41459 41460 vector signed char vec_vclzb (vector signed char); 41461 vector unsigned char vec_vclzb (vector unsigned char); 41462 41463 vector long long vec_vclzd (vector long long); 41464 vector unsigned long long vec_vclzd (vector unsigned long long); 41465 41466 vector short vec_vclzh (vector short); 41467 vector unsigned short vec_vclzh (vector unsigned short); 41468 41469 vector int vec_vclzw (vector int); 41470 vector unsigned int vec_vclzw (vector int); 41471 41472 vector signed char vec_vgbbd (vector signed char); 41473 vector unsigned char vec_vgbbd (vector unsigned char); 41474 41475 vector long long vec_vmaxsd (vector long long, vector long long); 41476 41477 vector unsigned long long vec_vmaxud (vector unsigned long long, 41478 unsigned vector long long); 41479 41480 vector long long vec_vminsd (vector long long, vector long long); 41481 41482 vector unsigned long long vec_vminud (vector long long, 41483 vector long long); 41484 41485 vector int vec_vpksdss (vector long long, vector long long); 41486 vector unsigned int vec_vpksdss (vector long long, vector long long); 41487 41488 vector unsigned int vec_vpkudus (vector unsigned long long, 41489 vector unsigned long long); 41490 41491 vector int vec_vpkudum (vector long long, vector long long); 41492 vector unsigned int vec_vpkudum (vector unsigned long long, 41493 vector unsigned long long); 41494 vector bool int vec_vpkudum (vector bool long long, vector bool long long); 41495 41496 vector long long vec_vpopcnt (vector long long); 41497 vector unsigned long long vec_vpopcnt (vector unsigned long long); 41498 vector int vec_vpopcnt (vector int); 41499 vector unsigned int vec_vpopcnt (vector int); 41500 vector short vec_vpopcnt (vector short); 41501 vector unsigned short vec_vpopcnt (vector unsigned short); 41502 vector signed char vec_vpopcnt (vector signed char); 41503 vector unsigned char vec_vpopcnt (vector unsigned char); 41504 41505 vector signed char vec_vpopcntb (vector signed char); 41506 vector unsigned char vec_vpopcntb (vector unsigned char); 41507 41508 vector long long vec_vpopcntd (vector long long); 41509 vector unsigned long long vec_vpopcntd (vector unsigned long long); 41510 41511 vector short vec_vpopcnth (vector short); 41512 vector unsigned short vec_vpopcnth (vector unsigned short); 41513 41514 vector int vec_vpopcntw (vector int); 41515 vector unsigned int vec_vpopcntw (vector int); 41516 41517 vector long long vec_vrld (vector long long, vector unsigned long long); 41518 vector unsigned long long vec_vrld (vector unsigned long long, 41519 vector unsigned long long); 41520 41521 vector long long vec_vsld (vector long long, vector unsigned long long); 41522 vector long long vec_vsld (vector unsigned long long, 41523 vector unsigned long long); 41524 41525 vector long long vec_vsrad (vector long long, vector unsigned long long); 41526 vector unsigned long long vec_vsrad (vector unsigned long long, 41527 vector unsigned long long); 41528 41529 vector long long vec_vsrd (vector long long, vector unsigned long long); 41530 vector unsigned long long char vec_vsrd (vector unsigned long long, 41531 vector unsigned long long); 41532 41533 vector long long vec_vsubudm (vector long long, vector long long); 41534 vector long long vec_vsubudm (vector bool long long, vector long long); 41535 vector long long vec_vsubudm (vector long long, vector bool long long); 41536 vector unsigned long long vec_vsubudm (vector unsigned long long, 41537 vector unsigned long long); 41538 vector unsigned long long vec_vsubudm (vector bool long long, 41539 vector unsigned long long); 41540 vector unsigned long long vec_vsubudm (vector unsigned long long, 41541 vector bool long long); 41542 41543 vector long long vec_vupkhsw (vector int); 41544 vector unsigned long long vec_vupkhsw (vector unsigned int); 41545 41546 vector long long vec_vupklsw (vector int); 41547 vector unsigned long long vec_vupklsw (vector int); 41548 41549 If the ISA 2.07 additions to the vector/scalar (power8-vector) 41550instruction set is available, the following additional functions are 41551available for 64-bit targets. New vector types (VECTOR __INT128_T and 41552VECTOR __UINT128_T) are available to hold the __INT128_T and 41553__UINT128_T types to use these builtins. 41554 41555 The normal vector extract, and set operations work on VECTOR 41556__INT128_T and VECTOR __UINT128_T types, but the index value must be 0. 41557 41558 vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t); 41559 vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t); 41560 41561 vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t); 41562 vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t); 41563 41564 vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t, 41565 vector __int128_t); 41566 vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t, 41567 vector __uint128_t); 41568 41569 vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t, 41570 vector __int128_t); 41571 vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t, 41572 vector __uint128_t); 41573 41574 vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t, 41575 vector __int128_t); 41576 vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t, 41577 vector __uint128_t); 41578 41579 vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t, 41580 vector __int128_t); 41581 vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t, 41582 vector __uint128_t); 41583 41584 vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t); 41585 vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t); 41586 41587 __int128_t vec_vsubuqm (__int128_t, __int128_t); 41588 __uint128_t vec_vsubuqm (__uint128_t, __uint128_t); 41589 41590 vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t); 41591 int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t); 41592 int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t); 41593 int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t); 41594 int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t); 41595 vector __int128_t bcdsub (vector __int128_t, vector__int128_t); 41596 int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t); 41597 int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t); 41598 int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t); 41599 int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t); 41600 41601 If the cryptographic instructions are enabled (`-mcrypto' or 41602`-mcpu=power8'), the following builtins are enabled. 41603 41604 vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long); 41605 41606 vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long, 41607 vector unsigned long long); 41608 41609 vector unsigned long long __builtin_crypto_vcipherlast 41610 (vector unsigned long long, 41611 vector unsigned long long); 41612 41613 vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long, 41614 vector unsigned long long); 41615 41616 vector unsigned long long __builtin_crypto_vncipherlast 41617 (vector unsigned long long, 41618 vector unsigned long long); 41619 41620 vector unsigned char __builtin_crypto_vpermxor (vector unsigned char, 41621 vector unsigned char, 41622 vector unsigned char); 41623 41624 vector unsigned short __builtin_crypto_vpermxor (vector unsigned short, 41625 vector unsigned short, 41626 vector unsigned short); 41627 41628 vector unsigned int __builtin_crypto_vpermxor (vector unsigned int, 41629 vector unsigned int, 41630 vector unsigned int); 41631 41632 vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long, 41633 vector unsigned long long, 41634 vector unsigned long long); 41635 41636 vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char, 41637 vector unsigned char); 41638 41639 vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short, 41640 vector unsigned short); 41641 41642 vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int, 41643 vector unsigned int); 41644 41645 vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long, 41646 vector unsigned long long); 41647 41648 vector unsigned long long __builtin_crypto_vshasigmad 41649 (vector unsigned long long, int, int); 41650 41651 vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, 41652 int, int); 41653 41654 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and 41655__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant 41656integer that is 0 or 1. The third argument to these builtin functions 41657must be a constant integer in the range of 0 to 15. 41658 41659 41660File: 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 41661 416626.56.16 PowerPC Hardware Transactional Memory Built-in Functions 41663---------------------------------------------------------------- 41664 41665GCC provides two interfaces for accessing the Hardware Transactional 41666Memory (HTM) instructions available on some of the PowerPC family of 41667prcoessors (eg, POWER8). The two interfaces come in a low level 41668interface, consisting of built-in functions specific to PowerPC and a 41669higher level interface consisting of inline functions that are common 41670between PowerPC and S/390. 41671 416726.56.16.1 PowerPC HTM Low Level Built-in Functions 41673.................................................. 41674 41675The following low level built-in functions are available with `-mhtm' 41676or `-mcpu=CPU' where CPU is `power8' or later. They all generate the 41677machine instruction that is part of the name. 41678 41679 The HTM builtins (with the exception of `__builtin_tbegin') return the 41680full 4-bit condition register value set by their associated hardware 41681instruction. The header file `htmintrin.h' defines some macros that can 41682be used to decipher the return value. The `__builtin_tbegin' builtin 41683returns a simple true or false value depending on whether a transaction 41684was successfully started or not. The arguments of the builtins match 41685exactly the type and order of the associated hardware instruction's 41686operands, except for the `__builtin_tcheck' builtin, which does not 41687take any input arguments. Refer to the ISA manual for a description of 41688each instruction's operands. 41689 41690 unsigned int __builtin_tbegin (unsigned int) 41691 unsigned int __builtin_tend (unsigned int) 41692 41693 unsigned int __builtin_tabort (unsigned int) 41694 unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int) 41695 unsigned int __builtin_tabortdci (unsigned int, unsigned int, int) 41696 unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int) 41697 unsigned int __builtin_tabortwci (unsigned int, unsigned int, int) 41698 41699 unsigned int __builtin_tcheck (void) 41700 unsigned int __builtin_treclaim (unsigned int) 41701 unsigned int __builtin_trechkpt (void) 41702 unsigned int __builtin_tsr (unsigned int) 41703 41704 In addition to the above HTM built-ins, we have added built-ins for 41705some common extended mnemonics of the HTM instructions: 41706 41707 unsigned int __builtin_tendall (void) 41708 unsigned int __builtin_tresume (void) 41709 unsigned int __builtin_tsuspend (void) 41710 41711 The following set of built-in functions are available to gain access 41712to the HTM specific special purpose registers. 41713 41714 unsigned long __builtin_get_texasr (void) 41715 unsigned long __builtin_get_texasru (void) 41716 unsigned long __builtin_get_tfhar (void) 41717 unsigned long __builtin_get_tfiar (void) 41718 41719 void __builtin_set_texasr (unsigned long); 41720 void __builtin_set_texasru (unsigned long); 41721 void __builtin_set_tfhar (unsigned long); 41722 void __builtin_set_tfiar (unsigned long); 41723 41724 Example usage of these low level built-in functions may look like: 41725 41726 #include <htmintrin.h> 41727 41728 int num_retries = 10; 41729 41730 while (1) 41731 { 41732 if (__builtin_tbegin (0)) 41733 { 41734 /* Transaction State Initiated. */ 41735 if (is_locked (lock)) 41736 __builtin_tabort (0); 41737 ... transaction code... 41738 __builtin_tend (0); 41739 break; 41740 } 41741 else 41742 { 41743 /* Transaction State Failed. Use locks if the transaction 41744 failure is "persistent" or we've tried too many times. */ 41745 if (num_retries-- <= 0 41746 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ())) 41747 { 41748 acquire_lock (lock); 41749 ... non transactional fallback path... 41750 release_lock (lock); 41751 break; 41752 } 41753 } 41754 } 41755 41756 One final built-in function has been added that returns the value of 41757the 2-bit Transaction State field of the Machine Status Register (MSR) 41758as stored in `CR0'. 41759 41760 unsigned long __builtin_ttest (void) 41761 41762 This built-in can be used to determine the current transaction state 41763using the following code example: 41764 41765 #include <htmintrin.h> 41766 41767 unsigned char tx_state = _HTM_STATE (__builtin_ttest ()); 41768 41769 if (tx_state == _HTM_TRANSACTIONAL) 41770 { 41771 /* Code to use in transactional state. */ 41772 } 41773 else if (tx_state == _HTM_NONTRANSACTIONAL) 41774 { 41775 /* Code to use in non-transactional state. */ 41776 } 41777 else if (tx_state == _HTM_SUSPENDED) 41778 { 41779 /* Code to use in transaction suspended state. */ 41780 } 41781 417826.56.16.2 PowerPC HTM High Level Inline Functions 41783................................................. 41784 41785The following high level HTM interface is made available by including 41786`<htmxlintrin.h>' and using `-mhtm' or `-mcpu=CPU' where CPU is 41787`power8' or later. This interface is common between PowerPC and S/390, 41788allowing users to write one HTM source implementation that can be 41789compiled and executed on either system. 41790 41791 long __TM_simple_begin (void) 41792 long __TM_begin (void* const TM_buff) 41793 long __TM_end (void) 41794 void __TM_abort (void) 41795 void __TM_named_abort (unsigned char const code) 41796 void __TM_resume (void) 41797 void __TM_suspend (void) 41798 41799 long __TM_is_user_abort (void* const TM_buff) 41800 long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code) 41801 long __TM_is_illegal (void* const TM_buff) 41802 long __TM_is_footprint_exceeded (void* const TM_buff) 41803 long __TM_nesting_depth (void* const TM_buff) 41804 long __TM_is_nested_too_deep(void* const TM_buff) 41805 long __TM_is_conflict(void* const TM_buff) 41806 long __TM_is_failure_persistent(void* const TM_buff) 41807 long __TM_failure_address(void* const TM_buff) 41808 long long __TM_failure_code(void* const TM_buff) 41809 41810 Using these common set of HTM inline functions, we can create a more 41811portable version of the HTM example in the previous section that will 41812work on either PowerPC or S/390: 41813 41814 #include <htmxlintrin.h> 41815 41816 int num_retries = 10; 41817 TM_buff_type TM_buff; 41818 41819 while (1) 41820 { 41821 if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED) 41822 { 41823 /* Transaction State Initiated. */ 41824 if (is_locked (lock)) 41825 __TM_abort (); 41826 ... transaction code... 41827 __TM_end (); 41828 break; 41829 } 41830 else 41831 { 41832 /* Transaction State Failed. Use locks if the transaction 41833 failure is "persistent" or we've tried too many times. */ 41834 if (num_retries-- <= 0 41835 || __TM_is_failure_persistent (TM_buff)) 41836 { 41837 acquire_lock (lock); 41838 ... non transactional fallback path... 41839 release_lock (lock); 41840 break; 41841 } 41842 } 41843 } 41844 41845 41846File: 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 41847 418486.56.17 RX Built-in Functions 41849----------------------------- 41850 41851GCC supports some of the RX instructions which cannot be expressed in 41852the C programming language via the use of built-in functions. The 41853following functions are supported: 41854 41855 -- Built-in Function: void __builtin_rx_brk (void) 41856 Generates the `brk' machine instruction. 41857 41858 -- Built-in Function: void __builtin_rx_clrpsw (int) 41859 Generates the `clrpsw' machine instruction to clear the specified 41860 bit in the processor status word. 41861 41862 -- Built-in Function: void __builtin_rx_int (int) 41863 Generates the `int' machine instruction to generate an interrupt 41864 with the specified value. 41865 41866 -- Built-in Function: void __builtin_rx_machi (int, int) 41867 Generates the `machi' machine instruction to add the result of 41868 multiplying the top 16 bits of the two arguments into the 41869 accumulator. 41870 41871 -- Built-in Function: void __builtin_rx_maclo (int, int) 41872 Generates the `maclo' machine instruction to add the result of 41873 multiplying the bottom 16 bits of the two arguments into the 41874 accumulator. 41875 41876 -- Built-in Function: void __builtin_rx_mulhi (int, int) 41877 Generates the `mulhi' machine instruction to place the result of 41878 multiplying the top 16 bits of the two arguments into the 41879 accumulator. 41880 41881 -- Built-in Function: void __builtin_rx_mullo (int, int) 41882 Generates the `mullo' machine instruction to place the result of 41883 multiplying the bottom 16 bits of the two arguments into the 41884 accumulator. 41885 41886 -- Built-in Function: int __builtin_rx_mvfachi (void) 41887 Generates the `mvfachi' machine instruction to read the top 32 41888 bits of the accumulator. 41889 41890 -- Built-in Function: int __builtin_rx_mvfacmi (void) 41891 Generates the `mvfacmi' machine instruction to read the middle 32 41892 bits of the accumulator. 41893 41894 -- Built-in Function: int __builtin_rx_mvfc (int) 41895 Generates the `mvfc' machine instruction which reads the control 41896 register specified in its argument and returns its value. 41897 41898 -- Built-in Function: void __builtin_rx_mvtachi (int) 41899 Generates the `mvtachi' machine instruction to set the top 32 bits 41900 of the accumulator. 41901 41902 -- Built-in Function: void __builtin_rx_mvtaclo (int) 41903 Generates the `mvtaclo' machine instruction to set the bottom 32 41904 bits of the accumulator. 41905 41906 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val) 41907 Generates the `mvtc' machine instruction which sets control 41908 register number `reg' to `val'. 41909 41910 -- Built-in Function: void __builtin_rx_mvtipl (int) 41911 Generates the `mvtipl' machine instruction set the interrupt 41912 priority level. 41913 41914 -- Built-in Function: void __builtin_rx_racw (int) 41915 Generates the `racw' machine instruction to round the accumulator 41916 according to the specified mode. 41917 41918 -- Built-in Function: int __builtin_rx_revw (int) 41919 Generates the `revw' machine instruction which swaps the bytes in 41920 the argument so that bits 0-7 now occupy bits 8-15 and vice versa, 41921 and also bits 16-23 occupy bits 24-31 and vice versa. 41922 41923 -- Built-in Function: void __builtin_rx_rmpa (void) 41924 Generates the `rmpa' machine instruction which initiates a 41925 repeated multiply and accumulate sequence. 41926 41927 -- Built-in Function: void __builtin_rx_round (float) 41928 Generates the `round' machine instruction which returns the 41929 floating-point argument rounded according to the current rounding 41930 mode set in the floating-point status word register. 41931 41932 -- Built-in Function: int __builtin_rx_sat (int) 41933 Generates the `sat' machine instruction which returns the 41934 saturated value of the argument. 41935 41936 -- Built-in Function: void __builtin_rx_setpsw (int) 41937 Generates the `setpsw' machine instruction to set the specified 41938 bit in the processor status word. 41939 41940 -- Built-in Function: void __builtin_rx_wait (void) 41941 Generates the `wait' machine instruction. 41942 41943 41944File: gcc.info, Node: S/390 System z Built-in Functions, Next: SH Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins 41945 419466.56.18 S/390 System z Built-in Functions 41947----------------------------------------- 41948 41949 -- Built-in Function: int __builtin_tbegin (void*) 41950 Generates the `tbegin' machine instruction starting a 41951 non-constraint hardware transaction. If the parameter is non-NULL 41952 the memory area is used to store the transaction diagnostic buffer 41953 and will be passed as first operand to `tbegin'. This buffer can 41954 be defined using the `struct __htm_tdb' C struct defined in 41955 `htmintrin.h' and must reside on a double-word boundary. The 41956 second tbegin operand is set to `0xff0c'. This enables 41957 save/restore of all GPRs and disables aborts for FPR and AR 41958 manipulations inside the transaction body. The condition code set 41959 by the tbegin instruction is returned as integer value. The tbegin 41960 instruction by definition overwrites the content of all FPRs. The 41961 compiler will generate code which saves and restores the FPRs. For 41962 soft-float code it is recommended to used the `*_nofloat' variant. 41963 In order to prevent a TDB from being written it is required to 41964 pass an constant zero value as parameter. Passing the zero value 41965 through a variable is not sufficient. Although modifications of 41966 access registers inside the transaction will not trigger an 41967 transaction abort it is not supported to actually modify them. 41968 Access registers do not get saved when entering a transaction. 41969 They will have undefined state when reaching the abort code. 41970 41971 Macros for the possible return codes of tbegin are defined in the 41972`htmintrin.h' header file: 41973 41974`_HTM_TBEGIN_STARTED' 41975 `tbegin' has been executed as part of normal processing. The 41976 transaction body is supposed to be executed. 41977 41978`_HTM_TBEGIN_INDETERMINATE' 41979 The transaction was aborted due to an indeterminate condition which 41980 might be persistent. 41981 41982`_HTM_TBEGIN_TRANSIENT' 41983 The transaction aborted due to a transient failure. The 41984 transaction should be re-executed in that case. 41985 41986`_HTM_TBEGIN_PERSISTENT' 41987 The transaction aborted due to a persistent failure. Re-execution 41988 under same circumstances will not be productive. 41989 41990 -- Macro: _HTM_FIRST_USER_ABORT_CODE 41991 The `_HTM_FIRST_USER_ABORT_CODE' defined in `htmintrin.h' 41992 specifies the first abort code which can be used for 41993 `__builtin_tabort'. Values below this threshold are reserved for 41994 machine use. 41995 41996 -- Data type: struct __htm_tdb 41997 The `struct __htm_tdb' defined in `htmintrin.h' describes the 41998 structure of the transaction diagnostic block as specified in the 41999 Principles of Operation manual chapter 5-91. 42000 42001 -- Built-in Function: int __builtin_tbegin_nofloat (void*) 42002 Same as `__builtin_tbegin' but without FPR saves and restores. 42003 Using this variant in code making use of FPRs will leave the FPRs 42004 in undefined state when entering the transaction abort handler 42005 code. 42006 42007 -- Built-in Function: int __builtin_tbegin_retry (void*, int) 42008 In addition to `__builtin_tbegin' a loop for transient failures is 42009 generated. If tbegin returns a condition code of 2 the transaction 42010 will be retried as often as specified in the second argument. The 42011 perform processor assist instruction is used to tell the CPU about 42012 the number of fails so far. 42013 42014 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int) 42015 Same as `__builtin_tbegin_retry' but without FPR saves and 42016 restores. Using this variant in code making use of FPRs will leave 42017 the FPRs in undefined state when entering the transaction abort 42018 handler code. 42019 42020 -- Built-in Function: void __builtin_tbeginc (void) 42021 Generates the `tbeginc' machine instruction starting a constraint 42022 hardware transaction. The second operand is set to `0xff08'. 42023 42024 -- Built-in Function: int __builtin_tend (void) 42025 Generates the `tend' machine instruction finishing a transaction 42026 and making the changes visible to other threads. The condition 42027 code generated by tend is returned as integer value. 42028 42029 -- Built-in Function: void __builtin_tabort (int) 42030 Generates the `tabort' machine instruction with the specified 42031 abort code. Abort codes from 0 through 255 are reserved and will 42032 result in an error message. 42033 42034 -- Built-in Function: void __builtin_tx_assist (int) 42035 Generates the `ppa rX,rY,1' machine instruction. Where the 42036 integer parameter is loaded into rX and a value of zero is loaded 42037 into rY. The integer parameter specifies the number of times the 42038 transaction repeatedly aborted. 42039 42040 -- Built-in Function: int __builtin_tx_nesting_depth (void) 42041 Generates the `etnd' machine instruction. The current nesting 42042 depth is returned as integer value. For a nesting depth of 0 the 42043 code is not executed as part of an transaction. 42044 42045 -- Built-in Function: void __builtin_non_tx_store (uint64_t *, 42046 uint64_t) 42047 Generates the `ntstg' machine instruction. The second argument is 42048 written to the first arguments location. The store operation will 42049 not be rolled-back in case of an transaction abort. 42050 42051 42052File: gcc.info, Node: SH Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: S/390 System z Built-in Functions, Up: Target Builtins 42053 420546.56.19 SH Built-in Functions 42055----------------------------- 42056 42057The following built-in functions are supported on the SH1, SH2, SH3 and 42058SH4 families of processors: 42059 42060 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR) 42061 Sets the `GBR' register to the specified value PTR. This is 42062 usually used by system code that manages threads and execution 42063 contexts. The compiler normally does not generate code that 42064 modifies the contents of `GBR' and thus the value is preserved 42065 across function calls. Changing the `GBR' value in user code must 42066 be done with caution, since the compiler might use `GBR' in order 42067 to access thread local variables. 42068 42069 42070 -- Built-in Function: void * __builtin_thread_pointer (void) 42071 Returns the value that is currently set in the `GBR' register. 42072 Memory loads and stores that use the thread pointer as a base 42073 address are turned into `GBR' based displacement loads and stores, 42074 if possible. For example: 42075 struct my_tcb 42076 { 42077 int a, b, c, d, e; 42078 }; 42079 42080 int get_tcb_value (void) 42081 { 42082 // Generate `mov.l @(8,gbr),r0' instruction 42083 return ((my_tcb*)__builtin_thread_pointer ())->c; 42084 } 42085 42086 42087File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: SH Built-in Functions, Up: Target Builtins 42088 420896.56.20 SPARC VIS Built-in Functions 42090------------------------------------ 42091 42092GCC supports SIMD operations on the SPARC using both the generic vector 42093extensions (*note Vector Extensions::) as well as built-in functions for 42094the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 42095switch, the VIS extension is exposed as the following built-in 42096functions: 42097 42098 typedef int v1si __attribute__ ((vector_size (4))); 42099 typedef int v2si __attribute__ ((vector_size (8))); 42100 typedef short v4hi __attribute__ ((vector_size (8))); 42101 typedef short v2hi __attribute__ ((vector_size (4))); 42102 typedef unsigned char v8qi __attribute__ ((vector_size (8))); 42103 typedef unsigned char v4qi __attribute__ ((vector_size (4))); 42104 42105 void __builtin_vis_write_gsr (int64_t); 42106 int64_t __builtin_vis_read_gsr (void); 42107 42108 void * __builtin_vis_alignaddr (void *, long); 42109 void * __builtin_vis_alignaddrl (void *, long); 42110 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 42111 v2si __builtin_vis_faligndatav2si (v2si, v2si); 42112 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 42113 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 42114 42115 v4hi __builtin_vis_fexpand (v4qi); 42116 42117 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 42118 v4hi __builtin_vis_fmul8x16au (v4qi, v2hi); 42119 v4hi __builtin_vis_fmul8x16al (v4qi, v2hi); 42120 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 42121 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 42122 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 42123 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 42124 42125 v4qi __builtin_vis_fpack16 (v4hi); 42126 v8qi __builtin_vis_fpack32 (v2si, v8qi); 42127 v2hi __builtin_vis_fpackfix (v2si); 42128 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 42129 42130 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 42131 42132 long __builtin_vis_edge8 (void *, void *); 42133 long __builtin_vis_edge8l (void *, void *); 42134 long __builtin_vis_edge16 (void *, void *); 42135 long __builtin_vis_edge16l (void *, void *); 42136 long __builtin_vis_edge32 (void *, void *); 42137 long __builtin_vis_edge32l (void *, void *); 42138 42139 long __builtin_vis_fcmple16 (v4hi, v4hi); 42140 long __builtin_vis_fcmple32 (v2si, v2si); 42141 long __builtin_vis_fcmpne16 (v4hi, v4hi); 42142 long __builtin_vis_fcmpne32 (v2si, v2si); 42143 long __builtin_vis_fcmpgt16 (v4hi, v4hi); 42144 long __builtin_vis_fcmpgt32 (v2si, v2si); 42145 long __builtin_vis_fcmpeq16 (v4hi, v4hi); 42146 long __builtin_vis_fcmpeq32 (v2si, v2si); 42147 42148 v4hi __builtin_vis_fpadd16 (v4hi, v4hi); 42149 v2hi __builtin_vis_fpadd16s (v2hi, v2hi); 42150 v2si __builtin_vis_fpadd32 (v2si, v2si); 42151 v1si __builtin_vis_fpadd32s (v1si, v1si); 42152 v4hi __builtin_vis_fpsub16 (v4hi, v4hi); 42153 v2hi __builtin_vis_fpsub16s (v2hi, v2hi); 42154 v2si __builtin_vis_fpsub32 (v2si, v2si); 42155 v1si __builtin_vis_fpsub32s (v1si, v1si); 42156 42157 long __builtin_vis_array8 (long, long); 42158 long __builtin_vis_array16 (long, long); 42159 long __builtin_vis_array32 (long, long); 42160 42161 When you use the `-mvis2' switch, the VIS version 2.0 built-in 42162functions also become available: 42163 42164 long __builtin_vis_bmask (long, long); 42165 int64_t __builtin_vis_bshuffledi (int64_t, int64_t); 42166 v2si __builtin_vis_bshufflev2si (v2si, v2si); 42167 v4hi __builtin_vis_bshufflev2si (v4hi, v4hi); 42168 v8qi __builtin_vis_bshufflev2si (v8qi, v8qi); 42169 42170 long __builtin_vis_edge8n (void *, void *); 42171 long __builtin_vis_edge8ln (void *, void *); 42172 long __builtin_vis_edge16n (void *, void *); 42173 long __builtin_vis_edge16ln (void *, void *); 42174 long __builtin_vis_edge32n (void *, void *); 42175 long __builtin_vis_edge32ln (void *, void *); 42176 42177 When you use the `-mvis3' switch, the VIS version 3.0 built-in 42178functions also become available: 42179 42180 void __builtin_vis_cmask8 (long); 42181 void __builtin_vis_cmask16 (long); 42182 void __builtin_vis_cmask32 (long); 42183 42184 v4hi __builtin_vis_fchksm16 (v4hi, v4hi); 42185 42186 v4hi __builtin_vis_fsll16 (v4hi, v4hi); 42187 v4hi __builtin_vis_fslas16 (v4hi, v4hi); 42188 v4hi __builtin_vis_fsrl16 (v4hi, v4hi); 42189 v4hi __builtin_vis_fsra16 (v4hi, v4hi); 42190 v2si __builtin_vis_fsll16 (v2si, v2si); 42191 v2si __builtin_vis_fslas16 (v2si, v2si); 42192 v2si __builtin_vis_fsrl16 (v2si, v2si); 42193 v2si __builtin_vis_fsra16 (v2si, v2si); 42194 42195 long __builtin_vis_pdistn (v8qi, v8qi); 42196 42197 v4hi __builtin_vis_fmean16 (v4hi, v4hi); 42198 42199 int64_t __builtin_vis_fpadd64 (int64_t, int64_t); 42200 int64_t __builtin_vis_fpsub64 (int64_t, int64_t); 42201 42202 v4hi __builtin_vis_fpadds16 (v4hi, v4hi); 42203 v2hi __builtin_vis_fpadds16s (v2hi, v2hi); 42204 v4hi __builtin_vis_fpsubs16 (v4hi, v4hi); 42205 v2hi __builtin_vis_fpsubs16s (v2hi, v2hi); 42206 v2si __builtin_vis_fpadds32 (v2si, v2si); 42207 v1si __builtin_vis_fpadds32s (v1si, v1si); 42208 v2si __builtin_vis_fpsubs32 (v2si, v2si); 42209 v1si __builtin_vis_fpsubs32s (v1si, v1si); 42210 42211 long __builtin_vis_fucmple8 (v8qi, v8qi); 42212 long __builtin_vis_fucmpne8 (v8qi, v8qi); 42213 long __builtin_vis_fucmpgt8 (v8qi, v8qi); 42214 long __builtin_vis_fucmpeq8 (v8qi, v8qi); 42215 42216 float __builtin_vis_fhadds (float, float); 42217 double __builtin_vis_fhaddd (double, double); 42218 float __builtin_vis_fhsubs (float, float); 42219 double __builtin_vis_fhsubd (double, double); 42220 float __builtin_vis_fnhadds (float, float); 42221 double __builtin_vis_fnhaddd (double, double); 42222 42223 int64_t __builtin_vis_umulxhi (int64_t, int64_t); 42224 int64_t __builtin_vis_xmulx (int64_t, int64_t); 42225 int64_t __builtin_vis_xmulxhi (int64_t, int64_t); 42226 42227 42228File: gcc.info, Node: SPU Built-in Functions, Next: TI C6X Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 42229 422306.56.21 SPU Built-in Functions 42231------------------------------ 42232 42233GCC provides extensions for the SPU processor as described in the 42234Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 42235found at `http://cell.scei.co.jp/' or 42236`http://www.ibm.com/developerworks/power/cell/'. GCC's implementation 42237differs in several ways. 42238 42239 * The optional extension of specifying vector constants in 42240 parentheses is not supported. 42241 42242 * A vector initializer requires no cast if the vector constant is of 42243 the same type as the variable it is initializing. 42244 42245 * If `signed' or `unsigned' is omitted, the signedness of the vector 42246 type is the default signedness of the base type. The default 42247 varies depending on the operating system, so a portable program 42248 should always specify the signedness. 42249 42250 * By default, the keyword `__vector' is added. The macro `vector' is 42251 defined in `<spu_intrinsics.h>' and can be undefined. 42252 42253 * GCC allows using a `typedef' name as the type specifier for a 42254 vector type. 42255 42256 * For C, overloaded functions are implemented with macros so the 42257 following does not work: 42258 42259 spu_add ((vector signed int){1, 2, 3, 4}, foo); 42260 42261 Since `spu_add' is a macro, the vector constant in the example is 42262 treated as four separate arguments. Wrap the entire argument in 42263 parentheses for this to work. 42264 42265 * The extended version of `__builtin_expect' is not supported. 42266 42267 42268 _Note:_ Only the interface described in the aforementioned 42269specification is supported. Internally, GCC uses built-in functions to 42270implement the required functionality, but these are not supported and 42271are subject to change without notice. 42272 42273 42274File: gcc.info, Node: TI C6X Built-in Functions, Next: TILE-Gx Built-in Functions, Prev: SPU Built-in Functions, Up: Target Builtins 42275 422766.56.22 TI C6X Built-in Functions 42277--------------------------------- 42278 42279GCC provides intrinsics to access certain instructions of the TI C6X 42280processors. These intrinsics, listed below, are available after 42281inclusion of the `c6x_intrinsics.h' header file. They map directly to 42282C6X instructions. 42283 42284 42285 int _sadd (int, int) 42286 int _ssub (int, int) 42287 int _sadd2 (int, int) 42288 int _ssub2 (int, int) 42289 long long _mpy2 (int, int) 42290 long long _smpy2 (int, int) 42291 int _add4 (int, int) 42292 int _sub4 (int, int) 42293 int _saddu4 (int, int) 42294 42295 int _smpy (int, int) 42296 int _smpyh (int, int) 42297 int _smpyhl (int, int) 42298 int _smpylh (int, int) 42299 42300 int _sshl (int, int) 42301 int _subc (int, int) 42302 42303 int _avg2 (int, int) 42304 int _avgu4 (int, int) 42305 42306 int _clrr (int, int) 42307 int _extr (int, int) 42308 int _extru (int, int) 42309 int _abs (int) 42310 int _abs2 (int) 42311 42312 42313File: gcc.info, Node: TILE-Gx Built-in Functions, Next: TILEPro Built-in Functions, Prev: TI C6X Built-in Functions, Up: Target Builtins 42314 423156.56.23 TILE-Gx Built-in Functions 42316---------------------------------- 42317 42318GCC provides intrinsics to access every instruction of the TILE-Gx 42319processor. The intrinsics are of the form: 42320 42321 42322 unsigned long long __insn_OP (...) 42323 42324 Where OP is the name of the instruction. Refer to the ISA manual for 42325the complete list of instructions. 42326 42327 GCC also provides intrinsics to directly access the network registers. 42328The intrinsics are: 42329 42330 42331 unsigned long long __tile_idn0_receive (void) 42332 unsigned long long __tile_idn1_receive (void) 42333 unsigned long long __tile_udn0_receive (void) 42334 unsigned long long __tile_udn1_receive (void) 42335 unsigned long long __tile_udn2_receive (void) 42336 unsigned long long __tile_udn3_receive (void) 42337 void __tile_idn_send (unsigned long long) 42338 void __tile_udn_send (unsigned long long) 42339 42340 The intrinsic `void __tile_network_barrier (void)' is used to 42341guarantee that no network operations before it are reordered with those 42342after it. 42343 42344 42345File: gcc.info, Node: TILEPro Built-in Functions, Prev: TILE-Gx Built-in Functions, Up: Target Builtins 42346 423476.56.24 TILEPro Built-in Functions 42348---------------------------------- 42349 42350GCC provides intrinsics to access every instruction of the TILEPro 42351processor. The intrinsics are of the form: 42352 42353 42354 unsigned __insn_OP (...) 42355 42356where OP is the name of the instruction. Refer to the ISA manual for 42357the complete list of instructions. 42358 42359 GCC also provides intrinsics to directly access the network registers. 42360The intrinsics are: 42361 42362 42363 unsigned __tile_idn0_receive (void) 42364 unsigned __tile_idn1_receive (void) 42365 unsigned __tile_sn_receive (void) 42366 unsigned __tile_udn0_receive (void) 42367 unsigned __tile_udn1_receive (void) 42368 unsigned __tile_udn2_receive (void) 42369 unsigned __tile_udn3_receive (void) 42370 void __tile_idn_send (unsigned) 42371 void __tile_sn_send (unsigned) 42372 void __tile_udn_send (unsigned) 42373 42374 The intrinsic `void __tile_network_barrier (void)' is used to 42375guarantee that no network operations before it are reordered with those 42376after it. 42377 42378 42379File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 42380 423816.57 Format Checks Specific to Particular Target Machines 42382========================================================= 42383 42384For some target machines, GCC supports additional options to the format 42385attribute (*note Declaring Attributes of Functions: Function 42386Attributes.). 42387 42388* Menu: 42389 42390* Solaris Format Checks:: 42391* Darwin Format Checks:: 42392 42393 42394File: gcc.info, Node: Solaris Format Checks, Next: Darwin Format Checks, Up: Target Format Checks 42395 423966.57.1 Solaris Format Checks 42397---------------------------- 42398 42399Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 42400`cmn_err' accepts a subset of the standard `printf' conversions, and 42401the two-argument `%b' conversion for displaying bit-fields. See the 42402Solaris man page for `cmn_err' for more information. 42403 42404 42405File: gcc.info, Node: Darwin Format Checks, Prev: Solaris Format Checks, Up: Target Format Checks 42406 424076.57.2 Darwin Format Checks 42408--------------------------- 42409 42410Darwin targets support the `CFString' (or `__CFString__') in the format 42411attribute context. Declarations made with such attribution are parsed 42412for correct syntax and format argument types. However, parsing of the 42413format string itself is currently undefined and is not carried out by 42414this version of the compiler. 42415 42416 Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers) 42417may also be used as format arguments. Note that the relevant headers 42418are only likely to be available on Darwin (OSX) installations. On such 42419installations, the XCode and system documentation provide descriptions 42420of `CFString', `CFStringRefs' and associated functions. 42421 42422 42423File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 42424 424256.58 Pragmas Accepted by GCC 42426============================ 42427 42428GCC supports several types of pragmas, primarily in order to compile 42429code originally written for other compilers. Note that in general we 42430do not recommend the use of pragmas; *Note Function Attributes::, for 42431further explanation. 42432 42433* Menu: 42434 42435* ARM Pragmas:: 42436* M32C Pragmas:: 42437* MeP Pragmas:: 42438* RS/6000 and PowerPC Pragmas:: 42439* Darwin Pragmas:: 42440* Solaris Pragmas:: 42441* Symbol-Renaming Pragmas:: 42442* Structure-Packing Pragmas:: 42443* Weak Pragmas:: 42444* Diagnostic Pragmas:: 42445* Visibility Pragmas:: 42446* Push/Pop Macro Pragmas:: 42447* Function Specific Option Pragmas:: 42448 42449 42450File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 42451 424526.58.1 ARM Pragmas 42453------------------ 42454 42455The ARM target defines pragmas for controlling the default addition of 42456`long_call' and `short_call' attributes to functions. *Note Function 42457Attributes::, for information about the effects of these attributes. 42458 42459`long_calls' 42460 Set all subsequent functions to have the `long_call' attribute. 42461 42462`no_long_calls' 42463 Set all subsequent functions to have the `short_call' attribute. 42464 42465`long_calls_off' 42466 Do not affect the `long_call' or `short_call' attributes of 42467 subsequent functions. 42468 42469 42470File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas 42471 424726.58.2 M32C Pragmas 42473------------------- 42474 42475`GCC memregs NUMBER' 42476 Overrides the command-line option `-memregs=' for the current 42477 file. Use with care! This pragma must be before any function in 42478 the file, and mixing different memregs values in different objects 42479 may make them incompatible. This pragma is useful when a 42480 performance-critical function uses a memreg for temporary values, 42481 as it may allow you to reduce the number of memregs used. 42482 42483`ADDRESS NAME ADDRESS' 42484 For any declared symbols matching NAME, this does three things to 42485 that symbol: it forces the symbol to be located at the given 42486 address (a number), it forces the symbol to be volatile, and it 42487 changes the symbol's scope to be static. This pragma exists for 42488 compatibility with other compilers, but note that the common 42489 `1234H' numeric syntax is not supported (use `0x1234' instead). 42490 Example: 42491 42492 #pragma ADDRESS port3 0x103 42493 char port3; 42494 42495 42496 42497File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas 42498 424996.58.3 MeP Pragmas 42500------------------ 42501 42502`custom io_volatile (on|off)' 42503 Overrides the command-line option `-mio-volatile' for the current 42504 file. Note that for compatibility with future GCC releases, this 42505 option should only be used once before any `io' variables in each 42506 file. 42507 42508`GCC coprocessor available REGISTERS' 42509 Specifies which coprocessor registers are available to the register 42510 allocator. REGISTERS may be a single register, register range 42511 separated by ellipses, or comma-separated list of those. Example: 42512 42513 #pragma GCC coprocessor available $c0...$c10, $c28 42514 42515`GCC coprocessor call_saved REGISTERS' 42516 Specifies which coprocessor registers are to be saved and restored 42517 by any function using them. REGISTERS may be a single register, 42518 register range separated by ellipses, or comma-separated list of 42519 those. Example: 42520 42521 #pragma GCC coprocessor call_saved $c4...$c6, $c31 42522 42523`GCC coprocessor subclass '(A|B|C|D)' = REGISTERS' 42524 Creates and defines a register class. These register classes can 42525 be used by inline `asm' constructs. REGISTERS may be a single 42526 register, register range separated by ellipses, or comma-separated 42527 list of those. Example: 42528 42529 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6 42530 42531 asm ("cpfoo %0" : "=B" (x)); 42532 42533`GCC disinterrupt NAME , NAME ...' 42534 For the named functions, the compiler adds code to disable 42535 interrupts for the duration of those functions. If any functions 42536 so named are not encountered in the source, a warning is emitted 42537 that the pragma is not used. Examples: 42538 42539 #pragma disinterrupt foo 42540 #pragma disinterrupt bar, grill 42541 int foo () { ... } 42542 42543`GCC call NAME , NAME ...' 42544 For the named functions, the compiler always uses a 42545 register-indirect call model when calling the named functions. 42546 Examples: 42547 42548 extern int foo (); 42549 #pragma call foo 42550 42551 42552 42553File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas 42554 425556.58.4 RS/6000 and PowerPC Pragmas 42556---------------------------------- 42557 42558The RS/6000 and PowerPC targets define one pragma for controlling 42559whether or not the `longcall' attribute is added to function 42560declarations by default. This pragma overrides the `-mlongcall' 42561option, but not the `longcall' and `shortcall' attributes. *Note 42562RS/6000 and PowerPC Options::, for more information about when long 42563calls are and are not necessary. 42564 42565`longcall (1)' 42566 Apply the `longcall' attribute to all subsequent function 42567 declarations. 42568 42569`longcall (0)' 42570 Do not apply the `longcall' attribute to subsequent function 42571 declarations. 42572 42573 42574File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 42575 425766.58.5 Darwin Pragmas 42577--------------------- 42578 42579The following pragmas are available for all architectures running the 42580Darwin operating system. These are useful for compatibility with other 42581Mac OS compilers. 42582 42583`mark TOKENS...' 42584 This pragma is accepted, but has no effect. 42585 42586`options align=ALIGNMENT' 42587 This pragma sets the alignment of fields in structures. The 42588 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 42589 `power', to emulate PowerPC alignment. Uses of this pragma nest 42590 properly; to restore the previous setting, use `reset' for the 42591 ALIGNMENT. 42592 42593`segment TOKENS...' 42594 This pragma is accepted, but has no effect. 42595 42596`unused (VAR [, VAR]...)' 42597 This pragma declares variables to be possibly unused. GCC does not 42598 produce warnings for the listed variables. The effect is similar 42599 to that of the `unused' attribute, except that this pragma may 42600 appear anywhere within the variables' scopes. 42601 42602 42603File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 42604 426056.58.6 Solaris Pragmas 42606---------------------- 42607 42608The Solaris target supports `#pragma redefine_extname' (*note 42609Symbol-Renaming Pragmas::). It also supports additional `#pragma' 42610directives for compatibility with the system compiler. 42611 42612`align ALIGNMENT (VARIABLE [, VARIABLE]...)' 42613 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 42614 This is the same as GCC's `aligned' attribute *note Variable 42615 Attributes::). Macro expansion occurs on the arguments to this 42616 pragma when compiling C and Objective-C. It does not currently 42617 occur when compiling C++, but this is a bug which may be fixed in 42618 a future release. 42619 42620`fini (FUNCTION [, FUNCTION]...)' 42621 This pragma causes each listed FUNCTION to be called after main, 42622 or during shared module unloading, by adding a call to the `.fini' 42623 section. 42624 42625`init (FUNCTION [, FUNCTION]...)' 42626 This pragma causes each listed FUNCTION to be called during 42627 initialization (before `main') or during shared module loading, by 42628 adding a call to the `.init' section. 42629 42630 42631 42632File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 42633 426346.58.7 Symbol-Renaming Pragmas 42635------------------------------ 42636 42637For compatibility with the Solaris system headers, GCC supports two 42638`#pragma' directives that change the name used in assembly for a given 42639declaration. To get this effect on all platforms supported by GCC, use 42640the asm labels extension (*note Asm Labels::). 42641 42642`redefine_extname OLDNAME NEWNAME' 42643 This pragma gives the C function OLDNAME the assembly symbol 42644 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' is 42645 defined if this pragma is available (currently on all platforms). 42646 42647 This pragma and the asm labels extension interact in a complicated 42648manner. Here are some corner cases you may want to be aware of. 42649 42650 1. Both pragmas silently apply only to declarations with external 42651 linkage. Asm labels do not have this restriction. 42652 42653 2. In C++, both pragmas silently apply only to declarations with "C" 42654 linkage. Again, asm labels do not have this restriction. 42655 42656 3. If any of the three ways of changing the assembly name of a 42657 declaration is applied to a declaration whose assembly name has 42658 already been determined (either by a previous use of one of these 42659 features, or because the compiler needed the assembly name in 42660 order to generate code), and the new name is different, a warning 42661 issues and the name does not change. 42662 42663 4. The OLDNAME used by `#pragma redefine_extname' is always the 42664 C-language name. 42665 42666 42667File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 42668 426696.58.8 Structure-Packing Pragmas 42670-------------------------------- 42671 42672For compatibility with Microsoft Windows compilers, GCC supports a set 42673of `#pragma' directives that change the maximum alignment of members of 42674structures (other than zero-width bit-fields), unions, and classes 42675subsequently defined. The N value below always is required to be a 42676small power of two and specifies the new alignment in bytes. 42677 42678 1. `#pragma pack(N)' simply sets the new alignment. 42679 42680 2. `#pragma pack()' sets the alignment to the one that was in effect 42681 when compilation started (see also command-line option 42682 `-fpack-struct[=N]' *note Code Gen Options::). 42683 42684 3. `#pragma pack(push[,N])' pushes the current alignment setting on 42685 an internal stack and then optionally sets the new alignment. 42686 42687 4. `#pragma pack(pop)' restores the alignment setting to the one 42688 saved at the top of the internal stack (and removes that stack 42689 entry). Note that `#pragma pack([N])' does not influence this 42690 internal stack; thus it is possible to have `#pragma pack(push)' 42691 followed by multiple `#pragma pack(N)' instances and finalized by 42692 a single `#pragma pack(pop)'. 42693 42694 Some targets, e.g. i386 and PowerPC, support the `ms_struct' `#pragma' 42695which lays out a structure as the documented `__attribute__ 42696((ms_struct))'. 42697 1. `#pragma ms_struct on' turns on the layout for structures declared. 42698 42699 2. `#pragma ms_struct off' turns off the layout for structures 42700 declared. 42701 42702 3. `#pragma ms_struct reset' goes back to the default layout. 42703 42704 42705File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 42706 427076.58.9 Weak Pragmas 42708------------------- 42709 42710For compatibility with SVR4, GCC supports a set of `#pragma' directives 42711for declaring symbols to be weak, and defining weak aliases. 42712 42713`#pragma weak SYMBOL' 42714 This pragma declares SYMBOL to be weak, as if the declaration had 42715 the attribute of the same name. The pragma may appear before or 42716 after the declaration of SYMBOL. It is not an error for SYMBOL to 42717 never be defined at all. 42718 42719`#pragma weak SYMBOL1 = SYMBOL2' 42720 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 42721 an error if SYMBOL2 is not defined in the current translation unit. 42722 42723 42724File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 42725 427266.58.10 Diagnostic Pragmas 42727-------------------------- 42728 42729GCC allows the user to selectively enable or disable certain types of 42730diagnostics, and change the kind of the diagnostic. For example, a 42731project's policy might require that all sources compile with `-Werror' 42732but certain files might have exceptions allowing specific types of 42733warnings. Or, a project might selectively enable diagnostics and treat 42734them as errors depending on which preprocessor macros are defined. 42735 42736`#pragma GCC diagnostic KIND OPTION' 42737 Modifies the disposition of a diagnostic. Note that not all 42738 diagnostics are modifiable; at the moment only warnings (normally 42739 controlled by `-W...') can be controlled, and not all of them. 42740 Use `-fdiagnostics-show-option' to determine which diagnostics are 42741 controllable and which option controls them. 42742 42743 KIND is `error' to treat this diagnostic as an error, `warning' to 42744 treat it like a warning (even if `-Werror' is in effect), or 42745 `ignored' if the diagnostic is to be ignored. OPTION is a double 42746 quoted string that matches the command-line option. 42747 42748 #pragma GCC diagnostic warning "-Wformat" 42749 #pragma GCC diagnostic error "-Wformat" 42750 #pragma GCC diagnostic ignored "-Wformat" 42751 42752 Note that these pragmas override any command-line options. GCC 42753 keeps track of the location of each pragma, and issues diagnostics 42754 according to the state as of that point in the source file. Thus, 42755 pragmas occurring after a line do not affect diagnostics caused by 42756 that line. 42757 42758`#pragma GCC diagnostic push' 42759`#pragma GCC diagnostic pop' 42760 Causes GCC to remember the state of the diagnostics as of each 42761 `push', and restore to that point at each `pop'. If a `pop' has 42762 no matching `push', the command-line options are restored. 42763 42764 #pragma GCC diagnostic error "-Wuninitialized" 42765 foo(a); /* error is given for this one */ 42766 #pragma GCC diagnostic push 42767 #pragma GCC diagnostic ignored "-Wuninitialized" 42768 foo(b); /* no diagnostic for this one */ 42769 #pragma GCC diagnostic pop 42770 foo(c); /* error is given for this one */ 42771 #pragma GCC diagnostic pop 42772 foo(d); /* depends on command-line options */ 42773 42774 42775 GCC also offers a simple mechanism for printing messages during 42776compilation. 42777 42778`#pragma message STRING' 42779 Prints STRING as a compiler message on compilation. The message 42780 is informational only, and is neither a compilation warning nor an 42781 error. 42782 42783 #pragma message "Compiling " __FILE__ "..." 42784 42785 STRING may be parenthesized, and is printed with location 42786 information. For example, 42787 42788 #define DO_PRAGMA(x) _Pragma (#x) 42789 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 42790 42791 TODO(Remember to fix this) 42792 42793 prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to 42794 fix this'. 42795 42796 42797 42798File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 42799 428006.58.11 Visibility Pragmas 42801-------------------------- 42802 42803`#pragma GCC visibility push(VISIBILITY)' 42804`#pragma GCC visibility pop' 42805 This pragma allows the user to set the visibility for multiple 42806 declarations without having to give each a visibility attribute 42807 *Note Function Attributes::, for more information about visibility 42808 and the attribute syntax. 42809 42810 In C++, `#pragma GCC visibility' affects only namespace-scope 42811 declarations. Class members and template specializations are not 42812 affected; if you want to override the visibility for a particular 42813 member or instantiation, you must use an attribute. 42814 42815 42816 42817File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 42818 428196.58.12 Push/Pop Macro Pragmas 42820------------------------------ 42821 42822For compatibility with Microsoft Windows compilers, GCC supports 42823`#pragma push_macro("MACRO_NAME")' and `#pragma 42824pop_macro("MACRO_NAME")'. 42825 42826`#pragma push_macro("MACRO_NAME")' 42827 This pragma saves the value of the macro named as MACRO_NAME to 42828 the top of the stack for this macro. 42829 42830`#pragma pop_macro("MACRO_NAME")' 42831 This pragma sets the value of the macro named as MACRO_NAME to the 42832 value on top of the stack for this macro. If the stack for 42833 MACRO_NAME is empty, the value of the macro remains unchanged. 42834 42835 For example: 42836 42837 #define X 1 42838 #pragma push_macro("X") 42839 #undef X 42840 #define X -1 42841 #pragma pop_macro("X") 42842 int x [X]; 42843 42844In this example, the definition of X as 1 is saved by `#pragma 42845push_macro' and restored by `#pragma pop_macro'. 42846 42847 42848File: gcc.info, Node: Function Specific Option Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 42849 428506.58.13 Function Specific Option Pragmas 42851---------------------------------------- 42852 42853`#pragma GCC target ("STRING"...)' 42854 This pragma allows you to set target specific options for functions 42855 defined later in the source file. One or more strings can be 42856 specified. Each function that is defined after this point is as 42857 if `attribute((target("STRING")))' was specified for that 42858 function. The parenthesis around the options is optional. *Note 42859 Function Attributes::, for more information about the `target' 42860 attribute and the attribute syntax. 42861 42862 The `#pragma GCC target' attribute is not implemented in GCC 42863 versions earlier than 4.4 for the i386/x86_64 and 4.6 for the 42864 PowerPC back ends. At present, it is not implemented for other 42865 back ends. 42866 42867`#pragma GCC optimize ("STRING"...)' 42868 This pragma allows you to set global optimization options for 42869 functions defined later in the source file. One or more strings 42870 can be specified. Each function that is defined after this point 42871 is as if `attribute((optimize("STRING")))' was specified for that 42872 function. The parenthesis around the options is optional. *Note 42873 Function Attributes::, for more information about the `optimize' 42874 attribute and the attribute syntax. 42875 42876 The `#pragma GCC optimize' pragma is not implemented in GCC 42877 versions earlier than 4.4. 42878 42879`#pragma GCC push_options' 42880`#pragma GCC pop_options' 42881 These pragmas maintain a stack of the current target and 42882 optimization options. It is intended for include files where you 42883 temporarily want to switch to using a different `#pragma GCC 42884 target' or `#pragma GCC optimize' and then to pop back to the 42885 previous options. 42886 42887 The `#pragma GCC push_options' and `#pragma GCC pop_options' 42888 pragmas are not implemented in GCC versions earlier than 4.4. 42889 42890`#pragma GCC reset_options' 42891 This pragma clears the current `#pragma GCC target' and `#pragma 42892 GCC optimize' to use the default switches as specified on the 42893 command line. 42894 42895 The `#pragma GCC reset_options' pragma is not implemented in GCC 42896 versions earlier than 4.4. 42897 42898 42899File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 42900 429016.59 Unnamed struct/union fields within structs/unions 42902====================================================== 42903 42904As permitted by ISO C11 and for compatibility with other compilers, GCC 42905allows you to define a structure or union that contains, as fields, 42906structures and unions without names. For example: 42907 42908 struct { 42909 int a; 42910 union { 42911 int b; 42912 float c; 42913 }; 42914 int d; 42915 } foo; 42916 42917In this example, you are able to access members of the unnamed union 42918with code like `foo.b'. Note that only unnamed structs and unions are 42919allowed, you may not have, for example, an unnamed `int'. 42920 42921 You must never create such structures that cause ambiguous field 42922definitions. For example, in this structure: 42923 42924 struct { 42925 int a; 42926 struct { 42927 int a; 42928 }; 42929 } foo; 42930 42931it is ambiguous which `a' is being referred to with `foo.a'. The 42932compiler gives errors for such constructs. 42933 42934 Unless `-fms-extensions' is used, the unnamed field must be a 42935structure or union definition without a tag (for example, `struct { int 42936a; };'). If `-fms-extensions' is used, the field may also be a 42937definition with a tag such as `struct foo { int a; };', a reference to 42938a previously defined structure or union such as `struct foo;', or a 42939reference to a `typedef' name for a previously defined structure or 42940union type. 42941 42942 The option `-fplan9-extensions' enables `-fms-extensions' as well as 42943two other extensions. First, a pointer to a structure is automatically 42944converted to a pointer to an anonymous field for assignments and 42945function calls. For example: 42946 42947 struct s1 { int a; }; 42948 struct s2 { struct s1; }; 42949 extern void f1 (struct s1 *); 42950 void f2 (struct s2 *p) { f1 (p); } 42951 42952In the call to `f1' inside `f2', the pointer `p' is converted into a 42953pointer to the anonymous field. 42954 42955 Second, when the type of an anonymous field is a `typedef' for a 42956`struct' or `union', code may refer to the field using the name of the 42957`typedef'. 42958 42959 typedef struct { int a; } s1; 42960 struct s2 { s1; }; 42961 s1 f1 (struct s2 *p) { return p->s1; } 42962 42963 These usages are only permitted when they are not ambiguous. 42964 42965 42966File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 42967 429686.60 Thread-Local Storage 42969========================= 42970 42971Thread-local storage (TLS) is a mechanism by which variables are 42972allocated such that there is one instance of the variable per extant 42973thread. The runtime model GCC uses to implement this originates in the 42974IA-64 processor-specific ABI, but has since been migrated to other 42975processors as well. It requires significant support from the linker 42976(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 42977`libpthread.so'), so it is not available everywhere. 42978 42979 At the user level, the extension is visible with a new storage class 42980keyword: `__thread'. For example: 42981 42982 __thread int i; 42983 extern __thread struct state s; 42984 static __thread char *p; 42985 42986 The `__thread' specifier may be used alone, with the `extern' or 42987`static' specifiers, but with no other storage class specifier. When 42988used with `extern' or `static', `__thread' must appear immediately 42989after the other storage class specifier. 42990 42991 The `__thread' specifier may be applied to any global, file-scoped 42992static, function-scoped static, or static data member of a class. It 42993may not be applied to block-scoped automatic or non-static data member. 42994 42995 When the address-of operator is applied to a thread-local variable, it 42996is evaluated at run time and returns the address of the current thread's 42997instance of that variable. An address so obtained may be used by any 42998thread. When a thread terminates, any pointers to thread-local 42999variables in that thread become invalid. 43000 43001 No static initialization may refer to the address of a thread-local 43002variable. 43003 43004 In C++, if an initializer is present for a thread-local variable, it 43005must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 43006standard. 43007 43008 See ELF Handling For Thread-Local Storage 43009(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of 43010the four thread-local storage addressing models, and how the runtime is 43011expected to function. 43012 43013* Menu: 43014 43015* C99 Thread-Local Edits:: 43016* C++98 Thread-Local Edits:: 43017 43018 43019File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 43020 430216.60.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 43022------------------------------------------------------- 43023 43024The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 43025document the exact semantics of the language extension. 43026 43027 * `5.1.2 Execution environments' 43028 43029 Add new text after paragraph 1 43030 43031 Within either execution environment, a "thread" is a flow of 43032 control within a program. It is implementation defined 43033 whether or not there may be more than one thread associated 43034 with a program. It is implementation defined how threads 43035 beyond the first are created, the name and type of the 43036 function called at thread startup, and how threads may be 43037 terminated. However, objects with thread storage duration 43038 shall be initialized before thread startup. 43039 43040 * `6.2.4 Storage durations of objects' 43041 43042 Add new text before paragraph 3 43043 43044 An object whose identifier is declared with the storage-class 43045 specifier `__thread' has "thread storage duration". Its 43046 lifetime is the entire execution of the thread, and its 43047 stored value is initialized only once, prior to thread 43048 startup. 43049 43050 * `6.4.1 Keywords' 43051 43052 Add `__thread'. 43053 43054 * `6.7.1 Storage-class specifiers' 43055 43056 Add `__thread' to the list of storage class specifiers in 43057 paragraph 1. 43058 43059 Change paragraph 2 to 43060 43061 With the exception of `__thread', at most one storage-class 43062 specifier may be given [...]. The `__thread' specifier may 43063 be used alone, or immediately following `extern' or `static'. 43064 43065 Add new text after paragraph 6 43066 43067 The declaration of an identifier for a variable that has 43068 block scope that specifies `__thread' shall also specify 43069 either `extern' or `static'. 43070 43071 The `__thread' specifier shall be used only with variables. 43072 43073 43074File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 43075 430766.60.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 43077-------------------------------------------------------- 43078 43079The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 43080that document the exact semantics of the language extension. 43081 43082 * [intro.execution] 43083 43084 New text after paragraph 4 43085 43086 A "thread" is a flow of control within the abstract machine. 43087 It is implementation defined whether or not there may be more 43088 than one thread. 43089 43090 New text after paragraph 7 43091 43092 It is unspecified whether additional action must be taken to 43093 ensure when and whether side effects are visible to other 43094 threads. 43095 43096 * [lex.key] 43097 43098 Add `__thread'. 43099 43100 * [basic.start.main] 43101 43102 Add after paragraph 5 43103 43104 The thread that begins execution at the `main' function is 43105 called the "main thread". It is implementation defined how 43106 functions beginning threads other than the main thread are 43107 designated or typed. A function so designated, as well as 43108 the `main' function, is called a "thread startup function". 43109 It is implementation defined what happens if a thread startup 43110 function returns. It is implementation defined what happens 43111 to other threads when any thread calls `exit'. 43112 43113 * [basic.start.init] 43114 43115 Add after paragraph 4 43116 43117 The storage for an object of thread storage duration shall be 43118 statically initialized before the first statement of the 43119 thread startup function. An object of thread storage 43120 duration shall not require dynamic initialization. 43121 43122 * [basic.start.term] 43123 43124 Add after paragraph 3 43125 43126 The type of an object with thread storage duration shall not 43127 have a non-trivial destructor, nor shall it be an array type 43128 whose elements (directly or indirectly) have non-trivial 43129 destructors. 43130 43131 * [basic.stc] 43132 43133 Add "thread storage duration" to the list in paragraph 1. 43134 43135 Change paragraph 2 43136 43137 Thread, static, and automatic storage durations are 43138 associated with objects introduced by declarations [...]. 43139 43140 Add `__thread' to the list of specifiers in paragraph 3. 43141 43142 * [basic.stc.thread] 43143 43144 New section before [basic.stc.static] 43145 43146 The keyword `__thread' applied to a non-local object gives the 43147 object thread storage duration. 43148 43149 A local variable or class data member declared both `static' 43150 and `__thread' gives the variable or member thread storage 43151 duration. 43152 43153 * [basic.stc.static] 43154 43155 Change paragraph 1 43156 43157 All objects that have neither thread storage duration, dynamic 43158 storage duration nor are local [...]. 43159 43160 * [dcl.stc] 43161 43162 Add `__thread' to the list in paragraph 1. 43163 43164 Change paragraph 1 43165 43166 With the exception of `__thread', at most one 43167 STORAGE-CLASS-SPECIFIER shall appear in a given 43168 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 43169 alone, or immediately following the `extern' or `static' 43170 specifiers. [...] 43171 43172 Add after paragraph 5 43173 43174 The `__thread' specifier can be applied only to the names of 43175 objects and to anonymous unions. 43176 43177 * [class.mem] 43178 43179 Add after paragraph 6 43180 43181 Non-`static' members shall not be `__thread'. 43182 43183 43184File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 43185 431866.61 Binary constants using the `0b' prefix 43187=========================================== 43188 43189Integer constants can be written as binary constants, consisting of a 43190sequence of `0' and `1' digits, prefixed by `0b' or `0B'. This is 43191particularly useful in environments that operate a lot on the bit level 43192(like microcontrollers). 43193 43194 The following statements are identical: 43195 43196 i = 42; 43197 i = 0x2a; 43198 i = 052; 43199 i = 0b101010; 43200 43201 The type of these constants follows the same rules as for octal or 43202hexadecimal integer constants, so suffixes like `L' or `UL' can be 43203applied. 43204 43205 43206File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 43207 432087 Extensions to the C++ Language 43209******************************** 43210 43211The GNU compiler provides these extensions to the C++ language (and you 43212can also use most of the C language extensions in your C++ programs). 43213If you want to write code that checks whether these features are 43214available, you can test for the GNU compiler the same way as for C 43215programs: check for a predefined macro `__GNUC__'. You can also use 43216`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 43217(cpp)Common Predefined Macros.). 43218 43219* Menu: 43220 43221* C++ Volatiles:: What constitutes an access to a volatile object. 43222* Restricted Pointers:: C99 restricted pointers and references. 43223* Vague Linkage:: Where G++ puts inlines, vtables and such. 43224* C++ Interface:: You can use a single C++ header file for both 43225 declarations and definitions. 43226* Template Instantiation:: Methods for ensuring that exactly one copy of 43227 each needed template instantiation is emitted. 43228* Bound member functions:: You can extract a function pointer to the 43229 method denoted by a `->*' or `.*' expression. 43230* C++ Attributes:: Variable, function, and type attributes for C++ only. 43231* Function Multiversioning:: Declaring multiple function versions. 43232* Namespace Association:: Strong using-directives for namespace association. 43233* Type Traits:: Compiler support for type traits 43234* Java Exceptions:: Tweaking exception handling to work with Java. 43235* Deprecated Features:: Things will disappear from G++. 43236* Backwards Compatibility:: Compatibilities with earlier definitions of C++. 43237 43238 43239File: gcc.info, Node: C++ Volatiles, Next: Restricted Pointers, Up: C++ Extensions 43240 432417.1 When is a Volatile C++ Object Accessed? 43242=========================================== 43243 43244The C++ standard differs from the C standard in its treatment of 43245volatile objects. It fails to specify what constitutes a volatile 43246access, except to say that C++ should behave in a similar manner to C 43247with respect to volatiles, where possible. However, the different 43248lvalueness of expressions between C and C++ complicate the behavior. 43249G++ behaves the same as GCC for volatile access, *Note Volatiles: C 43250Extensions, for a description of GCC's behavior. 43251 43252 The C and C++ language specifications differ when an object is 43253accessed in a void context: 43254 43255 volatile int *src = SOMEVALUE; 43256 *src; 43257 43258 The C++ standard specifies that such expressions do not undergo lvalue 43259to rvalue conversion, and that the type of the dereferenced object may 43260be incomplete. The C++ standard does not specify explicitly that it is 43261lvalue to rvalue conversion that is responsible for causing an access. 43262There is reason to believe that it is, because otherwise certain simple 43263expressions become undefined. However, because it would surprise most 43264programmers, G++ treats dereferencing a pointer to volatile object of 43265complete type as GCC would do for an equivalent type in C. When the 43266object has incomplete type, G++ issues a warning; if you wish to force 43267an error, you must force a conversion to rvalue with, for instance, a 43268static cast. 43269 43270 When using a reference to volatile, G++ does not treat equivalent 43271expressions as accesses to volatiles, but instead issues a warning that 43272no volatile is accessed. The rationale for this is that otherwise it 43273becomes difficult to determine where volatile access occur, and not 43274possible to ignore the return value from functions returning volatile 43275references. Again, if you wish to force a read, cast the reference to 43276an rvalue. 43277 43278 G++ implements the same behavior as GCC does when assigning to a 43279volatile object--there is no reread of the assigned-to object, the 43280assigned rvalue is reused. Note that in C++ assignment expressions are 43281lvalues, and if used as an lvalue, the volatile object is referred to. 43282For instance, VREF refers to VOBJ, as expected, in the following 43283example: 43284 43285 volatile int vobj; 43286 volatile int &vref = vobj = SOMETHING; 43287 43288 43289File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: C++ Volatiles, Up: C++ Extensions 43290 432917.2 Restricting Pointer Aliasing 43292================================ 43293 43294As with the C front end, G++ understands the C99 feature of restricted 43295pointers, specified with the `__restrict__', or `__restrict' type 43296qualifier. Because you cannot compile C++ by specifying the `-std=c99' 43297language flag, `restrict' is not a keyword in C++. 43298 43299 In addition to allowing restricted pointers, you can specify restricted 43300references, which indicate that the reference is not aliased in the 43301local context. 43302 43303 void fn (int *__restrict__ rptr, int &__restrict__ rref) 43304 { 43305 /* ... */ 43306 } 43307 43308In the body of `fn', RPTR points to an unaliased integer and RREF 43309refers to a (different) unaliased integer. 43310 43311 You may also specify whether a member function's THIS pointer is 43312unaliased by using `__restrict__' as a member function qualifier. 43313 43314 void T::fn () __restrict__ 43315 { 43316 /* ... */ 43317 } 43318 43319Within the body of `T::fn', THIS has the effective definition `T 43320*__restrict__ const this'. Notice that the interpretation of a 43321`__restrict__' member function qualifier is different to that of 43322`const' or `volatile' qualifier, in that it is applied to the pointer 43323rather than the object. This is consistent with other compilers that 43324implement restricted pointers. 43325 43326 As with all outermost parameter qualifiers, `__restrict__' is ignored 43327in function definition matching. This means you only need to specify 43328`__restrict__' in a function definition, rather than in a function 43329prototype as well. 43330 43331 43332File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 43333 433347.3 Vague Linkage 43335================= 43336 43337There are several constructs in C++ that require space in the object 43338file but are not clearly tied to a single translation unit. We say that 43339these constructs have "vague linkage". Typically such constructs are 43340emitted wherever they are needed, though sometimes we can be more 43341clever. 43342 43343Inline Functions 43344 Inline functions are typically defined in a header file which can 43345 be included in many different compilations. Hopefully they can 43346 usually be inlined, but sometimes an out-of-line copy is 43347 necessary, if the address of the function is taken or if inlining 43348 fails. In general, we emit an out-of-line copy in all translation 43349 units where one is needed. As an exception, we only emit inline 43350 virtual functions with the vtable, since it always requires a copy. 43351 43352 Local static variables and string constants used in an inline 43353 function are also considered to have vague linkage, since they 43354 must be shared between all inlined and out-of-line instances of 43355 the function. 43356 43357VTables 43358 C++ virtual functions are implemented in most compilers using a 43359 lookup table, known as a vtable. The vtable contains pointers to 43360 the virtual functions provided by a class, and each object of the 43361 class contains a pointer to its vtable (or vtables, in some 43362 multiple-inheritance situations). If the class declares any 43363 non-inline, non-pure virtual functions, the first one is chosen as 43364 the "key method" for the class, and the vtable is only emitted in 43365 the translation unit where the key method is defined. 43366 43367 _Note:_ If the chosen key method is later defined as inline, the 43368 vtable is still emitted in every translation unit that defines it. 43369 Make sure that any inline virtuals are declared inline in the class 43370 body, even if they are not defined there. 43371 43372`type_info' objects 43373 C++ requires information about types to be written out in order to 43374 implement `dynamic_cast', `typeid' and exception handling. For 43375 polymorphic classes (classes with virtual functions), the 43376 `type_info' object is written out along with the vtable so that 43377 `dynamic_cast' can determine the dynamic type of a class object at 43378 run time. For all other types, we write out the `type_info' 43379 object when it is used: when applying `typeid' to an expression, 43380 throwing an object, or referring to a type in a catch clause or 43381 exception specification. 43382 43383Template Instantiations 43384 Most everything in this section also applies to template 43385 instantiations, but there are other options as well. *Note 43386 Where's the Template?: Template Instantiation. 43387 43388 43389 When used with GNU ld version 2.8 or later on an ELF system such as 43390GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 43391these constructs will be discarded at link time. This is known as 43392COMDAT support. 43393 43394 On targets that don't support COMDAT, but do support weak symbols, GCC 43395uses them. This way one copy overrides all the others, but the unused 43396copies still take up space in the executable. 43397 43398 For targets that do not support either COMDAT or weak symbols, most 43399entities with vague linkage are emitted as local symbols to avoid 43400duplicate definition errors from the linker. This does not happen for 43401local statics in inlines, however, as having multiple copies almost 43402certainly breaks things. 43403 43404 *Note Declarations and Definitions in One Header: C++ Interface, for 43405another way to control placement of these constructs. 43406 43407 43408File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 43409 434107.4 #pragma interface and implementation 43411======================================== 43412 43413`#pragma interface' and `#pragma implementation' provide the user with 43414a way of explicitly directing the compiler to emit entities with vague 43415linkage (and debugging information) in a particular translation unit. 43416 43417 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 43418cases, because of COMDAT support and the "key method" heuristic 43419mentioned in *note Vague Linkage::. Using them can actually cause your 43420program to grow due to unnecessary out-of-line copies of inline 43421functions. Currently (3.4) the only benefit of these `#pragma's is 43422reduced duplication of debugging information, and that should be 43423addressed soon on DWARF 2 targets with the use of COMDAT groups. 43424 43425`#pragma interface' 43426`#pragma interface "SUBDIR/OBJECTS.h"' 43427 Use this directive in _header files_ that define object classes, 43428 to save space in most of the object files that use those classes. 43429 Normally, local copies of certain information (backup copies of 43430 inline member functions, debugging information, and the internal 43431 tables that implement virtual functions) must be kept in each 43432 object file that includes class definitions. You can use this 43433 pragma to avoid such duplication. When a header file containing 43434 `#pragma interface' is included in a compilation, this auxiliary 43435 information is not generated (unless the main input source file 43436 itself uses `#pragma implementation'). Instead, the object files 43437 contain references to be resolved at link time. 43438 43439 The second form of this directive is useful for the case where you 43440 have multiple headers with the same name in different directories. 43441 If you use this form, you must specify the same string to `#pragma 43442 implementation'. 43443 43444`#pragma implementation' 43445`#pragma implementation "OBJECTS.h"' 43446 Use this pragma in a _main input file_, when you want full output 43447 from included header files to be generated (and made globally 43448 visible). The included header file, in turn, should use `#pragma 43449 interface'. Backup copies of inline member functions, debugging 43450 information, and the internal tables used to implement virtual 43451 functions are all generated in implementation files. 43452 43453 If you use `#pragma implementation' with no argument, it applies to 43454 an include file with the same basename(1) as your source file. 43455 For example, in `allclass.cc', giving just `#pragma implementation' 43456 by itself is equivalent to `#pragma implementation "allclass.h"'. 43457 43458 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 43459 an implementation file whenever you would include it from 43460 `allclass.cc' even if you never specified `#pragma 43461 implementation'. This was deemed to be more trouble than it was 43462 worth, however, and disabled. 43463 43464 Use the string argument if you want a single implementation file to 43465 include code from multiple header files. (You must also use 43466 `#include' to include the header file; `#pragma implementation' 43467 only specifies how to use the file--it doesn't actually include 43468 it.) 43469 43470 There is no way to split up the contents of a single header file 43471 into multiple implementation files. 43472 43473 `#pragma implementation' and `#pragma interface' also have an effect 43474on function inlining. 43475 43476 If you define a class in a header file marked with `#pragma 43477interface', the effect on an inline function defined in that class is 43478similar to an explicit `extern' declaration--the compiler emits no code 43479at all to define an independent version of the function. Its 43480definition is used only for inlining with its callers. 43481 43482 Conversely, when you include the same header file in a main source file 43483that declares it as `#pragma implementation', the compiler emits code 43484for the function itself; this defines a version of the function that 43485can be found via pointers (or by callers compiled without inlining). 43486If all calls to the function can be inlined, you can avoid emitting the 43487function by compiling with `-fno-implement-inlines'. If any calls are 43488not inlined, you will get linker errors. 43489 43490 ---------- Footnotes ---------- 43491 43492 (1) A file's "basename" is the name stripped of all leading path 43493information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 43494 43495 43496File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 43497 434987.5 Where's the Template? 43499========================= 43500 43501C++ templates are the first language feature to require more 43502intelligence from the environment than one usually finds on a UNIX 43503system. Somehow the compiler and linker have to make sure that each 43504template instance occurs exactly once in the executable if it is needed, 43505and not at all otherwise. There are two basic approaches to this 43506problem, which are referred to as the Borland model and the Cfront 43507model. 43508 43509Borland model 43510 Borland C++ solved the template instantiation problem by adding 43511 the code equivalent of common blocks to their linker; the compiler 43512 emits template instances in each translation unit that uses them, 43513 and the linker collapses them together. The advantage of this 43514 model is that the linker only has to consider the object files 43515 themselves; there is no external complexity to worry about. This 43516 disadvantage is that compilation time is increased because the 43517 template code is being compiled repeatedly. Code written for this 43518 model tends to include definitions of all templates in the header 43519 file, since they must be seen to be instantiated. 43520 43521Cfront model 43522 The AT&T C++ translator, Cfront, solved the template instantiation 43523 problem by creating the notion of a template repository, an 43524 automatically maintained place where template instances are 43525 stored. A more modern version of the repository works as follows: 43526 As individual object files are built, the compiler places any 43527 template definitions and instantiations encountered in the 43528 repository. At link time, the link wrapper adds in the objects in 43529 the repository and compiles any needed instances that were not 43530 previously emitted. The advantages of this model are more optimal 43531 compilation speed and the ability to use the system linker; to 43532 implement the Borland model a compiler vendor also needs to 43533 replace the linker. The disadvantages are vastly increased 43534 complexity, and thus potential for error; for some code this can be 43535 just as transparent, but in practice it can been very difficult to 43536 build multiple programs in one directory and one program in 43537 multiple directories. Code written for this model tends to 43538 separate definitions of non-inline member templates into a 43539 separate file, which should be compiled separately. 43540 43541 When used with GNU ld version 2.8 or later on an ELF system such as 43542GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 43543Borland model. On other systems, G++ implements neither automatic 43544model. 43545 43546 You have the following options for dealing with template 43547instantiations: 43548 43549 1. Compile your template-using code with `-frepo'. The compiler 43550 generates files with the extension `.rpo' listing all of the 43551 template instantiations used in the corresponding object files that 43552 could be instantiated there; the link wrapper, `collect2', then 43553 updates the `.rpo' files to tell the compiler where to place those 43554 instantiations and rebuild any affected object files. The 43555 link-time overhead is negligible after the first pass, as the 43556 compiler continues to place the instantiations in the same files. 43557 43558 This is your best option for application code written for the 43559 Borland model, as it just works. Code written for the Cfront model 43560 needs to be modified so that the template definitions are 43561 available at one or more points of instantiation; usually this is 43562 as simple as adding `#include <tmethods.cc>' to the end of each 43563 template header. 43564 43565 For library code, if you want the library to provide all of the 43566 template instantiations it needs, just try to link all of its 43567 object files together; the link will fail, but cause the 43568 instantiations to be generated as a side effect. Be warned, 43569 however, that this may cause conflicts if multiple libraries try 43570 to provide the same instantiations. For greater control, use 43571 explicit instantiation as described in the next option. 43572 43573 2. Compile your code with `-fno-implicit-templates' to disable the 43574 implicit generation of template instances, and explicitly 43575 instantiate all the ones you use. This approach requires more 43576 knowledge of exactly which instances you need than do the others, 43577 but it's less mysterious and allows greater control. You can 43578 scatter the explicit instantiations throughout your program, 43579 perhaps putting them in the translation units where the instances 43580 are used or the translation units that define the templates 43581 themselves; you can put all of the explicit instantiations you 43582 need into one big file; or you can create small files like 43583 43584 #include "Foo.h" 43585 #include "Foo.cc" 43586 43587 template class Foo<int>; 43588 template ostream& operator << 43589 (ostream&, const Foo<int>&); 43590 43591 for each of the instances you need, and create a template 43592 instantiation library from those. 43593 43594 If you are using Cfront-model code, you can probably get away with 43595 not using `-fno-implicit-templates' when compiling files that don't 43596 `#include' the member template definitions. 43597 43598 If you use one big file to do the instantiations, you may want to 43599 compile it without `-fno-implicit-templates' so you get all of the 43600 instances required by your explicit instantiations (but not by any 43601 other files) without having to specify them as well. 43602 43603 The ISO C++ 2011 standard allows forward declaration of explicit 43604 instantiations (with `extern'). G++ supports explicit instantiation 43605 declarations in C++98 mode and has extended the template 43606 instantiation syntax to support instantiation of the compiler 43607 support data for a template class (i.e. the vtable) without 43608 instantiating any of its members (with `inline'), and 43609 instantiation of only the static data members of a template class, 43610 without the support data or member functions (with (`static'): 43611 43612 extern template int max (int, int); 43613 inline template class Foo<int>; 43614 static template class Foo<int>; 43615 43616 3. Do nothing. Pretend G++ does implement automatic instantiation 43617 management. Code written for the Borland model works fine, but 43618 each translation unit contains instances of each of the templates 43619 it uses. In a large program, this can lead to an unacceptable 43620 amount of code duplication. 43621 43622 43623File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 43624 436257.6 Extracting the function pointer from a bound pointer to member function 43626=========================================================================== 43627 43628In C++, pointer to member functions (PMFs) are implemented using a wide 43629pointer of sorts to handle all the possible call mechanisms; the PMF 43630needs to store information about how to adjust the `this' pointer, and 43631if the function pointed to is virtual, where to find the vtable, and 43632where in the vtable to look for the member function. If you are using 43633PMFs in an inner loop, you should really reconsider that decision. If 43634that is not an option, you can extract the pointer to the function that 43635would be called for a given object/PMF pair and call it directly inside 43636the inner loop, to save a bit of time. 43637 43638 Note that you still pay the penalty for the call through a function 43639pointer; on most modern architectures, such a call defeats the branch 43640prediction features of the CPU. This is also true of normal virtual 43641function calls. 43642 43643 The syntax for this extension is 43644 43645 extern A a; 43646 extern int (A::*fp)(); 43647 typedef int (*fptr)(A *); 43648 43649 fptr p = (fptr)(a.*fp); 43650 43651 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 43652object is needed to obtain the address of the function. They can be 43653converted to function pointers directly: 43654 43655 fptr p1 = (fptr)(&A::foo); 43656 43657 You must specify `-Wno-pmf-conversions' to use this extension. 43658 43659 43660File: gcc.info, Node: C++ Attributes, Next: Function Multiversioning, Prev: Bound member functions, Up: C++ Extensions 43661 436627.7 C++-Specific Variable, Function, and Type Attributes 43663======================================================== 43664 43665Some attributes only make sense for C++ programs. 43666 43667`abi_tag ("TAG", ...)' 43668 The `abi_tag' attribute can be applied to a function or class 43669 declaration. It modifies the mangled name of the function or 43670 class to incorporate the tag name, in order to distinguish the 43671 function or class from an earlier version with a different ABI; 43672 perhaps the class has changed size, or the function has a 43673 different return type that is not encoded in the mangled name. 43674 43675 The argument can be a list of strings of arbitrary length. The 43676 strings are sorted on output, so the order of the list is 43677 unimportant. 43678 43679 A redeclaration of a function or class must not add new ABI tags, 43680 since doing so would change the mangled name. 43681 43682 The `-Wabi-tag' flag enables a warning about a class which does 43683 not have all the ABI tags used by its subobjects and virtual 43684 functions; for users with code that needs to coexist with an 43685 earlier ABI, using this option can help to find all affected types 43686 that need to be tagged. 43687 43688`init_priority (PRIORITY)' 43689 In Standard C++, objects defined at namespace scope are guaranteed 43690 to be initialized in an order in strict accordance with that of 43691 their definitions _in a given translation unit_. No guarantee is 43692 made for initializations across translation units. However, GNU 43693 C++ allows users to control the order of initialization of objects 43694 defined at namespace scope with the `init_priority' attribute by 43695 specifying a relative PRIORITY, a constant integral expression 43696 currently bounded between 101 and 65535 inclusive. Lower numbers 43697 indicate a higher priority. 43698 43699 In the following example, `A' would normally be created before 43700 `B', but the `init_priority' attribute reverses that order: 43701 43702 Some_Class A __attribute__ ((init_priority (2000))); 43703 Some_Class B __attribute__ ((init_priority (543))); 43704 43705 Note that the particular values of PRIORITY do not matter; only 43706 their relative ordering. 43707 43708`java_interface' 43709 This type attribute informs C++ that the class is a Java 43710 interface. It may only be applied to classes declared within an 43711 `extern "Java"' block. Calls to methods declared in this 43712 interface are dispatched using GCJ's interface table mechanism, 43713 instead of regular virtual table dispatch. 43714 43715 43716 See also *note Namespace Association::. 43717 43718 43719File: gcc.info, Node: Function Multiversioning, Next: Namespace Association, Prev: C++ Attributes, Up: C++ Extensions 43720 437217.8 Function Multiversioning 43722============================ 43723 43724With the GNU C++ front end, for target i386, you may specify multiple 43725versions of a function, where each function is specialized for a 43726specific target feature. At runtime, the appropriate version of the 43727function is automatically executed depending on the characteristics of 43728the execution platform. Here is an example. 43729 43730 __attribute__ ((target ("default"))) 43731 int foo () 43732 { 43733 // The default version of foo. 43734 return 0; 43735 } 43736 43737 __attribute__ ((target ("sse4.2"))) 43738 int foo () 43739 { 43740 // foo version for SSE4.2 43741 return 1; 43742 } 43743 43744 __attribute__ ((target ("arch=atom"))) 43745 int foo () 43746 { 43747 // foo version for the Intel ATOM processor 43748 return 2; 43749 } 43750 43751 __attribute__ ((target ("arch=amdfam10"))) 43752 int foo () 43753 { 43754 // foo version for the AMD Family 0x10 processors. 43755 return 3; 43756 } 43757 43758 int main () 43759 { 43760 int (*p)() = &foo; 43761 assert ((*p) () == foo ()); 43762 return 0; 43763 } 43764 43765 In the above example, four versions of function foo are created. The 43766first version of foo with the target attribute "default" is the default 43767version. This version gets executed when no other target specific 43768version qualifies for execution on a particular platform. A new version 43769of foo is created by using the same function signature but with a 43770different target string. Function foo is called or a pointer to it is 43771taken just like a regular function. GCC takes care of doing the 43772dispatching to call the right version at runtime. Refer to the GCC 43773wiki on Function Multiversioning 43774(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details. 43775 43776 43777File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: Function Multiversioning, Up: C++ Extensions 43778 437797.9 Namespace Association 43780========================= 43781 43782*Caution:* The semantics of this extension are equivalent to C++ 2011 43783inline namespaces. Users should use inline namespaces instead as this 43784extension will be removed in future versions of G++. 43785 43786 A using-directive with `__attribute ((strong))' is stronger than a 43787normal using-directive in two ways: 43788 43789 * Templates from the used namespace can be specialized and explicitly 43790 instantiated as though they were members of the using namespace. 43791 43792 * The using namespace is considered an associated namespace of all 43793 templates in the used namespace for purposes of argument-dependent 43794 name lookup. 43795 43796 The used namespace must be nested within the using namespace so that 43797normal unqualified lookup works properly. 43798 43799 This is useful for composing a namespace transparently from 43800implementation namespaces. For example: 43801 43802 namespace std { 43803 namespace debug { 43804 template <class T> struct A { }; 43805 } 43806 using namespace debug __attribute ((__strong__)); 43807 template <> struct A<int> { }; // ok to specialize 43808 43809 template <class T> void f (A<T>); 43810 } 43811 43812 int main() 43813 { 43814 f (std::A<float>()); // lookup finds std::f 43815 f (std::A<int>()); 43816 } 43817 43818 43819File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 43820 438217.10 Type Traits 43822================ 43823 43824The C++ front end implements syntactic extensions that allow 43825compile-time determination of various characteristics of a type (or of a 43826pair of types). 43827 43828`__has_nothrow_assign (type)' 43829 If `type' is const qualified or is a reference type then the trait 43830 is false. Otherwise if `__has_trivial_assign (type)' is true then 43831 the trait is true, else if `type' is a cv class or union type with 43832 copy assignment operators that are known not to throw an exception 43833 then the trait is true, else it is false. Requires: `type' shall 43834 be a complete type, (possibly cv-qualified) `void', or an array of 43835 unknown bound. 43836 43837`__has_nothrow_copy (type)' 43838 If `__has_trivial_copy (type)' is true then the trait is true, 43839 else if `type' is a cv class or union type with copy constructors 43840 that are known not to throw an exception then the trait is true, 43841 else it is false. Requires: `type' shall be a complete type, 43842 (possibly cv-qualified) `void', or an array of unknown bound. 43843 43844`__has_nothrow_constructor (type)' 43845 If `__has_trivial_constructor (type)' is true then the trait is 43846 true, else if `type' is a cv class or union type (or array 43847 thereof) with a default constructor that is known not to throw an 43848 exception then the trait is true, else it is false. Requires: 43849 `type' shall be a complete type, (possibly cv-qualified) `void', 43850 or an array of unknown bound. 43851 43852`__has_trivial_assign (type)' 43853 If `type' is const qualified or is a reference type then the trait 43854 is false. Otherwise if `__is_pod (type)' is true then the trait is 43855 true, else if `type' is a cv class or union type with a trivial 43856 copy assignment ([class.copy]) then the trait is true, else it is 43857 false. Requires: `type' shall be a complete type, (possibly 43858 cv-qualified) `void', or an array of unknown bound. 43859 43860`__has_trivial_copy (type)' 43861 If `__is_pod (type)' is true or `type' is a reference type then 43862 the trait is true, else if `type' is a cv class or union type with 43863 a trivial copy constructor ([class.copy]) then the trait is true, 43864 else it is false. Requires: `type' shall be a complete type, 43865 (possibly cv-qualified) `void', or an array of unknown bound. 43866 43867`__has_trivial_constructor (type)' 43868 If `__is_pod (type)' is true then the trait is true, else if 43869 `type' is a cv class or union type (or array thereof) with a 43870 trivial default constructor ([class.ctor]) then the trait is true, 43871 else it is false. Requires: `type' shall be a complete type, 43872 (possibly cv-qualified) `void', or an array of unknown bound. 43873 43874`__has_trivial_destructor (type)' 43875 If `__is_pod (type)' is true or `type' is a reference type then 43876 the trait is true, else if `type' is a cv class or union type (or 43877 array thereof) with a trivial destructor ([class.dtor]) then the 43878 trait is true, else it is false. Requires: `type' shall be a 43879 complete type, (possibly cv-qualified) `void', or an array of 43880 unknown bound. 43881 43882`__has_virtual_destructor (type)' 43883 If `type' is a class type with a virtual destructor ([class.dtor]) 43884 then the trait is true, else it is false. Requires: `type' shall 43885 be a complete type, (possibly cv-qualified) `void', or an array of 43886 unknown bound. 43887 43888`__is_abstract (type)' 43889 If `type' is an abstract class ([class.abstract]) then the trait 43890 is true, else it is false. Requires: `type' shall be a complete 43891 type, (possibly cv-qualified) `void', or an array of unknown bound. 43892 43893`__is_base_of (base_type, derived_type)' 43894 If `base_type' is a base class of `derived_type' ([class.derived]) 43895 then the trait is true, otherwise it is false. Top-level cv 43896 qualifications of `base_type' and `derived_type' are ignored. For 43897 the purposes of this trait, a class type is considered is own 43898 base. Requires: if `__is_class (base_type)' and `__is_class 43899 (derived_type)' are true and `base_type' and `derived_type' are 43900 not the same type (disregarding cv-qualifiers), `derived_type' 43901 shall be a complete type. Diagnostic is produced if this 43902 requirement is not met. 43903 43904`__is_class (type)' 43905 If `type' is a cv class type, and not a union type 43906 ([basic.compound]) the trait is true, else it is false. 43907 43908`__is_empty (type)' 43909 If `__is_class (type)' is false then the trait is false. 43910 Otherwise `type' is considered empty if and only if: `type' has no 43911 non-static data members, or all non-static data members, if any, 43912 are bit-fields of length 0, and `type' has no virtual members, and 43913 `type' has no virtual base classes, and `type' has no base classes 43914 `base_type' for which `__is_empty (base_type)' is false. 43915 Requires: `type' shall be a complete type, (possibly cv-qualified) 43916 `void', or an array of unknown bound. 43917 43918`__is_enum (type)' 43919 If `type' is a cv enumeration type ([basic.compound]) the trait is 43920 true, else it is false. 43921 43922`__is_literal_type (type)' 43923 If `type' is a literal type ([basic.types]) the trait is true, 43924 else it is false. Requires: `type' shall be a complete type, 43925 (possibly cv-qualified) `void', or an array of unknown bound. 43926 43927`__is_pod (type)' 43928 If `type' is a cv POD type ([basic.types]) then the trait is true, 43929 else it is false. Requires: `type' shall be a complete type, 43930 (possibly cv-qualified) `void', or an array of unknown bound. 43931 43932`__is_polymorphic (type)' 43933 If `type' is a polymorphic class ([class.virtual]) then the trait 43934 is true, else it is false. Requires: `type' shall be a complete 43935 type, (possibly cv-qualified) `void', or an array of unknown bound. 43936 43937`__is_standard_layout (type)' 43938 If `type' is a standard-layout type ([basic.types]) the trait is 43939 true, else it is false. Requires: `type' shall be a complete 43940 type, (possibly cv-qualified) `void', or an array of unknown bound. 43941 43942`__is_trivial (type)' 43943 If `type' is a trivial type ([basic.types]) the trait is true, 43944 else it is false. Requires: `type' shall be a complete type, 43945 (possibly cv-qualified) `void', or an array of unknown bound. 43946 43947`__is_union (type)' 43948 If `type' is a cv union type ([basic.compound]) the trait is true, 43949 else it is false. 43950 43951`__underlying_type (type)' 43952 The underlying type of `type'. Requires: `type' shall be an 43953 enumeration type ([dcl.enum]). 43954 43955 43956 43957File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 43958 439597.11 Java Exceptions 43960==================== 43961 43962The Java language uses a slightly different exception handling model 43963from C++. Normally, GNU C++ automatically detects when you are writing 43964C++ code that uses Java exceptions, and handle them appropriately. 43965However, if C++ code only needs to execute destructors when Java 43966exceptions are thrown through it, GCC guesses incorrectly. Sample 43967problematic code is: 43968 43969 struct S { ~S(); }; 43970 extern void bar(); // is written in Java, and may throw exceptions 43971 void foo() 43972 { 43973 S s; 43974 bar(); 43975 } 43976 43977The usual effect of an incorrect guess is a link failure, complaining of 43978a missing routine called `__gxx_personality_v0'. 43979 43980 You can inform the compiler that Java exceptions are to be used in a 43981translation unit, irrespective of what it might think, by writing 43982`#pragma GCC java_exceptions' at the head of the file. This `#pragma' 43983must appear before any functions that throw or catch exceptions, or run 43984destructors when exceptions are thrown through them. 43985 43986 You cannot mix Java and C++ exceptions in the same translation unit. 43987It is believed to be safe to throw a C++ exception from one file through 43988another file compiled for the Java exception model, or vice versa, but 43989there may be bugs in this area. 43990 43991 43992File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 43993 439947.12 Deprecated Features 43995======================== 43996 43997In the past, the GNU C++ compiler was extended to experiment with new 43998features, at a time when the C++ language was still evolving. Now that 43999the C++ standard is complete, some of those features are superseded by 44000superior alternatives. Using the old features might cause a warning in 44001some cases that the feature will be dropped in the future. In other 44002cases, the feature might be gone already. 44003 44004 While the list below is not exhaustive, it documents some of the 44005options that are now deprecated: 44006 44007`-fexternal-templates' 44008`-falt-external-templates' 44009 These are two of the many ways for G++ to implement template 44010 instantiation. *Note Template Instantiation::. The C++ standard 44011 clearly defines how template definitions have to be organized 44012 across implementation units. G++ has an implicit instantiation 44013 mechanism that should work just fine for standard-conforming code. 44014 44015`-fstrict-prototype' 44016`-fno-strict-prototype' 44017 Previously it was possible to use an empty prototype parameter 44018 list to indicate an unspecified number of parameters (like C), 44019 rather than no parameters, as C++ demands. This feature has been 44020 removed, except where it is required for backwards compatibility. 44021 *Note Backwards Compatibility::. 44022 44023 G++ allows a virtual function returning `void *' to be overridden by 44024one returning a different pointer type. This extension to the 44025covariant return type rules is now deprecated and will be removed from a 44026future version. 44027 44028 The G++ minimum and maximum operators (`<?' and `>?') and their 44029compound forms (`<?=') and `>?=') have been deprecated and are now 44030removed from G++. Code using these operators should be modified to use 44031`std::min' and `std::max' instead. 44032 44033 The named return value extension has been deprecated, and is now 44034removed from G++. 44035 44036 The use of initializer lists with new expressions has been deprecated, 44037and is now removed from G++. 44038 44039 Floating and complex non-type template parameters have been deprecated, 44040and are now removed from G++. 44041 44042 The implicit typename extension has been deprecated and is now removed 44043from G++. 44044 44045 The use of default arguments in function pointers, function typedefs 44046and other places where they are not permitted by the standard is 44047deprecated and will be removed from a future version of G++. 44048 44049 G++ allows floating-point literals to appear in integral constant 44050expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 44051deprecated and will be removed from a future version. 44052 44053 G++ allows static data members of const floating-point type to be 44054declared with an initializer in a class definition. The standard only 44055allows initializers for static members of const integral types and const 44056enumeration types so this extension has been deprecated and will be 44057removed from a future version. 44058 44059 44060File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 44061 440627.13 Backwards Compatibility 44063============================ 44064 44065Now that there is a definitive ISO standard C++, G++ has a specification 44066to adhere to. The C++ language evolved over time, and features that 44067used to be acceptable in previous drafts of the standard, such as the 44068ARM [Annotated C++ Reference Manual], are no longer accepted. In order 44069to allow compilation of C++ written to such drafts, G++ contains some 44070backwards compatibilities. _All such backwards compatibility features 44071are liable to disappear in future versions of G++._ They should be 44072considered deprecated. *Note Deprecated Features::. 44073 44074`For scope' 44075 If a variable is declared at for scope, it used to remain in scope 44076 until the end of the scope that contained the for statement 44077 (rather than just within the for scope). G++ retains this, but 44078 issues a warning, if such a variable is accessed outside the for 44079 scope. 44080 44081`Implicit C language' 44082 Old C system header files did not contain an `extern "C" {...}' 44083 scope to set the language. On such systems, all header files are 44084 implicitly scoped inside a C language scope. Also, an empty 44085 prototype `()' is treated as an unspecified number of arguments, 44086 rather than no arguments, as C++ demands. 44087 44088 44089File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 44090 440918 GNU Objective-C features 44092************************** 44093 44094This document is meant to describe some of the GNU Objective-C 44095features. It is not intended to teach you Objective-C. There are 44096several resources on the Internet that present the language. 44097 44098* Menu: 44099 44100* GNU Objective-C runtime API:: 44101* Executing code before main:: 44102* Type encoding:: 44103* Garbage Collection:: 44104* Constant string objects:: 44105* compatibility_alias:: 44106* Exceptions:: 44107* Synchronization:: 44108* Fast enumeration:: 44109* Messaging with the GNU Objective-C runtime:: 44110 44111 44112File: gcc.info, Node: GNU Objective-C runtime API, Next: Executing code before main, Up: Objective-C 44113 441148.1 GNU Objective-C runtime API 44115=============================== 44116 44117This section is specific for the GNU Objective-C runtime. If you are 44118using a different runtime, you can skip it. 44119 44120 The GNU Objective-C runtime provides an API that allows you to 44121interact with the Objective-C runtime system, querying the live runtime 44122structures and even manipulating them. This allows you for example to 44123inspect and navigate classes, methods and protocols; to define new 44124classes or new methods, and even to modify existing classes or 44125protocols. 44126 44127 If you are using a "Foundation" library such as GNUstep-Base, this 44128library will provide you with a rich set of functionality to do most of 44129the inspection tasks, and you probably will only need direct access to 44130the GNU Objective-C runtime API to define new classes or methods. 44131 44132* Menu: 44133 44134* Modern GNU Objective-C runtime API:: 44135* Traditional GNU Objective-C runtime API:: 44136 44137 44138File: gcc.info, Node: Modern GNU Objective-C runtime API, Next: Traditional GNU Objective-C runtime API, Up: GNU Objective-C runtime API 44139 441408.1.1 Modern GNU Objective-C runtime API 44141---------------------------------------- 44142 44143The GNU Objective-C runtime provides an API which is similar to the one 44144provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime. The 44145API is documented in the public header files of the GNU Objective-C 44146runtime: 44147 44148 * `objc/objc.h': this is the basic Objective-C header file, defining 44149 the basic Objective-C types such as `id', `Class' and `BOOL'. You 44150 have to include this header to do almost anything with Objective-C. 44151 44152 * `objc/runtime.h': this header declares most of the public runtime 44153 API functions allowing you to inspect and manipulate the 44154 Objective-C runtime data structures. These functions are fairly 44155 standardized across Objective-C runtimes and are almost identical 44156 to the Apple/NeXT Objective-C runtime ones. It does not declare 44157 functions in some specialized areas (constructing and forwarding 44158 message invocations, threading) which are in the other headers 44159 below. You have to include `objc/objc.h' and `objc/runtime.h' to 44160 use any of the functions, such as `class_getName()', declared in 44161 `objc/runtime.h'. 44162 44163 * `objc/message.h': this header declares public functions used to 44164 construct, deconstruct and forward message invocations. Because 44165 messaging is done in quite a different way on different runtimes, 44166 functions in this header are specific to the GNU Objective-C 44167 runtime implementation. 44168 44169 * `objc/objc-exception.h': this header declares some public 44170 functions related to Objective-C exceptions. For example 44171 functions in this header allow you to throw an Objective-C 44172 exception from plain C/C++ code. 44173 44174 * `objc/objc-sync.h': this header declares some public functions 44175 related to the Objective-C `@synchronized()' syntax, allowing you 44176 to emulate an Objective-C `@synchronized()' block in plain C/C++ 44177 code. 44178 44179 * `objc/thr.h': this header declares a public runtime API threading 44180 layer that is only provided by the GNU Objective-C runtime. It 44181 declares functions such as `objc_mutex_lock()', which provide a 44182 platform-independent set of threading functions. 44183 44184 44185 The header files contain detailed documentation for each function in 44186the GNU Objective-C runtime API. 44187 44188 44189File: gcc.info, Node: Traditional GNU Objective-C runtime API, Prev: Modern GNU Objective-C runtime API, Up: GNU Objective-C runtime API 44190 441918.1.2 Traditional GNU Objective-C runtime API 44192--------------------------------------------- 44193 44194The GNU Objective-C runtime used to provide a different API, which we 44195call the "traditional" GNU Objective-C runtime API. Functions 44196belonging to this API are easy to recognize because they use a 44197different naming convention, such as `class_get_super_class()' 44198(traditional API) instead of `class_getSuperclass()' (modern API). 44199Software using this API includes the file `objc/objc-api.h' where it is 44200declared. 44201 44202 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer 44203available. 44204 44205 44206File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: GNU Objective-C runtime API, Up: Objective-C 44207 442088.2 `+load': Executing code before main 44209======================================= 44210 44211This section is specific for the GNU Objective-C runtime. If you are 44212using a different runtime, you can skip it. 44213 44214 The GNU Objective-C runtime provides a way that allows you to execute 44215code before the execution of the program enters the `main' function. 44216The code is executed on a per-class and a per-category basis, through a 44217special class method `+load'. 44218 44219 This facility is very useful if you want to initialize global variables 44220which can be accessed by the program directly, without sending a message 44221to the class first. The usual way to initialize global variables, in 44222the `+initialize' method, might not be useful because `+initialize' is 44223only called when the first message is sent to a class object, which in 44224some cases could be too late. 44225 44226 Suppose for example you have a `FileStream' class that declares 44227`Stdin', `Stdout' and `Stderr' as global variables, like below: 44228 44229 44230 FileStream *Stdin = nil; 44231 FileStream *Stdout = nil; 44232 FileStream *Stderr = nil; 44233 44234 @implementation FileStream 44235 44236 + (void)initialize 44237 { 44238 Stdin = [[FileStream new] initWithFd:0]; 44239 Stdout = [[FileStream new] initWithFd:1]; 44240 Stderr = [[FileStream new] initWithFd:2]; 44241 } 44242 44243 /* Other methods here */ 44244 @end 44245 44246 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 44247in `+initialize' occurs too late. The programmer can send a message to 44248one of these objects before the variables are actually initialized, 44249thus sending messages to the `nil' object. The `+initialize' method 44250which actually initializes the global variables is not invoked until 44251the first message is sent to the class object. The solution would 44252require these variables to be initialized just before entering `main'. 44253 44254 The correct solution of the above problem is to use the `+load' method 44255instead of `+initialize': 44256 44257 44258 @implementation FileStream 44259 44260 + (void)load 44261 { 44262 Stdin = [[FileStream new] initWithFd:0]; 44263 Stdout = [[FileStream new] initWithFd:1]; 44264 Stderr = [[FileStream new] initWithFd:2]; 44265 } 44266 44267 /* Other methods here */ 44268 @end 44269 44270 The `+load' is a method that is not overridden by categories. If a 44271class and a category of it both implement `+load', both methods are 44272invoked. This allows some additional initializations to be performed in 44273a category. 44274 44275 This mechanism is not intended to be a replacement for `+initialize'. 44276You should be aware of its limitations when you decide to use it 44277instead of `+initialize'. 44278 44279* Menu: 44280 44281* What you can and what you cannot do in +load:: 44282 44283 44284File: gcc.info, Node: What you can and what you cannot do in +load, Up: Executing code before main 44285 442868.2.1 What you can and what you cannot do in `+load' 44287---------------------------------------------------- 44288 44289`+load' is to be used only as a last resort. Because it is executed 44290very early, most of the Objective-C runtime machinery will not be ready 44291when `+load' is executed; hence `+load' works best for executing C code 44292that is independent on the Objective-C runtime. 44293 44294 The `+load' implementation in the GNU runtime guarantees you the 44295following things: 44296 44297 * you can write whatever C code you like; 44298 44299 * you can allocate and send messages to objects whose class is 44300 implemented in the same file; 44301 44302 * the `+load' implementation of all super classes of a class are 44303 executed before the `+load' of that class is executed; 44304 44305 * the `+load' implementation of a class is executed before the 44306 `+load' implementation of any category. 44307 44308 44309 In particular, the following things, even if they can work in a 44310particular case, are not guaranteed: 44311 44312 * allocation of or sending messages to arbitrary objects; 44313 44314 * allocation of or sending messages to objects whose classes have a 44315 category implemented in the same file; 44316 44317 * sending messages to Objective-C constant strings (`@"this is a 44318 constant string"'); 44319 44320 44321 You should make no assumptions about receiving `+load' in sibling 44322classes when you write `+load' of a class. The order in which sibling 44323classes receive `+load' is not guaranteed. 44324 44325 The order in which `+load' and `+initialize' are called could be 44326problematic if this matters. If you don't allocate objects inside 44327`+load', it is guaranteed that `+load' is called before `+initialize'. 44328If you create an object inside `+load' the `+initialize' method of 44329object's class is invoked even if `+load' was not invoked. Note if you 44330explicitly call `+load' on a class, `+initialize' will be called first. 44331To avoid possible problems try to implement only one of these methods. 44332 44333 The `+load' method is also invoked when a bundle is dynamically loaded 44334into your running program. This happens automatically without any 44335intervening operation from you. When you write bundles and you need to 44336write `+load' you can safely create and send messages to objects whose 44337classes already exist in the running program. The same restrictions as 44338above apply to classes defined in bundle. 44339 44340 44341File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 44342 443438.3 Type encoding 44344================= 44345 44346This is an advanced section. Type encodings are used extensively by 44347the compiler and by the runtime, but you generally do not need to know 44348about them to use Objective-C. 44349 44350 The Objective-C compiler generates type encodings for all the types. 44351These type encodings are used at runtime to find out information about 44352selectors and methods and about objects and classes. 44353 44354 The types are encoded in the following way: 44355 44356`_Bool' `B' 44357`char' `c' 44358`unsigned char' `C' 44359`short' `s' 44360`unsigned short' `S' 44361`int' `i' 44362`unsigned int' `I' 44363`long' `l' 44364`unsigned long' `L' 44365`long long' `q' 44366`unsigned long `Q' 44367long' 44368`float' `f' 44369`double' `d' 44370`long double' `D' 44371`void' `v' 44372`id' `@' 44373`Class' `#' 44374`SEL' `:' 44375`char*' `*' 44376`enum' an `enum' is encoded exactly as the integer type that 44377 the compiler uses for it, which depends on the 44378 enumeration values. Often the compiler users 44379 `unsigned int', which is then encoded as `I'. 44380unknown type `?' 44381Complex types `j' followed by the inner type. For example 44382 `_Complex double' is encoded as "jd". 44383bit-fields `b' followed by the starting position of the 44384 bit-field, the type of the bit-field and the size of 44385 the bit-field (the bit-fields encoding was changed 44386 from the NeXT's compiler encoding, see below) 44387 44388 The encoding of bit-fields has changed to allow bit-fields to be 44389properly handled by the runtime functions that compute sizes and 44390alignments of types that contain bit-fields. The previous encoding 44391contained only the size of the bit-field. Using only this information 44392it is not possible to reliably compute the size occupied by the 44393bit-field. This is very important in the presence of the Boehm's 44394garbage collector because the objects are allocated using the typed 44395memory facility available in this collector. The typed memory 44396allocation requires information about where the pointers are located 44397inside the object. 44398 44399 The position in the bit-field is the position, counting in bits, of the 44400bit closest to the beginning of the structure. 44401 44402 The non-atomic types are encoded as follows: 44403 44404pointers `^' followed by the pointed type. 44405arrays `[' followed by the number of elements in the array 44406 followed by the type of the elements followed by `]' 44407structures `{' followed by the name of the structure (or `?' if the 44408 structure is unnamed), the `=' sign, the type of the 44409 members and by `}' 44410unions `(' followed by the name of the structure (or `?' if the 44411 union is unnamed), the `=' sign, the type of the members 44412 followed by `)' 44413vectors `![' followed by the vector_size (the number of bytes 44414 composing the vector) followed by a comma, followed by 44415 the alignment (in bytes) of the vector, followed by the 44416 type of the elements followed by `]' 44417 44418 Here are some types and their encodings, as they are generated by the 44419compiler on an i386 machine: 44420 44421 44422Objective-C type Compiler encoding 44423 int a[10]; `[10i]' 44424 struct { `{?=i[3f]b128i3b131i2c}' 44425 int i; 44426 float f[3]; 44427 int a:3; 44428 int b:2; 44429 char c; 44430 } 44431 int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine) 44432 44433 44434 In addition to the types the compiler also encodes the type 44435specifiers. The table below describes the encoding of the current 44436Objective-C type specifiers: 44437 44438 44439Specifier Encoding 44440`const' `r' 44441`in' `n' 44442`inout' `N' 44443`out' `o' 44444`bycopy' `O' 44445`byref' `R' 44446`oneway' `V' 44447 44448 44449 The type specifiers are encoded just before the type. Unlike types 44450however, the type specifiers are only encoded when they appear in method 44451argument types. 44452 44453 Note how `const' interacts with pointers: 44454 44455 44456Objective-C type Compiler encoding 44457 const int `ri' 44458 const int* `^ri' 44459 int *const `r^i' 44460 44461 44462 `const int*' is a pointer to a `const int', and so is encoded as 44463`^ri'. `int* const', instead, is a `const' pointer to an `int', and so 44464is encoded as `r^i'. 44465 44466 Finally, there is a complication when encoding `const char *' versus 44467`char * const'. Because `char *' is encoded as `*' and not as `^c', 44468there is no way to express the fact that `r' applies to the pointer or 44469to the pointee. 44470 44471 Hence, it is assumed as a convention that `r*' means `const char *' 44472(since it is what is most often meant), and there is no way to encode 44473`char *const'. `char *const' would simply be encoded as `*', and the 44474`const' is lost. 44475 44476* Menu: 44477 44478* Legacy type encoding:: 44479* @encode:: 44480* Method signatures:: 44481 44482 44483File: gcc.info, Node: Legacy type encoding, Next: @encode, Up: Type encoding 44484 444858.3.1 Legacy type encoding 44486-------------------------- 44487 44488Unfortunately, historically GCC used to have a number of bugs in its 44489encoding code. The NeXT runtime expects GCC to emit type encodings in 44490this historical format (compatible with GCC-3.3), so when using the 44491NeXT runtime, GCC will introduce on purpose a number of incorrect 44492encodings: 44493 44494 * the read-only qualifier of the pointee gets emitted before the '^'. 44495 The read-only qualifier of the pointer itself gets ignored, unless 44496 it is a typedef. Also, the 'r' is only emitted for the outermost 44497 type. 44498 44499 * 32-bit longs are encoded as 'l' or 'L', but not always. For 44500 typedefs, the compiler uses 'i' or 'I' instead if encoding a 44501 struct field or a pointer. 44502 44503 * `enum's are always encoded as 'i' (int) even if they are actually 44504 unsigned or long. 44505 44506 44507 In addition to that, the NeXT runtime uses a different encoding for 44508bitfields. It encodes them as `b' followed by the size, without a bit 44509offset or the underlying field type. 44510 44511 44512File: gcc.info, Node: @encode, Next: Method signatures, Prev: Legacy type encoding, Up: Type encoding 44513 445148.3.2 @encode 44515------------- 44516 44517GNU Objective-C supports the `@encode' syntax that allows you to create 44518a type encoding from a C/Objective-C type. For example, `@encode(int)' 44519is compiled by the compiler into `"i"'. 44520 44521 `@encode' does not support type qualifiers other than `const'. For 44522example, `@encode(const char*)' is valid and is compiled into `"r*"', 44523while `@encode(bycopy char *)' is invalid and will cause a compilation 44524error. 44525 44526 44527File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding 44528 445298.3.3 Method signatures 44530----------------------- 44531 44532This section documents the encoding of method types, which is rarely 44533needed to use Objective-C. You should skip it at a first reading; the 44534runtime provides functions that will work on methods and can walk 44535through the list of parameters and interpret them for you. These 44536functions are part of the public "API" and are the preferred way to 44537interact with method signatures from user code. 44538 44539 But if you need to debug a problem with method signatures and need to 44540know how they are implemented (i.e., the "ABI"), read on. 44541 44542 Methods have their "signature" encoded and made available to the 44543runtime. The "signature" encodes all the information required to 44544dynamically build invocations of the method at runtime: return type and 44545arguments. 44546 44547 The "signature" is a null-terminated string, composed of the following: 44548 44549 * The return type, including type qualifiers. For example, a method 44550 returning `int' would have `i' here. 44551 44552 * The total size (in bytes) required to pass all the parameters. 44553 This includes the two hidden parameters (the object `self' and the 44554 method selector `_cmd'). 44555 44556 * Each argument, with the type encoding, followed by the offset (in 44557 bytes) of the argument in the list of parameters. 44558 44559 44560 For example, a method with no arguments and returning `int' would have 44561the signature `i8@0:4' if the size of a pointer is 4. The signature is 44562interpreted as follows: the `i' is the return type (an `int'), the `8' 44563is the total size of the parameters in bytes (two pointers each of size 445644), the `@0' is the first parameter (an object at byte offset `0') and 44565`:4' is the second parameter (a `SEL' at byte offset `4'). 44566 44567 You can easily find more examples by running the "strings" program on 44568an Objective-C object file compiled by GCC. You'll see a lot of 44569strings that look very much like `i8@0:4'. They are signatures of 44570Objective-C methods. 44571 44572 44573File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 44574 445758.4 Garbage Collection 44576====================== 44577 44578This section is specific for the GNU Objective-C runtime. If you are 44579using a different runtime, you can skip it. 44580 44581 Support for garbage collection with the GNU runtime has been added by 44582using a powerful conservative garbage collector, known as the 44583Boehm-Demers-Weiser conservative garbage collector. 44584 44585 To enable the support for it you have to configure the compiler using 44586an additional argument, `--enable-objc-gc'. This will build the 44587boehm-gc library, and build an additional runtime library which has 44588several enhancements to support the garbage collector. The new library 44589has a new name, `libobjc_gc.a' to not conflict with the 44590non-garbage-collected library. 44591 44592 When the garbage collector is used, the objects are allocated using the 44593so-called typed memory allocation mechanism available in the 44594Boehm-Demers-Weiser collector. This mode requires precise information 44595on where pointers are located inside objects. This information is 44596computed once per class, immediately after the class has been 44597initialized. 44598 44599 There is a new runtime function `class_ivar_set_gcinvisible()' which 44600can be used to declare a so-called "weak pointer" reference. Such a 44601pointer is basically hidden for the garbage collector; this can be 44602useful in certain situations, especially when you want to keep track of 44603the allocated objects, yet allow them to be collected. This kind of 44604pointers can only be members of objects, you cannot declare a global 44605pointer as a weak reference. Every type which is a pointer type can be 44606declared a weak pointer, including `id', `Class' and `SEL'. 44607 44608 Here is an example of how to use this feature. Suppose you want to 44609implement a class whose instances hold a weak pointer reference; the 44610following class does this: 44611 44612 44613 @interface WeakPointer : Object 44614 { 44615 const void* weakPointer; 44616 } 44617 44618 - initWithPointer:(const void*)p; 44619 - (const void*)weakPointer; 44620 @end 44621 44622 44623 @implementation WeakPointer 44624 44625 + (void)initialize 44626 { 44627 if (self == objc_lookUpClass ("WeakPointer")) 44628 class_ivar_set_gcinvisible (self, "weakPointer", YES); 44629 } 44630 44631 - initWithPointer:(const void*)p 44632 { 44633 weakPointer = p; 44634 return self; 44635 } 44636 44637 - (const void*)weakPointer 44638 { 44639 return weakPointer; 44640 } 44641 44642 @end 44643 44644 Weak pointers are supported through a new type character specifier 44645represented by the `!' character. The `class_ivar_set_gcinvisible()' 44646function adds or removes this specifier to the string type description 44647of the instance variable named as argument. 44648 44649 44650File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 44651 446528.5 Constant string objects 44653=========================== 44654 44655GNU Objective-C provides constant string objects that are generated 44656directly by the compiler. You declare a constant string object by 44657prefixing a C constant string with the character `@': 44658 44659 id myString = @"this is a constant string object"; 44660 44661 The constant string objects are by default instances of the 44662`NXConstantString' class which is provided by the GNU Objective-C 44663runtime. To get the definition of this class you must include the 44664`objc/NXConstStr.h' header file. 44665 44666 User defined libraries may want to implement their own constant string 44667class. To be able to support them, the GNU Objective-C compiler 44668provides a new command line options 44669`-fconstant-string-class=CLASS-NAME'. The provided class should adhere 44670to a strict structure, the same as `NXConstantString''s structure: 44671 44672 44673 @interface MyConstantStringClass 44674 { 44675 Class isa; 44676 char *c_string; 44677 unsigned int len; 44678 } 44679 @end 44680 44681 `NXConstantString' inherits from `Object'; user class libraries may 44682choose to inherit the customized constant string class from a different 44683class than `Object'. There is no requirement in the methods the 44684constant string class has to implement, but the final ivar layout of 44685the class must be the compatible with the given structure. 44686 44687 When the compiler creates the statically allocated constant string 44688object, the `c_string' field will be filled by the compiler with the 44689string; the `length' field will be filled by the compiler with the 44690string length; the `isa' pointer will be filled with `NULL' by the 44691compiler, and it will later be fixed up automatically at runtime by the 44692GNU Objective-C runtime library to point to the class which was set by 44693the `-fconstant-string-class' option when the object file is loaded (if 44694you wonder how it works behind the scenes, the name of the class to 44695use, and the list of static objects to fixup, are stored by the 44696compiler in the object file in a place where the GNU runtime library 44697will find them at runtime). 44698 44699 As a result, when a file is compiled with the 44700`-fconstant-string-class' option, all the constant string objects will 44701be instances of the class specified as argument to this option. It is 44702possible to have multiple compilation units referring to different 44703constant string classes, neither the compiler nor the linker impose any 44704restrictions in doing this. 44705 44706 44707File: gcc.info, Node: compatibility_alias, Next: Exceptions, Prev: Constant string objects, Up: Objective-C 44708 447098.6 compatibility_alias 44710======================= 44711 44712The keyword `@compatibility_alias' allows you to define a class name as 44713equivalent to another class name. For example: 44714 44715 @compatibility_alias WOApplication GSWApplication; 44716 44717 tells the compiler that each time it encounters `WOApplication' as a 44718class name, it should replace it with `GSWApplication' (that is, 44719`WOApplication' is just an alias for `GSWApplication'). 44720 44721 There are some constraints on how this can be used-- 44722 44723 * `WOApplication' (the alias) must not be an existing class; 44724 44725 * `GSWApplication' (the real class) must be an existing class. 44726 44727 44728 44729File: gcc.info, Node: Exceptions, Next: Synchronization, Prev: compatibility_alias, Up: Objective-C 44730 447318.7 Exceptions 44732============== 44733 44734GNU Objective-C provides exception support built into the language, as 44735in the following example: 44736 44737 @try { 44738 ... 44739 @throw expr; 44740 ... 44741 } 44742 @catch (AnObjCClass *exc) { 44743 ... 44744 @throw expr; 44745 ... 44746 @throw; 44747 ... 44748 } 44749 @catch (AnotherClass *exc) { 44750 ... 44751 } 44752 @catch (id allOthers) { 44753 ... 44754 } 44755 @finally { 44756 ... 44757 @throw expr; 44758 ... 44759 } 44760 44761 The `@throw' statement may appear anywhere in an Objective-C or 44762Objective-C++ program; when used inside of a `@catch' block, the 44763`@throw' may appear without an argument (as shown above), in which case 44764the object caught by the `@catch' will be rethrown. 44765 44766 Note that only (pointers to) Objective-C objects may be thrown and 44767caught using this scheme. When an object is thrown, it will be caught 44768by the nearest `@catch' clause capable of handling objects of that 44769type, analogously to how `catch' blocks work in C++ and Java. A 44770`@catch(id ...)' clause (as shown above) may also be provided to catch 44771any and all Objective-C exceptions not caught by previous `@catch' 44772clauses (if any). 44773 44774 The `@finally' clause, if present, will be executed upon exit from the 44775immediately preceding `@try ... @catch' section. This will happen 44776regardless of whether any exceptions are thrown, caught or rethrown 44777inside the `@try ... @catch' section, analogously to the behavior of 44778the `finally' clause in Java. 44779 44780 There are several caveats to using the new exception mechanism: 44781 44782 * The `-fobjc-exceptions' command line option must be used when 44783 compiling Objective-C files that use exceptions. 44784 44785 * With the GNU runtime, exceptions are always implemented as "native" 44786 exceptions and it is recommended that the `-fexceptions' and 44787 `-shared-libgcc' options are used when linking. 44788 44789 * With the NeXT runtime, although currently designed to be binary 44790 compatible with `NS_HANDLER'-style idioms provided by the 44791 `NSException' class, the new exceptions can only be used on Mac OS 44792 X 10.3 (Panther) and later systems, due to additional functionality 44793 needed in the NeXT Objective-C runtime. 44794 44795 * As mentioned above, the new exceptions do not support handling 44796 types other than Objective-C objects. Furthermore, when used from 44797 Objective-C++, the Objective-C exception model does not 44798 interoperate with C++ exceptions at this time. This means you 44799 cannot `@throw' an exception from Objective-C and `catch' it in 44800 C++, or vice versa (i.e., `throw ... @catch'). 44801 44802 44803File: gcc.info, Node: Synchronization, Next: Fast enumeration, Prev: Exceptions, Up: Objective-C 44804 448058.8 Synchronization 44806=================== 44807 44808GNU Objective-C provides support for synchronized blocks: 44809 44810 @synchronized (ObjCClass *guard) { 44811 ... 44812 } 44813 44814 Upon entering the `@synchronized' block, a thread of execution shall 44815first check whether a lock has been placed on the corresponding `guard' 44816object by another thread. If it has, the current thread shall wait 44817until the other thread relinquishes its lock. Once `guard' becomes 44818available, the current thread will place its own lock on it, execute 44819the code contained in the `@synchronized' block, and finally relinquish 44820the lock (thereby making `guard' available to other threads). 44821 44822 Unlike Java, Objective-C does not allow for entire methods to be 44823marked `@synchronized'. Note that throwing exceptions out of 44824`@synchronized' blocks is allowed, and will cause the guarding object 44825to be unlocked properly. 44826 44827 Because of the interactions between synchronization and exception 44828handling, you can only use `@synchronized' when compiling with 44829exceptions enabled, that is with the command line option 44830`-fobjc-exceptions'. 44831 44832 44833File: gcc.info, Node: Fast enumeration, Next: Messaging with the GNU Objective-C runtime, Prev: Synchronization, Up: Objective-C 44834 448358.9 Fast enumeration 44836==================== 44837 44838* Menu: 44839 44840* Using fast enumeration:: 44841* c99-like fast enumeration syntax:: 44842* Fast enumeration details:: 44843* Fast enumeration protocol:: 44844 44845 44846File: gcc.info, Node: Using fast enumeration, Next: c99-like fast enumeration syntax, Up: Fast enumeration 44847 448488.9.1 Using fast enumeration 44849---------------------------- 44850 44851GNU Objective-C provides support for the fast enumeration syntax: 44852 44853 id array = ...; 44854 id object; 44855 44856 for (object in array) 44857 { 44858 /* Do something with 'object' */ 44859 } 44860 44861 `array' needs to be an Objective-C object (usually a collection 44862object, for example an array, a dictionary or a set) which implements 44863the "Fast Enumeration Protocol" (see below). If you are using a 44864Foundation library such as GNUstep Base or Apple Cocoa Foundation, all 44865collection objects in the library implement this protocol and can be 44866used in this way. 44867 44868 The code above would iterate over all objects in `array'. For each of 44869them, it assigns it to `object', then executes the `Do something with 44870'object'' statements. 44871 44872 Here is a fully worked-out example using a Foundation library (which 44873provides the implementation of `NSArray', `NSString' and `NSLog'): 44874 44875 NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil]; 44876 NSString *object; 44877 44878 for (object in array) 44879 NSLog (@"Iterating over %@", object); 44880 44881 44882File: gcc.info, Node: c99-like fast enumeration syntax, Next: Fast enumeration details, Prev: Using fast enumeration, Up: Fast enumeration 44883 448848.9.2 c99-like fast enumeration syntax 44885-------------------------------------- 44886 44887A c99-like declaration syntax is also allowed: 44888 44889 id array = ...; 44890 44891 for (id object in array) 44892 { 44893 /* Do something with 'object' */ 44894 } 44895 44896 this is completely equivalent to: 44897 44898 id array = ...; 44899 44900 { 44901 id object; 44902 for (object in array) 44903 { 44904 /* Do something with 'object' */ 44905 } 44906 } 44907 44908 but can save some typing. 44909 44910 Note that the option `-std=c99' is not required to allow this syntax 44911in Objective-C. 44912 44913 44914File: gcc.info, Node: Fast enumeration details, Next: Fast enumeration protocol, Prev: c99-like fast enumeration syntax, Up: Fast enumeration 44915 449168.9.3 Fast enumeration details 44917------------------------------ 44918 44919Here is a more technical description with the gory details. Consider 44920the code 44921 44922 for (OBJECT EXPRESSION in COLLECTION EXPRESSION) 44923 { 44924 STATEMENTS 44925 } 44926 44927 here is what happens when you run it: 44928 44929 * `COLLECTION EXPRESSION' is evaluated exactly once and the result 44930 is used as the collection object to iterate over. This means it 44931 is safe to write code such as `for (object in [NSDictionary 44932 keyEnumerator]) ...'. 44933 44934 * the iteration is implemented by the compiler by repeatedly getting 44935 batches of objects from the collection object using the fast 44936 enumeration protocol (see below), then iterating over all objects 44937 in the batch. This is faster than a normal enumeration where 44938 objects are retrieved one by one (hence the name "fast 44939 enumeration"). 44940 44941 * if there are no objects in the collection, then `OBJECT 44942 EXPRESSION' is set to `nil' and the loop immediately terminates. 44943 44944 * if there are objects in the collection, then for each object in the 44945 collection (in the order they are returned) `OBJECT EXPRESSION' is 44946 set to the object, then `STATEMENTS' are executed. 44947 44948 * `STATEMENTS' can contain `break' and `continue' commands, which 44949 will abort the iteration or skip to the next loop iteration as 44950 expected. 44951 44952 * when the iteration ends because there are no more objects to 44953 iterate over, `OBJECT EXPRESSION' is set to `nil'. This allows 44954 you to determine whether the iteration finished because a `break' 44955 command was used (in which case `OBJECT EXPRESSION' will remain 44956 set to the last object that was iterated over) or because it 44957 iterated over all the objects (in which case `OBJECT EXPRESSION' 44958 will be set to `nil'). 44959 44960 * `STATEMENTS' must not make any changes to the collection object; 44961 if they do, it is a hard error and the fast enumeration terminates 44962 by invoking `objc_enumerationMutation', a runtime function that 44963 normally aborts the program but which can be customized by 44964 Foundation libraries via `objc_set_mutation_handler' to do 44965 something different, such as raising an exception. 44966 44967 44968 44969File: gcc.info, Node: Fast enumeration protocol, Prev: Fast enumeration details, Up: Fast enumeration 44970 449718.9.4 Fast enumeration protocol 44972------------------------------- 44973 44974If you want your own collection object to be usable with fast 44975enumeration, you need to have it implement the method 44976 44977 - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state 44978 objects: (id *)objects 44979 count: (unsigned long)len; 44980 44981 where `NSFastEnumerationState' must be defined in your code as follows: 44982 44983 typedef struct 44984 { 44985 unsigned long state; 44986 id *itemsPtr; 44987 unsigned long *mutationsPtr; 44988 unsigned long extra[5]; 44989 } NSFastEnumerationState; 44990 44991 If no `NSFastEnumerationState' is defined in your code, the compiler 44992will automatically replace `NSFastEnumerationState *' with `struct 44993__objcFastEnumerationState *', where that type is silently defined by 44994the compiler in an identical way. This can be confusing and we 44995recommend that you define `NSFastEnumerationState' (as shown above) 44996instead. 44997 44998 The method is called repeatedly during a fast enumeration to retrieve 44999batches of objects. Each invocation of the method should retrieve the 45000next batch of objects. 45001 45002 The return value of the method is the number of objects in the current 45003batch; this should not exceed `len', which is the maximum size of a 45004batch as requested by the caller. The batch itself is returned in the 45005`itemsPtr' field of the `NSFastEnumerationState' struct. 45006 45007 To help with returning the objects, the `objects' array is a C array 45008preallocated by the caller (on the stack) of size `len'. In many cases 45009you can put the objects you want to return in that `objects' array, 45010then do `itemsPtr = objects'. But you don't have to; if your 45011collection already has the objects to return in some form of C array, 45012it could return them from there instead. 45013 45014 The `state' and `extra' fields of the `NSFastEnumerationState' 45015structure allows your collection object to keep track of the state of 45016the enumeration. In a simple array implementation, `state' may keep 45017track of the index of the last object that was returned, and `extra' 45018may be unused. 45019 45020 The `mutationsPtr' field of the `NSFastEnumerationState' is used to 45021keep track of mutations. It should point to a number; before working 45022on each object, the fast enumeration loop will check that this number 45023has not changed. If it has, a mutation has happened and the fast 45024enumeration will abort. So, `mutationsPtr' could be set to point to 45025some sort of version number of your collection, which is increased by 45026one every time there is a change (for example when an object is added 45027or removed). Or, if you are content with less strict mutation checks, 45028it could point to the number of objects in your collection or some 45029other value that can be checked to perform an approximate check that 45030the collection has not been mutated. 45031 45032 Finally, note how we declared the `len' argument and the return value 45033to be of type `unsigned long'. They could also be declared to be of 45034type `unsigned int' and everything would still work. 45035 45036 45037File: gcc.info, Node: Messaging with the GNU Objective-C runtime, Prev: Fast enumeration, Up: Objective-C 45038 450398.10 Messaging with the GNU Objective-C runtime 45040=============================================== 45041 45042This section is specific for the GNU Objective-C runtime. If you are 45043using a different runtime, you can skip it. 45044 45045 The implementation of messaging in the GNU Objective-C runtime is 45046designed to be portable, and so is based on standard C. 45047 45048 Sending a message in the GNU Objective-C runtime is composed of two 45049separate steps. First, there is a call to the lookup function, 45050`objc_msg_lookup ()' (or, in the case of messages to super, 45051`objc_msg_lookup_super ()'). This runtime function takes as argument 45052the receiver and the selector of the method to be called; it returns 45053the `IMP', that is a pointer to the function implementing the method. 45054The second step of method invocation consists of casting this pointer 45055function to the appropriate function pointer type, and calling the 45056function pointed to it with the right arguments. 45057 45058 For example, when the compiler encounters a method invocation such as 45059`[object init]', it compiles it into a call to `objc_msg_lookup 45060(object, @selector(init))' followed by a cast of the returned value to 45061the appropriate function pointer type, and then it calls it. 45062 45063* Menu: 45064 45065* Dynamically registering methods:: 45066* Forwarding hook:: 45067 45068 45069File: gcc.info, Node: Dynamically registering methods, Next: Forwarding hook, Up: Messaging with the GNU Objective-C runtime 45070 450718.10.1 Dynamically registering methods 45072-------------------------------------- 45073 45074If `objc_msg_lookup()' does not find a suitable method implementation, 45075because the receiver does not implement the required method, it tries 45076to see if the class can dynamically register the method. 45077 45078 To do so, the runtime checks if the class of the receiver implements 45079the method 45080 45081 + (BOOL) resolveInstanceMethod: (SEL)selector; 45082 45083 in the case of an instance method, or 45084 45085 + (BOOL) resolveClassMethod: (SEL)selector; 45086 45087 in the case of a class method. If the class implements it, the 45088runtime invokes it, passing as argument the selector of the original 45089method, and if it returns `YES', the runtime tries the lookup again, 45090which could now succeed if a matching method was added dynamically by 45091`+resolveInstanceMethod:' or `+resolveClassMethod:'. 45092 45093 This allows classes to dynamically register methods (by adding them to 45094the class using `class_addMethod') when they are first called. To do 45095so, a class should implement `+resolveInstanceMethod:' (or, depending 45096on the case, `+resolveClassMethod:') and have it recognize the 45097selectors of methods that can be registered dynamically at runtime, 45098register them, and return `YES'. It should return `NO' for methods 45099that it does not dynamically registered at runtime. 45100 45101 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not 45102implemented or returns `NO', the runtime then tries the forwarding hook. 45103 45104 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was 45105added to the GNU Objective-C runtime in GCC version 4.6. 45106 45107 45108File: gcc.info, Node: Forwarding hook, Prev: Dynamically registering methods, Up: Messaging with the GNU Objective-C runtime 45109 451108.10.2 Forwarding hook 45111---------------------- 45112 45113The GNU Objective-C runtime provides a hook, called 45114`__objc_msg_forward2', which is called by `objc_msg_lookup()' when it 45115can't find a method implementation in the runtime tables and after 45116calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been 45117attempted and did not succeed in dynamically registering the method. 45118 45119 To configure the hook, you set the global variable 45120`__objc_msg_forward2' to a function with the same argument and return 45121types of `objc_msg_lookup()'. When `objc_msg_lookup()' can not find a 45122method implementation, it invokes the hook function you provided to get 45123a method implementation to return. So, in practice 45124`__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by 45125adding some custom code that is called to do a further lookup when no 45126standard method implementation can be found using the normal lookup. 45127 45128 This hook is generally reserved for "Foundation" libraries such as 45129GNUstep Base, which use it to implement their high-level method 45130forwarding API, typically based around the `forwardInvocation:' method. 45131So, unless you are implementing your own "Foundation" library, you 45132should not set this hook. 45133 45134 In a typical forwarding implementation, the `__objc_msg_forward2' hook 45135function determines the argument and return type of the method that is 45136being looked up, and then creates a function that takes these arguments 45137and has that return type, and returns it to the caller. Creating this 45138function is non-trivial and is typically performed using a dedicated 45139library such as `libffi'. 45140 45141 The forwarding method implementation thus created is returned by 45142`objc_msg_lookup()' and is executed as if it was a normal method 45143implementation. When the forwarding method implementation is called, 45144it is usually expected to pack all arguments into some sort of object 45145(typically, an `NSInvocation' in a "Foundation" library), and hand it 45146over to the programmer (`forwardInvocation:') who is then allowed to 45147manipulate the method invocation using a high-level API provided by the 45148"Foundation" library. For example, the programmer may want to examine 45149the method invocation arguments and name and potentially change them 45150before forwarding the method invocation to one or more local objects 45151(`performInvocation:') or even to remote objects (by using Distributed 45152Objects or some other mechanism). When all this completes, the return 45153value is passed back and must be returned correctly to the original 45154caller. 45155 45156 Note that the GNU Objective-C runtime currently provides no support 45157for method forwarding or method invocations other than the 45158`__objc_msg_forward2' hook. 45159 45160 If the forwarding hook does not exist or returns `NULL', the runtime 45161currently attempts forwarding using an older, deprecated API, and if 45162that fails, it aborts the program. In future versions of the GNU 45163Objective-C runtime, the runtime will immediately abort. 45164 45165 45166File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 45167 451689 Binary Compatibility 45169********************** 45170 45171Binary compatibility encompasses several related concepts: 45172 45173"application binary interface (ABI)" 45174 The set of runtime conventions followed by all of the tools that 45175 deal with binary representations of a program, including 45176 compilers, assemblers, linkers, and language runtime support. 45177 Some ABIs are formal with a written specification, possibly 45178 designed by multiple interested parties. Others are simply the 45179 way things are actually done by a particular set of tools. 45180 45181"ABI conformance" 45182 A compiler conforms to an ABI if it generates code that follows 45183 all of the specifications enumerated by that ABI. A library 45184 conforms to an ABI if it is implemented according to that ABI. An 45185 application conforms to an ABI if it is built using tools that 45186 conform to that ABI and does not contain source code that 45187 specifically changes behavior specified by the ABI. 45188 45189"calling conventions" 45190 Calling conventions are a subset of an ABI that specify of how 45191 arguments are passed and function results are returned. 45192 45193"interoperability" 45194 Different sets of tools are interoperable if they generate files 45195 that can be used in the same program. The set of tools includes 45196 compilers, assemblers, linkers, libraries, header files, startup 45197 files, and debuggers. Binaries produced by different sets of 45198 tools are not interoperable unless they implement the same ABI. 45199 This applies to different versions of the same tools as well as 45200 tools from different vendors. 45201 45202"intercallability" 45203 Whether a function in a binary built by one set of tools can call a 45204 function in a binary built by a different set of tools is a subset 45205 of interoperability. 45206 45207"implementation-defined features" 45208 Language standards include lists of implementation-defined 45209 features whose behavior can vary from one implementation to 45210 another. Some of these features are normally covered by a 45211 platform's ABI and others are not. The features that are not 45212 covered by an ABI generally affect how a program behaves, but not 45213 intercallability. 45214 45215"compatibility" 45216 Conformance to the same ABI and the same behavior of 45217 implementation-defined features are both relevant for 45218 compatibility. 45219 45220 The application binary interface implemented by a C or C++ compiler 45221affects code generation and runtime support for: 45222 45223 * size and alignment of data types 45224 45225 * layout of structured types 45226 45227 * calling conventions 45228 45229 * register usage conventions 45230 45231 * interfaces for runtime arithmetic support 45232 45233 * object file formats 45234 45235 In addition, the application binary interface implemented by a C++ 45236compiler affects code generation and runtime support for: 45237 * name mangling 45238 45239 * exception handling 45240 45241 * invoking constructors and destructors 45242 45243 * layout, alignment, and padding of classes 45244 45245 * layout and alignment of virtual tables 45246 45247 Some GCC compilation options cause the compiler to generate code that 45248does not conform to the platform's default ABI. Other options cause 45249different program behavior for implementation-defined features that are 45250not covered by an ABI. These options are provided for consistency with 45251other compilers that do not follow the platform's default ABI or the 45252usual behavior of implementation-defined features for the platform. Be 45253very careful about using such options. 45254 45255 Most platforms have a well-defined ABI that covers C code, but ABIs 45256that cover C++ functionality are not yet common. 45257 45258 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 45259written, vendor-neutral C++ ABI that was designed to be specific to 4526064-bit Itanium but also includes generic specifications that apply to 45261any platform. This C++ ABI is also implemented by other compiler 45262vendors on some platforms, notably GNU/Linux and BSD systems. We have 45263tried hard to provide a stable ABI that will be compatible with future 45264GCC releases, but it is possible that we will encounter problems that 45265make this difficult. Such problems could include different 45266interpretations of the C++ ABI by different vendors, bugs in the ABI, or 45267bugs in the implementation of the ABI in different compilers. GCC's 45268`-Wabi' switch warns when G++ generates code that is probably not 45269compatible with the C++ ABI. 45270 45271 The C++ library used with a C++ compiler includes the Standard C++ 45272Library, with functionality defined in the C++ Standard, plus language 45273runtime support. The runtime support is included in a C++ ABI, but 45274there is no formal ABI for the Standard C++ Library. Two 45275implementations of that library are interoperable if one follows the 45276de-facto ABI of the other and if they are both built with the same 45277compiler, or with compilers that conform to the same ABI for C++ 45278compiler and runtime support. 45279 45280 When G++ and another C++ compiler conform to the same C++ ABI, but the 45281implementations of the Standard C++ Library that they normally use do 45282not follow the same ABI for the Standard C++ Library, object files 45283built with those compilers can be used in the same program only if they 45284use the same C++ library. This requires specifying the location of the 45285C++ library header files when invoking the compiler whose usual library 45286is not being used. The location of GCC's C++ header files depends on 45287how the GCC build was configured, but can be seen by using the G++ `-v' 45288option. With default configuration options for G++ 3.3 the compile 45289line for a different C++ compiler needs to include 45290 45291 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 45292 45293 Similarly, compiling code with G++ that must use a C++ library other 45294than the GNU C++ library requires specifying the location of the header 45295files for that other library. 45296 45297 The most straightforward way to link a program to use a particular C++ 45298library is to use a C++ driver that specifies that C++ library by 45299default. The `g++' driver, for example, tells the linker where to find 45300GCC's C++ library (`libstdc++') plus the other libraries and startup 45301files it needs, in the proper order. 45302 45303 If a program must use a different C++ library and it's not possible to 45304do the final link using a C++ driver that uses that library by default, 45305it is necessary to tell `g++' the location and name of that library. 45306It might also be necessary to specify different startup files and other 45307runtime support libraries, and to suppress the use of GCC's support 45308libraries with one or more of the options `-nostdlib', `-nostartfiles', 45309and `-nodefaultlibs'. 45310 45311 45312File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 45313 4531410 `gcov'--a Test Coverage Program 45315********************************** 45316 45317`gcov' is a tool you can use in conjunction with GCC to test code 45318coverage in your programs. 45319 45320* Menu: 45321 45322* Gcov Intro:: Introduction to gcov. 45323* Invoking Gcov:: How to use gcov. 45324* Gcov and Optimization:: Using gcov with GCC optimization. 45325* Gcov Data Files:: The files used by gcov. 45326* Cross-profiling:: Data file relocation. 45327 45328 45329File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 45330 4533110.1 Introduction to `gcov' 45332=========================== 45333 45334`gcov' is a test coverage program. Use it in concert with GCC to 45335analyze your programs to help create more efficient, faster running 45336code and to discover untested parts of your program. You can use 45337`gcov' as a profiling tool to help discover where your optimization 45338efforts will best affect your code. You can also use `gcov' along with 45339the other profiling tool, `gprof', to assess which parts of your code 45340use the greatest amount of computing time. 45341 45342 Profiling tools help you analyze your code's performance. Using a 45343profiler such as `gcov' or `gprof', you can find out some basic 45344performance statistics, such as: 45345 45346 * how often each line of code executes 45347 45348 * what lines of code are actually executed 45349 45350 * how much computing time each section of code uses 45351 45352 Once you know these things about how your code works when compiled, you 45353can look at each module to see which modules should be optimized. 45354`gcov' helps you determine where to work on optimization. 45355 45356 Software developers also use coverage testing in concert with 45357testsuites, to make sure software is actually good enough for a release. 45358Testsuites can verify that a program works as expected; a coverage 45359program tests to see how much of the program is exercised by the 45360testsuite. Developers can then determine what kinds of test cases need 45361to be added to the testsuites to create both better testing and a better 45362final product. 45363 45364 You should compile your code without optimization if you plan to use 45365`gcov' because the optimization, by combining some lines of code into 45366one function, may not give you as much information as you need to look 45367for `hot spots' where the code is using a great deal of computer time. 45368Likewise, because `gcov' accumulates statistics by line (at the lowest 45369resolution), it works best with a programming style that places only 45370one statement on each line. If you use complicated macros that expand 45371to loops or to other control structures, the statistics are less 45372helpful--they only report on the line where the macro call appears. If 45373your complex macros behave like functions, you can replace them with 45374inline functions to solve this problem. 45375 45376 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 45377many times each line of a source file `SOURCEFILE.c' has executed. You 45378can use these logfiles along with `gprof' to aid in fine-tuning the 45379performance of your programs. `gprof' gives timing information you can 45380use along with the information you get from `gcov'. 45381 45382 `gcov' works only on code compiled with GCC. It is not compatible 45383with any other profiling or test coverage mechanism. 45384 45385 45386File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 45387 4538810.2 Invoking `gcov' 45389==================== 45390 45391 gcov [OPTIONS] FILES 45392 45393 `gcov' accepts the following options: 45394 45395`-h' 45396`--help' 45397 Display help about using `gcov' (on the standard output), and exit 45398 without doing any further processing. 45399 45400`-v' 45401`--version' 45402 Display the `gcov' version number (on the standard output), and 45403 exit without doing any further processing. 45404 45405`-a' 45406`--all-blocks' 45407 Write individual execution counts for every basic block. Normally 45408 gcov outputs execution counts only for the main blocks of a line. 45409 With this option you can determine if blocks within a single line 45410 are not being executed. 45411 45412`-b' 45413`--branch-probabilities' 45414 Write branch frequencies to the output file, and write branch 45415 summary info to the standard output. This option allows you to 45416 see how often each branch in your program was taken. 45417 Unconditional branches will not be shown, unless the `-u' option 45418 is given. 45419 45420`-c' 45421`--branch-counts' 45422 Write branch frequencies as the number of branches taken, rather 45423 than the percentage of branches taken. 45424 45425`-n' 45426`--no-output' 45427 Do not create the `gcov' output file. 45428 45429`-l' 45430`--long-file-names' 45431 Create long file names for included source files. For example, if 45432 the header file `x.h' contains code, and was included in the file 45433 `a.c', then running `gcov' on the file `a.c' will produce an 45434 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 45435 can be useful if `x.h' is included in multiple source files and 45436 you want to see the individual contributions. If you use the `-p' 45437 option, both the including and included file names will be 45438 complete path names. 45439 45440`-p' 45441`--preserve-paths' 45442 Preserve complete path information in the names of generated 45443 `.gcov' files. Without this option, just the filename component is 45444 used. With this option, all directories are used, with `/' 45445 characters translated to `#' characters, `.' directory components 45446 removed and unremoveable `..' components renamed to `^'. This is 45447 useful if sourcefiles are in several different directories. 45448 45449`-r' 45450`--relative-only' 45451 Only output information about source files with a relative pathname 45452 (after source prefix elision). Absolute paths are usually system 45453 header files and coverage of any inline functions therein is 45454 normally uninteresting. 45455 45456`-f' 45457`--function-summaries' 45458 Output summaries for each function in addition to the file level 45459 summary. 45460 45461`-o DIRECTORY|FILE' 45462`--object-directory DIRECTORY' 45463`--object-file FILE' 45464 Specify either the directory containing the gcov data files, or the 45465 object path name. The `.gcno', and `.gcda' data files are 45466 searched for using this option. If a directory is specified, the 45467 data files are in that directory and named after the input file 45468 name, without its extension. If a file is specified here, the 45469 data files are named after that file, without its extension. 45470 45471`-s DIRECTORY' 45472`--source-prefix DIRECTORY' 45473 A prefix for source file names to remove when generating the output 45474 coverage files. This option is useful when building in a separate 45475 directory, and the pathname to the source directory is not wanted 45476 when determining the output file names. Note that this prefix 45477 detection is applied before determining whether the source file is 45478 absolute. 45479 45480`-u' 45481`--unconditional-branches' 45482 When branch probabilities are given, include those of 45483 unconditional branches. Unconditional branches are normally not 45484 interesting. 45485 45486`-d' 45487`--display-progress' 45488 Display the progress on the standard output. 45489 45490 45491 `gcov' should be run with the current directory the same as that when 45492you invoked the compiler. Otherwise it will not be able to locate the 45493source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 45494current directory. These contain the coverage information of the 45495source file they correspond to. One `.gcov' file is produced for each 45496source (or header) file containing code, which was compiled to produce 45497the data files. The MANGLEDNAME part of the output file name is 45498usually simply the source file name, but can be something more 45499complicated if the `-l' or `-p' options are given. Refer to those 45500options for details. 45501 45502 If you invoke `gcov' with multiple input files, the contributions from 45503each input file are summed. Typically you would invoke it with the 45504same list of files as the final link of your executable. 45505 45506 The `.gcov' files contain the `:' separated fields along with program 45507source code. The format is 45508 45509 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 45510 45511 Additional block information may succeed each line, when requested by 45512command line option. The EXECUTION_COUNT is `-' for lines containing 45513no code. Unexecuted lines are marked `#####' or `====', depending on 45514whether they are reachable by non-exceptional paths or only exceptional 45515paths such as C++ exception handlers, respectively. 45516 45517 Some lines of information at the start have LINE_NUMBER of zero. 45518These preamble lines are of the form 45519 45520 -:0:TAG:VALUE 45521 45522 The ordering and number of these preamble lines will be augmented as 45523`gcov' development progresses -- do not rely on them remaining 45524unchanged. Use TAG to locate a particular preamble line. 45525 45526 The additional block information is of the form 45527 45528 TAG INFORMATION 45529 45530 The INFORMATION is human readable, but designed to be simple enough 45531for machine parsing too. 45532 45533 When printing percentages, 0% and 100% are only printed when the values 45534are _exactly_ 0% and 100% respectively. Other values which would 45535conventionally be rounded to 0% or 100% are instead printed as the 45536nearest non-boundary value. 45537 45538 When using `gcov', you must first compile your program with two 45539special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 45540compiler to generate additional information needed by gcov (basically a 45541flow graph of the program) and also includes additional code in the 45542object files for generating the extra profiling information needed by 45543gcov. These additional files are placed in the directory where the 45544object file is located. 45545 45546 Running the program will cause profile output to be generated. For 45547each source file compiled with `-fprofile-arcs', an accompanying 45548`.gcda' file will be placed in the object file directory. 45549 45550 Running `gcov' with your program's source file names as arguments will 45551now produce a listing of the code along with frequency of execution for 45552each line. For example, if your program is called `tmp.c', this is 45553what you see when you use the basic `gcov' facility: 45554 45555 $ gcc -fprofile-arcs -ftest-coverage tmp.c 45556 $ a.out 45557 $ gcov tmp.c 45558 90.00% of 10 source lines executed in file tmp.c 45559 Creating tmp.c.gcov. 45560 45561 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 45562 45563 -: 0:Source:tmp.c 45564 -: 0:Graph:tmp.gcno 45565 -: 0:Data:tmp.gcda 45566 -: 0:Runs:1 45567 -: 0:Programs:1 45568 -: 1:#include <stdio.h> 45569 -: 2: 45570 -: 3:int main (void) 45571 1: 4:{ 45572 1: 5: int i, total; 45573 -: 6: 45574 1: 7: total = 0; 45575 -: 8: 45576 11: 9: for (i = 0; i < 10; i++) 45577 10: 10: total += i; 45578 -: 11: 45579 1: 12: if (total != 45) 45580 #####: 13: printf ("Failure\n"); 45581 -: 14: else 45582 1: 15: printf ("Success\n"); 45583 1: 16: return 0; 45584 -: 17:} 45585 45586 When you use the `-a' option, you will get individual block counts, 45587and the output looks like this: 45588 45589 -: 0:Source:tmp.c 45590 -: 0:Graph:tmp.gcno 45591 -: 0:Data:tmp.gcda 45592 -: 0:Runs:1 45593 -: 0:Programs:1 45594 -: 1:#include <stdio.h> 45595 -: 2: 45596 -: 3:int main (void) 45597 1: 4:{ 45598 1: 4-block 0 45599 1: 5: int i, total; 45600 -: 6: 45601 1: 7: total = 0; 45602 -: 8: 45603 11: 9: for (i = 0; i < 10; i++) 45604 11: 9-block 0 45605 10: 10: total += i; 45606 10: 10-block 0 45607 -: 11: 45608 1: 12: if (total != 45) 45609 1: 12-block 0 45610 #####: 13: printf ("Failure\n"); 45611 $$$$$: 13-block 0 45612 -: 14: else 45613 1: 15: printf ("Success\n"); 45614 1: 15-block 0 45615 1: 16: return 0; 45616 1: 16-block 0 45617 -: 17:} 45618 45619 In this mode, each basic block is only shown on one line - the last 45620line of the block. A multi-line block will only contribute to the 45621execution count of that last line, and other lines will not be shown to 45622contain code, unless previous blocks end on those lines. The total 45623execution count of a line is shown and subsequent lines show the 45624execution counts for individual blocks that end on that line. After 45625each block, the branch and call counts of the block will be shown, if 45626the `-b' option is given. 45627 45628 Because of the way GCC instruments calls, a call count can be shown 45629after a line with no individual blocks. As you can see, line 13 45630contains a basic block that was not executed. 45631 45632 When you use the `-b' option, your output looks like this: 45633 45634 $ gcov -b tmp.c 45635 90.00% of 10 source lines executed in file tmp.c 45636 80.00% of 5 branches executed in file tmp.c 45637 80.00% of 5 branches taken at least once in file tmp.c 45638 50.00% of 2 calls executed in file tmp.c 45639 Creating tmp.c.gcov. 45640 45641 Here is a sample of a resulting `tmp.c.gcov' file: 45642 45643 -: 0:Source:tmp.c 45644 -: 0:Graph:tmp.gcno 45645 -: 0:Data:tmp.gcda 45646 -: 0:Runs:1 45647 -: 0:Programs:1 45648 -: 1:#include <stdio.h> 45649 -: 2: 45650 -: 3:int main (void) 45651 function main called 1 returned 1 blocks executed 75% 45652 1: 4:{ 45653 1: 5: int i, total; 45654 -: 6: 45655 1: 7: total = 0; 45656 -: 8: 45657 11: 9: for (i = 0; i < 10; i++) 45658 branch 0 taken 91% (fallthrough) 45659 branch 1 taken 9% 45660 10: 10: total += i; 45661 -: 11: 45662 1: 12: if (total != 45) 45663 branch 0 taken 0% (fallthrough) 45664 branch 1 taken 100% 45665 #####: 13: printf ("Failure\n"); 45666 call 0 never executed 45667 -: 14: else 45668 1: 15: printf ("Success\n"); 45669 call 0 called 1 returned 100% 45670 1: 16: return 0; 45671 -: 17:} 45672 45673 For each function, a line is printed showing how many times the 45674function is called, how many times it returns and what percentage of the 45675function's blocks were executed. 45676 45677 For each basic block, a line is printed after the last line of the 45678basic block describing the branch or call that ends the basic block. 45679There can be multiple branches and calls listed for a single source 45680line if there are multiple basic blocks that end on that line. In this 45681case, the branches and calls are each given a number. There is no 45682simple way to map these branches and calls back to source constructs. 45683In general, though, the lowest numbered branch or call will correspond 45684to the leftmost construct on the source line. 45685 45686 For a branch, if it was executed at least once, then a percentage 45687indicating the number of times the branch was taken divided by the 45688number of times the branch was executed will be printed. Otherwise, the 45689message "never executed" is printed. 45690 45691 For a call, if it was executed at least once, then a percentage 45692indicating the number of times the call returned divided by the number 45693of times the call was executed will be printed. This will usually be 45694100%, but may be less for functions that call `exit' or `longjmp', and 45695thus may not return every time they are called. 45696 45697 The execution counts are cumulative. If the example program were 45698executed again without removing the `.gcda' file, the count for the 45699number of times each line in the source was executed would be added to 45700the results of the previous run(s). This is potentially useful in 45701several ways. For example, it could be used to accumulate data over a 45702number of program runs as part of a test verification suite, or to 45703provide more accurate long-term information over a large number of 45704program runs. 45705 45706 The data in the `.gcda' files is saved immediately before the program 45707exits. For each source file compiled with `-fprofile-arcs', the 45708profiling code first attempts to read in an existing `.gcda' file; if 45709the file doesn't match the executable (differing number of basic block 45710counts) it will ignore the contents of the file. It then adds in the 45711new execution counts and finally writes the data to the file. 45712 45713 45714File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 45715 4571610.3 Using `gcov' with GCC Optimization 45717======================================= 45718 45719If you plan to use `gcov' to help optimize your code, you must first 45720compile your program with two special GCC options: `-fprofile-arcs 45721-ftest-coverage'. Aside from that, you can use any other GCC options; 45722but if you want to prove that every single line in your program was 45723executed, you should not compile with optimization at the same time. 45724On some machines the optimizer can eliminate some simple code lines by 45725combining them with other lines. For example, code like this: 45726 45727 if (a != b) 45728 c = 1; 45729 else 45730 c = 0; 45731 45732can be compiled into one instruction on some machines. In this case, 45733there is no way for `gcov' to calculate separate execution counts for 45734each line because there isn't separate code for each line. Hence the 45735`gcov' output looks like this if you compiled the program with 45736optimization: 45737 45738 100: 12:if (a != b) 45739 100: 13: c = 1; 45740 100: 14:else 45741 100: 15: c = 0; 45742 45743 The output shows that this block of code, combined by optimization, 45744executed 100 times. In one sense this result is correct, because there 45745was only one instruction representing all four of these lines. However, 45746the output does not indicate how many times the result was 0 and how 45747many times the result was 1. 45748 45749 Inlineable functions can create unexpected line counts. Line counts 45750are shown for the source code of the inlineable function, but what is 45751shown depends on where the function is inlined, or if it is not inlined 45752at all. 45753 45754 If the function is not inlined, the compiler must emit an out of line 45755copy of the function, in any object file that needs it. If `fileA.o' 45756and `fileB.o' both contain out of line bodies of a particular 45757inlineable function, they will also both contain coverage counts for 45758that function. When `fileA.o' and `fileB.o' are linked together, the 45759linker will, on many systems, select one of those out of line bodies 45760for all calls to that function, and remove or ignore the other. 45761Unfortunately, it will not remove the coverage counters for the unused 45762function body. Hence when instrumented, all but one use of that 45763function will show zero counts. 45764 45765 If the function is inlined in several places, the block structure in 45766each location might not be the same. For instance, a condition might 45767now be calculable at compile time in some instances. Because the 45768coverage of all the uses of the inline function will be shown for the 45769same source lines, the line counts themselves might seem inconsistent. 45770 45771 Long-running applications can use the `_gcov_reset' and `_gcov_dump' 45772facilities to restrict profile collection to the program region of 45773interest. Calling `_gcov_reset(void)' will clear all profile counters 45774to zero, and calling `_gcov_dump(void)' will cause the profile 45775information collected at that point to be dumped to `.gcda' output 45776files. 45777 45778 45779File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 45780 4578110.4 Brief description of `gcov' data files 45782=========================================== 45783 45784`gcov' uses two files for profiling. The names of these files are 45785derived from the original _object_ file by substituting the file suffix 45786with either `.gcno', or `.gcda'. The files contain coverage and 45787profile data stored in a platform-independent format. The `.gcno' 45788files are placed in the same directory as the object file. By default, 45789the `.gcda' files are also stored in the same directory as the object 45790file, but the GCC `-fprofile-dir' option may be used to store the 45791`.gcda' files in a separate directory. 45792 45793 The `.gcno' notes file is generated when the source file is compiled 45794with the GCC `-ftest-coverage' option. It contains information to 45795reconstruct the basic block graphs and assign source line numbers to 45796blocks. 45797 45798 The `.gcda' count data file is generated when a program containing 45799object files built with the GCC `-fprofile-arcs' option is executed. A 45800separate `.gcda' file is created for each object file compiled with 45801this option. It contains arc transition counts, value profile counts, 45802and some summary information. 45803 45804 The full details of the file format is specified in `gcov-io.h', and 45805functions provided in that header file should be used to access the 45806coverage files. 45807 45808 45809File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 45810 4581110.5 Data file relocation to support cross-profiling 45812==================================================== 45813 45814Running the program will cause profile output to be generated. For each 45815source file compiled with `-fprofile-arcs', an accompanying `.gcda' 45816file will be placed in the object file directory. That implicitly 45817requires running the program on the same system as it was built or 45818having the same absolute directory structure on the target system. The 45819program will try to create the needed directory structure, if it is not 45820already present. 45821 45822 To support cross-profiling, a program compiled with `-fprofile-arcs' 45823can relocate the data files based on two environment variables: 45824 45825 * GCOV_PREFIX contains the prefix to add to the absolute paths in 45826 the object file. Prefix can be absolute, or relative. The default 45827 is no prefix. 45828 45829 * GCOV_PREFIX_STRIP indicates the how many initial directory names 45830 to strip off the hardwired absolute paths. Default value is 0. 45831 45832 _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is 45833 undefined, then a relative path is made out of the hardwired 45834 absolute paths. 45835 45836 For example, if the object file `/user/build/foo.o' was built with 45837`-fprofile-arcs', the final executable will try to create the data file 45838`/user/build/foo.gcda' when running on the target system. This will 45839fail if the corresponding directory does not exist and it is unable to 45840create it. This can be overcome by, for example, setting the 45841environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 45842Such a setting will name the data file `/target/run/build/foo.gcda'. 45843 45844 You must move the data files to the expected directory tree in order to 45845use them for profile directed optimizations (`--use-profile'), or to 45846use the `gcov' tool. 45847 45848 45849File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 45850 4585111 Known Causes of Trouble with GCC 45852*********************************** 45853 45854This section describes known problems that affect users of GCC. Most 45855of these are not GCC bugs per se--if they were, we would fix them. But 45856the result for a user may be like the result of a bug. 45857 45858 Some of these problems are due to bugs in other software, some are 45859missing features that are too much work to add, and some are places 45860where people's opinions differ as to what is best. 45861 45862* Menu: 45863 45864* Actual Bugs:: Bugs we will fix later. 45865* Interoperation:: Problems using GCC with other compilers, 45866 and with certain linkers, assemblers and debuggers. 45867* Incompatibilities:: GCC is incompatible with traditional C. 45868* Fixed Headers:: GCC uses corrected versions of system header files. 45869 This is necessary, but doesn't always work smoothly. 45870* Standard Libraries:: GCC uses the system C library, which might not be 45871 compliant with the ISO C standard. 45872* Disappointments:: Regrettable things we can't change, but not quite bugs. 45873* C++ Misunderstandings:: Common misunderstandings with GNU C++. 45874* Non-bugs:: Things we think are right, but some others disagree. 45875* Warnings and Errors:: Which problems in your code get warnings, 45876 and which get errors. 45877 45878 45879File: gcc.info, Node: Actual Bugs, Next: Interoperation, Up: Trouble 45880 4588111.1 Actual Bugs We Haven't Fixed Yet 45882===================================== 45883 45884 * The `fixincludes' script interacts badly with automounters; if the 45885 directory of system header files is automounted, it tends to be 45886 unmounted while `fixincludes' is running. This would seem to be a 45887 bug in the automounter. We don't know any good way to work around 45888 it. 45889 45890 45891File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Actual Bugs, Up: Trouble 45892 4589311.2 Interoperation 45894=================== 45895 45896This section lists various difficulties encountered in using GCC 45897together with other compilers or with the assemblers, linkers, 45898libraries and debuggers on certain systems. 45899 45900 * On many platforms, GCC supports a different ABI for C++ than do 45901 other compilers, so the object files compiled by GCC cannot be 45902 used with object files generated by another C++ compiler. 45903 45904 An area where the difference is most apparent is name mangling. 45905 The use of different name mangling is intentional, to protect you 45906 from more subtle problems. Compilers differ as to many internal 45907 details of C++ implementation, including: how class instances are 45908 laid out, how multiple inheritance is implemented, and how virtual 45909 function calls are handled. If the name encoding were made the 45910 same, your programs would link against libraries provided from 45911 other compilers--but the programs would then crash when run. 45912 Incompatible libraries are then detected at link time, rather than 45913 at run time. 45914 45915 * On some BSD systems, including some versions of Ultrix, use of 45916 profiling causes static variable destructors (currently used only 45917 in C++) not to be run. 45918 45919 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 45920 boundary, and it expects every `double' to be so aligned. The Sun 45921 compiler usually gives `double' values 8-byte alignment, with one 45922 exception: function arguments of type `double' may not be aligned. 45923 45924 As a result, if a function compiled with Sun CC takes the address 45925 of an argument of type `double' and passes this pointer of type 45926 `double *' to a function compiled with GCC, dereferencing the 45927 pointer may cause a fatal signal. 45928 45929 One way to solve this problem is to compile your entire program 45930 with GCC. Another solution is to modify the function that is 45931 compiled with Sun CC to copy the argument into a local variable; 45932 local variables are always properly aligned. A third solution is 45933 to modify the function that uses the pointer to dereference it via 45934 the following function `access_double' instead of directly with 45935 `*': 45936 45937 inline double 45938 access_double (double *unaligned_ptr) 45939 { 45940 union d2i { double d; int i[2]; }; 45941 45942 union d2i *p = (union d2i *) unaligned_ptr; 45943 union d2i u; 45944 45945 u.i[0] = p->i[0]; 45946 u.i[1] = p->i[1]; 45947 45948 return u.d; 45949 } 45950 45951 Storing into the pointer can be done likewise with the same union. 45952 45953 * On Solaris, the `malloc' function in the `libmalloc.a' library may 45954 allocate memory that is only 4 byte aligned. Since GCC on the 45955 SPARC assumes that doubles are 8 byte aligned, this may result in a 45956 fatal signal if doubles are stored in memory allocated by the 45957 `libmalloc.a' library. 45958 45959 The solution is to not use the `libmalloc.a' library. Use instead 45960 `malloc' and related functions from `libc.a'; they do not have 45961 this problem. 45962 45963 * On the HP PA machine, ADB sometimes fails to work on functions 45964 compiled with GCC. Specifically, it fails to work on functions 45965 that use `alloca' or variable-size arrays. This is because GCC 45966 doesn't generate HP-UX unwind descriptors for such functions. It 45967 may even be impossible to generate them. 45968 45969 * Debugging (`-g') is not supported on the HP PA machine, unless you 45970 use the preliminary GNU tools. 45971 45972 * Taking the address of a label may generate errors from the HP-UX 45973 PA assembler. GAS for the PA does not have this problem. 45974 45975 * Using floating point parameters for indirect calls to static 45976 functions will not work when using the HP assembler. There simply 45977 is no way for GCC to specify what registers hold arguments for 45978 static functions when using the HP assembler. GAS for the PA does 45979 not have this problem. 45980 45981 * In extremely rare cases involving some very large functions you may 45982 receive errors from the HP linker complaining about an out of 45983 bounds unconditional branch offset. This used to occur more often 45984 in previous versions of GCC, but is now exceptionally rare. If 45985 you should run into it, you can work around by making your 45986 function smaller. 45987 45988 * GCC compiled code sometimes emits warnings from the HP-UX 45989 assembler of the form: 45990 45991 (warning) Use of GR3 when 45992 frame >= 8192 may cause conflict. 45993 45994 These warnings are harmless and can be safely ignored. 45995 45996 * In extremely rare cases involving some very large functions you may 45997 receive errors from the AIX Assembler complaining about a 45998 displacement that is too large. If you should run into it, you 45999 can work around by making your function smaller. 46000 46001 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 46002 semantics which merges global symbols between libraries and 46003 applications, especially necessary for C++ streams functionality. 46004 This is not the default behavior of AIX shared libraries and 46005 dynamic linking. `libstdc++.a' is built on AIX with 46006 "runtime-linking" enabled so that symbol merging can occur. To 46007 utilize this feature, the application linked with `libstdc++.a' 46008 must include the `-Wl,-brtl' flag on the link line. G++ cannot 46009 impose this because this option may interfere with the semantics 46010 of the user program and users may not always use `g++' to link his 46011 or her application. Applications are not required to use the 46012 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 46013 library which is not dependent on the symbol merging semantics 46014 will continue to function correctly. 46015 46016 * An application can interpose its own definition of functions for 46017 functions invoked by `libstdc++.a' with "runtime-linking" enabled 46018 on AIX. To accomplish this the application must be linked with 46019 "runtime-linking" option and the functions explicitly must be 46020 exported by the application (`-Wl,-brtl,-bE:exportfile'). 46021 46022 * AIX on the RS/6000 provides support (NLS) for environments outside 46023 of the United States. Compilers and assemblers use NLS to support 46024 locale-specific representations of various objects including 46025 floating-point numbers (`.' vs `,' for separating decimal 46026 fractions). There have been problems reported where the library 46027 linked with GCC does not produce the same floating-point formats 46028 that the assembler accepts. If you have this problem, set the 46029 `LANG' environment variable to `C' or `En_US'. 46030 46031 * Even if you specify `-fdollars-in-identifiers', you cannot 46032 successfully use `$' in identifiers on the RS/6000 due to a 46033 restriction in the IBM assembler. GAS supports these identifiers. 46034 46035 46036 46037File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 46038 4603911.3 Incompatibilities of GCC 46040============================= 46041 46042There are several noteworthy incompatibilities between GNU C and K&R 46043(non-ISO) versions of C. 46044 46045 * GCC normally makes string constants read-only. If several 46046 identical-looking string constants are used, GCC stores only one 46047 copy of the string. 46048 46049 One consequence is that you cannot call `mktemp' with a string 46050 constant argument. The function `mktemp' always alters the string 46051 its argument points to. 46052 46053 Another consequence is that `sscanf' does not work on some very 46054 old systems when passed a string constant as its format control 46055 string or input. This is because `sscanf' incorrectly tries to 46056 write into the string constant. Likewise `fscanf' and `scanf'. 46057 46058 The solution to these problems is to change the program to use 46059 `char'-array variables with initialization strings for these 46060 purposes instead of string constants. 46061 46062 * `-2147483648' is positive. 46063 46064 This is because 2147483648 cannot fit in the type `int', so 46065 (following the ISO C rules) its data type is `unsigned long int'. 46066 Negating this value yields 2147483648 again. 46067 46068 * GCC does not substitute macro arguments when they appear inside of 46069 string constants. For example, the following macro in GCC 46070 46071 #define foo(a) "a" 46072 46073 will produce output `"a"' regardless of what the argument A is. 46074 46075 * When you use `setjmp' and `longjmp', the only automatic variables 46076 guaranteed to remain valid are those declared `volatile'. This is 46077 a consequence of automatic register allocation. Consider this 46078 function: 46079 46080 jmp_buf j; 46081 46082 foo () 46083 { 46084 int a, b; 46085 46086 a = fun1 (); 46087 if (setjmp (j)) 46088 return a; 46089 46090 a = fun2 (); 46091 /* `longjmp (j)' may occur in `fun3'. */ 46092 return a + fun3 (); 46093 } 46094 46095 Here `a' may or may not be restored to its first value when the 46096 `longjmp' occurs. If `a' is allocated in a register, then its 46097 first value is restored; otherwise, it keeps the last value stored 46098 in it. 46099 46100 If you use the `-W' option with the `-O' option, you will get a 46101 warning when GCC thinks such a problem might be possible. 46102 46103 * Programs that use preprocessing directives in the middle of macro 46104 arguments do not work with GCC. For example, a program like this 46105 will not work: 46106 46107 foobar ( 46108 #define luser 46109 hack) 46110 46111 ISO C does not permit such a construct. 46112 46113 * K&R compilers allow comments to cross over an inclusion boundary 46114 (i.e. started in an include file and ended in the including file). 46115 46116 * Declarations of external variables and functions within a block 46117 apply only to the block containing the declaration. In other 46118 words, they have the same scope as any other declaration in the 46119 same place. 46120 46121 In some other C compilers, an `extern' declaration affects all the 46122 rest of the file even if it happens within a block. 46123 46124 * In traditional C, you can combine `long', etc., with a typedef 46125 name, as shown here: 46126 46127 typedef int foo; 46128 typedef long foo bar; 46129 46130 In ISO C, this is not allowed: `long' and other type modifiers 46131 require an explicit `int'. 46132 46133 * PCC allows typedef names to be used as function parameters. 46134 46135 * Traditional C allows the following erroneous pair of declarations 46136 to appear together in a given scope: 46137 46138 typedef int foo; 46139 typedef foo foo; 46140 46141 * GCC treats all characters of identifiers as significant. 46142 According to K&R-1 (2.2), "No more than the first eight characters 46143 are significant, although more may be used.". Also according to 46144 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 46145 the first character must be a letter. The underscore _ counts as 46146 a letter.", but GCC also allows dollar signs in identifiers. 46147 46148 * PCC allows whitespace in the middle of compound assignment 46149 operators such as `+='. GCC, following the ISO standard, does not 46150 allow this. 46151 46152 * GCC complains about unterminated character constants inside of 46153 preprocessing conditionals that fail. Some programs have English 46154 comments enclosed in conditionals that are guaranteed to fail; if 46155 these comments contain apostrophes, GCC will probably report an 46156 error. For example, this code would produce an error: 46157 46158 #if 0 46159 You can't expect this to work. 46160 #endif 46161 46162 The best solution to such a problem is to put the text into an 46163 actual C comment delimited by `/*...*/'. 46164 46165 * Many user programs contain the declaration `long time ();'. In the 46166 past, the system header files on many systems did not actually 46167 declare `time', so it did not matter what type your program 46168 declared it to return. But in systems with ISO C headers, `time' 46169 is declared to return `time_t', and if that is not the same as 46170 `long', then `long time ();' is erroneous. 46171 46172 The solution is to change your program to use appropriate system 46173 headers (`<time.h>' on systems with ISO C headers) and not to 46174 declare `time' if the system header files declare it, or failing 46175 that to use `time_t' as the return type of `time'. 46176 46177 * When compiling functions that return `float', PCC converts it to a 46178 double. GCC actually returns a `float'. If you are concerned 46179 with PCC compatibility, you should declare your functions to return 46180 `double'; you might as well say what you mean. 46181 46182 * When compiling functions that return structures or unions, GCC 46183 output code normally uses a method different from that used on most 46184 versions of Unix. As a result, code compiled with GCC cannot call 46185 a structure-returning function compiled with PCC, and vice versa. 46186 46187 The method used by GCC is as follows: a structure or union which is 46188 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 46189 union with any other size is stored into an address supplied by 46190 the caller (usually in a special, fixed register, but on some 46191 machines it is passed on the stack). The target hook 46192 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 46193 46194 By contrast, PCC on most target machines returns structures and 46195 unions of any size by copying the data into an area of static 46196 storage, and then returning the address of that storage as if it 46197 were a pointer value. The caller must copy the data from that 46198 memory area to the place where the value is wanted. GCC does not 46199 use this method because it is slower and nonreentrant. 46200 46201 On some newer machines, PCC uses a reentrant convention for all 46202 structure and union returning. GCC on most of these machines uses 46203 a compatible convention when returning structures and unions in 46204 memory, but still returns small structures and unions in registers. 46205 46206 You can tell GCC to use a compatible convention for all structure 46207 and union returning with the option `-fpcc-struct-return'. 46208 46209 * GCC complains about program fragments such as `0x74ae-0x4000' 46210 which appear to be two hexadecimal constants separated by the minus 46211 operator. Actually, this string is a single "preprocessing token". 46212 Each such token must correspond to one token in C. Since this 46213 does not, GCC prints an error message. Although it may appear 46214 obvious that what is meant is an operator and two values, the ISO 46215 C standard specifically requires that this be treated as erroneous. 46216 46217 A "preprocessing token" is a "preprocessing number" if it begins 46218 with a digit and is followed by letters, underscores, digits, 46219 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 46220 character sequences. (In strict C90 mode, the sequences `p+', 46221 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 46222 46223 To make the above program fragment valid, place whitespace in 46224 front of the minus sign. This whitespace will end the 46225 preprocessing number. 46226 46227 46228File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 46229 4623011.4 Fixed Header Files 46231======================= 46232 46233GCC needs to install corrected versions of some system header files. 46234This is because most target systems have some header files that won't 46235work with GCC unless they are changed. Some have bugs, some are 46236incompatible with ISO C, and some depend on special features of other 46237compilers. 46238 46239 Installing GCC automatically creates and installs the fixed header 46240files, by running a program called `fixincludes'. Normally, you don't 46241need to pay attention to this. But there are cases where it doesn't do 46242the right thing automatically. 46243 46244 * If you update the system's header files, such as by installing a 46245 new system version, the fixed header files of GCC are not 46246 automatically updated. They can be updated using the `mkheaders' 46247 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 46248 46249 * On some systems, header file directories contain machine-specific 46250 symbolic links in certain places. This makes it possible to share 46251 most of the header files among hosts running the same version of 46252 the system on different machine models. 46253 46254 The programs that fix the header files do not understand this 46255 special way of using symbolic links; therefore, the directory of 46256 fixed header files is good only for the machine model used to 46257 build it. 46258 46259 It is possible to make separate sets of fixed header files for the 46260 different machine models, and arrange a structure of symbolic 46261 links so as to use the proper set, but you'll have to do this by 46262 hand. 46263 46264 46265File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 46266 4626711.5 Standard Libraries 46268======================= 46269 46270GCC by itself attempts to be a conforming freestanding implementation. 46271*Note Language Standards Supported by GCC: Standards, for details of 46272what this means. Beyond the library facilities required of such an 46273implementation, the rest of the C library is supplied by the vendor of 46274the operating system. If that C library doesn't conform to the C 46275standards, then your programs might get warnings (especially when using 46276`-Wall') that you don't expect. 46277 46278 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 46279while the C standard says that `sprintf' returns an `int'. The 46280`fixincludes' program could make the prototype for this function match 46281the Standard, but that would be wrong, since the function will still 46282return `char *'. 46283 46284 If you need a Standard compliant library, then you need to find one, as 46285GCC does not provide one. The GNU C library (called `glibc') provides 46286ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 46287HURD-based GNU systems; no recent version of it supports other systems, 46288though some very old versions did. Version 2.2 of the GNU C library 46289includes nearly complete C99 support. You could also ask your 46290operating system vendor if newer libraries are available. 46291 46292 46293File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 46294 4629511.6 Disappointments and Misunderstandings 46296========================================== 46297 46298These problems are perhaps regrettable, but we don't know any practical 46299way around them. 46300 46301 * Certain local variables aren't recognized by debuggers when you 46302 compile with optimization. 46303 46304 This occurs because sometimes GCC optimizes the variable out of 46305 existence. There is no way to tell the debugger how to compute the 46306 value such a variable "would have had", and it is not clear that 46307 would be desirable anyway. So GCC simply does not mention the 46308 eliminated variable when it writes debugging information. 46309 46310 You have to expect a certain amount of disagreement between the 46311 executable and your source code, when you use optimization. 46312 46313 * Users often think it is a bug when GCC reports an error for code 46314 like this: 46315 46316 int foo (struct mumble *); 46317 46318 struct mumble { ... }; 46319 46320 int foo (struct mumble *x) 46321 { ... } 46322 46323 This code really is erroneous, because the scope of `struct 46324 mumble' in the prototype is limited to the argument list 46325 containing it. It does not refer to the `struct mumble' defined 46326 with file scope immediately below--they are two unrelated types 46327 with similar names in different scopes. 46328 46329 But in the definition of `foo', the file-scope type is used 46330 because that is available to be inherited. Thus, the definition 46331 and the prototype do not match, and you get an error. 46332 46333 This behavior may seem silly, but it's what the ISO standard 46334 specifies. It is easy enough for you to make your code work by 46335 moving the definition of `struct mumble' above the prototype. 46336 It's not worth being incompatible with ISO C just to avoid an 46337 error for the example shown above. 46338 46339 * Accesses to bit-fields even in volatile objects works by accessing 46340 larger objects, such as a byte or a word. You cannot rely on what 46341 size of object is accessed in order to read or write the 46342 bit-field; it may even vary for a given bit-field according to the 46343 precise usage. 46344 46345 If you care about controlling the amount of memory that is 46346 accessed, use volatile but do not use bit-fields. 46347 46348 * GCC comes with shell scripts to fix certain known problems in 46349 system header files. They install corrected copies of various 46350 header files in a special directory where only GCC will normally 46351 look for them. The scripts adapt to various systems by searching 46352 all the system header files for the problem cases that we know 46353 about. 46354 46355 If new system header files are installed, nothing automatically 46356 arranges to update the corrected header files. They can be 46357 updated using the `mkheaders' script installed in 46358 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 46359 46360 * On 68000 and x86 systems, for instance, you can get paradoxical 46361 results if you test the precise values of floating point numbers. 46362 For example, you can find that a floating point value which is not 46363 a NaN is not equal to itself. This results from the fact that the 46364 floating point registers hold a few more bits of precision than 46365 fit in a `double' in memory. Compiled code moves values between 46366 memory and floating point registers at its convenience, and moving 46367 them into memory truncates them. 46368 46369 You can partially avoid this problem by using the `-ffloat-store' 46370 option (*note Optimize Options::). 46371 46372 * On AIX and other platforms without weak symbol support, templates 46373 need to be instantiated explicitly and symbols for static members 46374 of templates will not be generated. 46375 46376 * On AIX, GCC scans object files and library archives for static 46377 constructors and destructors when linking an application before the 46378 linker prunes unreferenced symbols. This is necessary to prevent 46379 the AIX linker from mistakenly assuming that static constructor or 46380 destructor are unused and removing them before the scanning can 46381 occur. All static constructors and destructors found will be 46382 referenced even though the modules in which they occur may not be 46383 used by the program. This may lead to both increased executable 46384 size and unexpected symbol references. 46385 46386 46387File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble 46388 4638911.7 Common Misunderstandings with GNU C++ 46390========================================== 46391 46392C++ is a complex language and an evolving one, and its standard 46393definition (the ISO C++ standard) was only recently completed. As a 46394result, your C++ compiler may occasionally surprise you, even when its 46395behavior is correct. This section discusses some areas that frequently 46396give rise to questions of this sort. 46397 46398* Menu: 46399 46400* Static Definitions:: Static member declarations are not definitions 46401* Name lookup:: Name lookup, templates, and accessing members of base classes 46402* Temporaries:: Temporaries may vanish before you expect 46403* Copy Assignment:: Copy Assignment operators copy virtual bases twice 46404 46405 46406File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 46407 4640811.7.1 Declare _and_ Define Static Members 46409------------------------------------------ 46410 46411When a class has static data members, it is not enough to _declare_ the 46412static member; you must also _define_ it. For example: 46413 46414 class Foo 46415 { 46416 ... 46417 void method(); 46418 static int bar; 46419 }; 46420 46421 This declaration only establishes that the class `Foo' has an `int' 46422named `Foo::bar', and a member function named `Foo::method'. But you 46423still need to define _both_ `method' and `bar' elsewhere. According to 46424the ISO standard, you must supply an initializer in one (and only one) 46425source file, such as: 46426 46427 int Foo::bar = 0; 46428 46429 Other C++ compilers may not correctly implement the standard behavior. 46430As a result, when you switch to `g++' from one of these compilers, you 46431may discover that a program that appeared to work correctly in fact 46432does not conform to the standard: `g++' reports as undefined symbols 46433any static data members that lack definitions. 46434 46435 46436File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 46437 4643811.7.2 Name lookup, templates, and accessing members of base classes 46439-------------------------------------------------------------------- 46440 46441The C++ standard prescribes that all names that are not dependent on 46442template parameters are bound to their present definitions when parsing 46443a template function or class.(1) Only names that are dependent are 46444looked up at the point of instantiation. For example, consider 46445 46446 void foo(double); 46447 46448 struct A { 46449 template <typename T> 46450 void f () { 46451 foo (1); // 1 46452 int i = N; // 2 46453 T t; 46454 t.bar(); // 3 46455 foo (t); // 4 46456 } 46457 46458 static const int N; 46459 }; 46460 46461 Here, the names `foo' and `N' appear in a context that does not depend 46462on the type of `T'. The compiler will thus require that they are 46463defined in the context of use in the template, not only before the 46464point of instantiation, and will here use `::foo(double)' and `A::N', 46465respectively. In particular, it will convert the integer value to a 46466`double' when passing it to `::foo(double)'. 46467 46468 Conversely, `bar' and the call to `foo' in the fourth marked line are 46469used in contexts that do depend on the type of `T', so they are only 46470looked up at the point of instantiation, and you can provide 46471declarations for them after declaring the template, but before 46472instantiating it. In particular, if you instantiate `A::f<int>', the 46473last line will call an overloaded `::foo(int)' if one was provided, 46474even if after the declaration of `struct A'. 46475 46476 This distinction between lookup of dependent and non-dependent names is 46477called two-stage (or dependent) name lookup. G++ implements it since 46478version 3.4. 46479 46480 Two-stage name lookup sometimes leads to situations with behavior 46481different from non-template codes. The most common is probably this: 46482 46483 template <typename T> struct Base { 46484 int i; 46485 }; 46486 46487 template <typename T> struct Derived : public Base<T> { 46488 int get_i() { return i; } 46489 }; 46490 46491 In `get_i()', `i' is not used in a dependent context, so the compiler 46492will look for a name declared at the enclosing namespace scope (which 46493is the global scope here). It will not look into the base class, since 46494that is dependent and you may declare specializations of `Base' even 46495after declaring `Derived', so the compiler can't really know what `i' 46496would refer to. If there is no global variable `i', then you will get 46497an error message. 46498 46499 In order to make it clear that you want the member of the base class, 46500you need to defer lookup until instantiation time, at which the base 46501class is known. For this, you need to access `i' in a dependent 46502context, by either using `this->i' (remember that `this' is of type 46503`Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 46504Alternatively, `Base<T>::i' might be brought into scope by a 46505`using'-declaration. 46506 46507 Another, similar example involves calling member functions of a base 46508class: 46509 46510 template <typename T> struct Base { 46511 int f(); 46512 }; 46513 46514 template <typename T> struct Derived : Base<T> { 46515 int g() { return f(); }; 46516 }; 46517 46518 Again, the call to `f()' is not dependent on template arguments (there 46519are no arguments that depend on the type `T', and it is also not 46520otherwise specified that the call should be in a dependent context). 46521Thus a global declaration of such a function must be available, since 46522the one in the base class is not visible until instantiation time. The 46523compiler will consequently produce the following error message: 46524 46525 x.cc: In member function `int Derived<T>::g()': 46526 x.cc:6: error: there are no arguments to `f' that depend on a template 46527 parameter, so a declaration of `f' must be available 46528 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 46529 allowing the use of an undeclared name is deprecated) 46530 46531 To make the code valid either use `this->f()', or `Base<T>::f()'. 46532Using the `-fpermissive' flag will also let the compiler accept the 46533code, by marking all function calls for which no declaration is visible 46534at the time of definition of the template for later lookup at 46535instantiation time, as if it were a dependent call. We do not 46536recommend using `-fpermissive' to work around invalid code, and it will 46537also only catch cases where functions in base classes are called, not 46538where variables in base classes are used (as in the example above). 46539 46540 Note that some compilers (including G++ versions prior to 3.4) get 46541these examples wrong and accept above code without an error. Those 46542compilers do not implement two-stage name lookup correctly. 46543 46544 ---------- Footnotes ---------- 46545 46546 (1) The C++ standard just uses the term "dependent" for names that 46547depend on the type or value of template parameters. This shorter term 46548will also be used in the rest of this section. 46549 46550 46551File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 46552 4655311.7.3 Temporaries May Vanish Before You Expect 46554----------------------------------------------- 46555 46556It is dangerous to use pointers or references to _portions_ of a 46557temporary object. The compiler may very well delete the object before 46558you expect it to, leaving a pointer to garbage. The most common place 46559where this problem crops up is in classes like string classes, 46560especially ones that define a conversion function to type `char *' or 46561`const char *'--which is one reason why the standard `string' class 46562requires you to call the `c_str' member function. However, any class 46563that returns a pointer to some internal structure is potentially 46564subject to this problem. 46565 46566 For example, a program may use a function `strfunc' that returns 46567`string' objects, and another function `charfunc' that operates on 46568pointers to `char': 46569 46570 string strfunc (); 46571 void charfunc (const char *); 46572 46573 void 46574 f () 46575 { 46576 const char *p = strfunc().c_str(); 46577 ... 46578 charfunc (p); 46579 ... 46580 charfunc (p); 46581 } 46582 46583In this situation, it may seem reasonable to save a pointer to the C 46584string returned by the `c_str' member function and use that rather than 46585call `c_str' repeatedly. However, the temporary string created by the 46586call to `strfunc' is destroyed after `p' is initialized, at which point 46587`p' is left pointing to freed memory. 46588 46589 Code like this may run successfully under some other compilers, 46590particularly obsolete cfront-based compilers that delete temporaries 46591along with normal local variables. However, the GNU C++ behavior is 46592standard-conforming, so if your program depends on late destruction of 46593temporaries it is not portable. 46594 46595 The safe way to write such code is to give the temporary a name, which 46596forces it to remain until the end of the scope of the name. For 46597example: 46598 46599 const string& tmp = strfunc (); 46600 charfunc (tmp.c_str ()); 46601 46602 46603File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 46604 4660511.7.4 Implicit Copy-Assignment for Virtual Bases 46606------------------------------------------------- 46607 46608When a base class is virtual, only one subobject of the base class 46609belongs to each full object. Also, the constructors and destructors are 46610invoked only once, and called from the most-derived class. However, 46611such objects behave unspecified when being assigned. For example: 46612 46613 struct Base{ 46614 char *name; 46615 Base(char *n) : name(strdup(n)){} 46616 Base& operator= (const Base& other){ 46617 free (name); 46618 name = strdup (other.name); 46619 } 46620 }; 46621 46622 struct A:virtual Base{ 46623 int val; 46624 A():Base("A"){} 46625 }; 46626 46627 struct B:virtual Base{ 46628 int bval; 46629 B():Base("B"){} 46630 }; 46631 46632 struct Derived:public A, public B{ 46633 Derived():Base("Derived"){} 46634 }; 46635 46636 void func(Derived &d1, Derived &d2) 46637 { 46638 d1 = d2; 46639 } 46640 46641 The C++ standard specifies that `Base::Base' is only called once when 46642constructing or copy-constructing a Derived object. It is unspecified 46643whether `Base::operator=' is called more than once when the implicit 46644copy-assignment for Derived objects is invoked (as it is inside `func' 46645in the example). 46646 46647 G++ implements the "intuitive" algorithm for copy-assignment: assign 46648all direct bases, then assign all members. In that algorithm, the 46649virtual base subobject can be encountered more than once. In the 46650example, copying proceeds in the following order: `val', `name' (via 46651`strdup'), `bval', and `name' again. 46652 46653 If application code relies on copy-assignment, a user-defined 46654copy-assignment operator removes any uncertainties. With such an 46655operator, the application can define whether and how the virtual base 46656subobject is assigned. 46657 46658 46659File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble 46660 4666111.8 Certain Changes We Don't Want to Make 46662========================================== 46663 46664This section lists changes that people frequently request, but which we 46665do not make because we think GCC is better without them. 46666 46667 * Checking the number and type of arguments to a function which has 46668 an old-fashioned definition and no prototype. 46669 46670 Such a feature would work only occasionally--only for calls that 46671 appear in the same file as the called function, following the 46672 definition. The only way to check all calls reliably is to add a 46673 prototype for the function. But adding a prototype eliminates the 46674 motivation for this feature. So the feature is not worthwhile. 46675 46676 * Warning about using an expression whose type is signed as a shift 46677 count. 46678 46679 Shift count operands are probably signed more often than unsigned. 46680 Warning about this would cause far more annoyance than good. 46681 46682 * Warning about assigning a signed value to an unsigned variable. 46683 46684 Such assignments must be very common; warning about them would 46685 cause more annoyance than good. 46686 46687 * Warning when a non-void function value is ignored. 46688 46689 C contains many standard functions that return a value that most 46690 programs choose to ignore. One obvious example is `printf'. 46691 Warning about this practice only leads the defensive programmer to 46692 clutter programs with dozens of casts to `void'. Such casts are 46693 required so frequently that they become visual noise. Writing 46694 those casts becomes so automatic that they no longer convey useful 46695 information about the intentions of the programmer. For functions 46696 where the return value should never be ignored, use the 46697 `warn_unused_result' function attribute (*note Function 46698 Attributes::). 46699 46700 * Making `-fshort-enums' the default. 46701 46702 This would cause storage layout to be incompatible with most other 46703 C compilers. And it doesn't seem very important, given that you 46704 can get the same result in other ways. The case where it matters 46705 most is when the enumeration-valued object is inside a structure, 46706 and in that case you can specify a field width explicitly. 46707 46708 * Making bit-fields unsigned by default on particular machines where 46709 "the ABI standard" says to do so. 46710 46711 The ISO C standard leaves it up to the implementation whether a 46712 bit-field declared plain `int' is signed or not. This in effect 46713 creates two alternative dialects of C. 46714 46715 The GNU C compiler supports both dialects; you can specify the 46716 signed dialect with `-fsigned-bitfields' and the unsigned dialect 46717 with `-funsigned-bitfields'. However, this leaves open the 46718 question of which dialect to use by default. 46719 46720 Currently, the preferred dialect makes plain bit-fields signed, 46721 because this is simplest. Since `int' is the same as `signed int' 46722 in every other context, it is cleanest for them to be the same in 46723 bit-fields as well. 46724 46725 Some computer manufacturers have published Application Binary 46726 Interface standards which specify that plain bit-fields should be 46727 unsigned. It is a mistake, however, to say anything about this 46728 issue in an ABI. This is because the handling of plain bit-fields 46729 distinguishes two dialects of C. Both dialects are meaningful on 46730 every type of machine. Whether a particular object file was 46731 compiled using signed bit-fields or unsigned is of no concern to 46732 other object files, even if they access the same bit-fields in the 46733 same data structures. 46734 46735 A given program is written in one or the other of these two 46736 dialects. The program stands a chance to work on most any machine 46737 if it is compiled with the proper dialect. It is unlikely to work 46738 at all if compiled with the wrong dialect. 46739 46740 Many users appreciate the GNU C compiler because it provides an 46741 environment that is uniform across machines. These users would be 46742 inconvenienced if the compiler treated plain bit-fields 46743 differently on certain machines. 46744 46745 Occasionally users write programs intended only for a particular 46746 machine type. On these occasions, the users would benefit if the 46747 GNU C compiler were to support by default the same dialect as the 46748 other compilers on that machine. But such applications are rare. 46749 And users writing a program to run on more than one type of 46750 machine cannot possibly benefit from this kind of compatibility. 46751 46752 This is why GCC does and will treat plain bit-fields in the same 46753 fashion on all types of machines (by default). 46754 46755 There are some arguments for making bit-fields unsigned by default 46756 on all machines. If, for example, this becomes a universal de 46757 facto standard, it would make sense for GCC to go along with it. 46758 This is something to be considered in the future. 46759 46760 (Of course, users strongly concerned about portability should 46761 indicate explicitly in each bit-field whether it is signed or not. 46762 In this way, they write programs which have the same meaning in 46763 both C dialects.) 46764 46765 * Undefining `__STDC__' when `-ansi' is not used. 46766 46767 Currently, GCC defines `__STDC__' unconditionally. This provides 46768 good results in practice. 46769 46770 Programmers normally use conditionals on `__STDC__' to ask whether 46771 it is safe to use certain features of ISO C, such as function 46772 prototypes or ISO token concatenation. Since plain `gcc' supports 46773 all the features of ISO C, the correct answer to these questions is 46774 "yes". 46775 46776 Some users try to use `__STDC__' to check for the availability of 46777 certain library facilities. This is actually incorrect usage in 46778 an ISO C program, because the ISO C standard says that a conforming 46779 freestanding implementation should define `__STDC__' even though it 46780 does not have the library facilities. `gcc -ansi -pedantic' is a 46781 conforming freestanding implementation, and it is therefore 46782 required to define `__STDC__', even though it does not come with 46783 an ISO C library. 46784 46785 Sometimes people say that defining `__STDC__' in a compiler that 46786 does not completely conform to the ISO C standard somehow violates 46787 the standard. This is illogical. The standard is a standard for 46788 compilers that claim to support ISO C, such as `gcc -ansi'--not 46789 for other compilers such as plain `gcc'. Whatever the ISO C 46790 standard says is relevant to the design of plain `gcc' without 46791 `-ansi' only for pragmatic reasons, not as a requirement. 46792 46793 GCC normally defines `__STDC__' to be 1, and in addition defines 46794 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 46795 option for strict conformance to some version of ISO C. On some 46796 hosts, system include files use a different convention, where 46797 `__STDC__' is normally 0, but is 1 if the user specifies strict 46798 conformance to the C Standard. GCC follows the host convention 46799 when processing system include files, but when processing user 46800 files it follows the usual GNU C convention. 46801 46802 * Undefining `__STDC__' in C++. 46803 46804 Programs written to compile with C++-to-C translators get the 46805 value of `__STDC__' that goes with the C compiler that is 46806 subsequently used. These programs must test `__STDC__' to 46807 determine what kind of C preprocessor that compiler uses: whether 46808 they should concatenate tokens in the ISO C fashion or in the 46809 traditional fashion. 46810 46811 These programs work properly with GNU C++ if `__STDC__' is defined. 46812 They would not work otherwise. 46813 46814 In addition, many header files are written to provide prototypes 46815 in ISO C but not in traditional C. Many of these header files can 46816 work without change in C++ provided `__STDC__' is defined. If 46817 `__STDC__' is not defined, they will all fail, and will all need 46818 to be changed to test explicitly for C++ as well. 46819 46820 * Deleting "empty" loops. 46821 46822 Historically, GCC has not deleted "empty" loops under the 46823 assumption that the most likely reason you would put one in a 46824 program is to have a delay, so deleting them will not make real 46825 programs run any faster. 46826 46827 However, the rationale here is that optimization of a nonempty loop 46828 cannot produce an empty one. This held for carefully written C 46829 compiled with less powerful optimizers but is not always the case 46830 for carefully written C++ or with more powerful optimizers. Thus 46831 GCC will remove operations from loops whenever it can determine 46832 those operations are not externally visible (apart from the time 46833 taken to execute them, of course). In case the loop can be proved 46834 to be finite, GCC will also remove the loop itself. 46835 46836 Be aware of this when performing timing tests, for instance the 46837 following loop can be completely removed, provided 46838 `some_expression' can provably not change any global state. 46839 46840 { 46841 int sum = 0; 46842 int ix; 46843 46844 for (ix = 0; ix != 10000; ix++) 46845 sum += some_expression; 46846 } 46847 46848 Even though `sum' is accumulated in the loop, no use is made of 46849 that summation, so the accumulation can be removed. 46850 46851 * Making side effects happen in the same order as in some other 46852 compiler. 46853 46854 It is never safe to depend on the order of evaluation of side 46855 effects. For example, a function call like this may very well 46856 behave differently from one compiler to another: 46857 46858 void func (int, int); 46859 46860 int i = 2; 46861 func (i++, i++); 46862 46863 There is no guarantee (in either the C or the C++ standard language 46864 definitions) that the increments will be evaluated in any 46865 particular order. Either increment might happen first. `func' 46866 might get the arguments `2, 3', or it might get `3, 2', or even 46867 `2, 2'. 46868 46869 * Making certain warnings into errors by default. 46870 46871 Some ISO C testsuites report failure when the compiler does not 46872 produce an error message for a certain program. 46873 46874 ISO C requires a "diagnostic" message for certain kinds of invalid 46875 programs, but a warning is defined by GCC to count as a 46876 diagnostic. If GCC produces a warning but not an error, that is 46877 correct ISO C support. If testsuites call this "failure", they 46878 should be run with the GCC option `-pedantic-errors', which will 46879 turn these warnings into errors. 46880 46881 46882 46883File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 46884 4688511.9 Warning Messages and Error Messages 46886======================================== 46887 46888The GNU compiler can produce two kinds of diagnostics: errors and 46889warnings. Each kind has a different purpose: 46890 46891 "Errors" report problems that make it impossible to compile your 46892 program. GCC reports errors with the source file name and line 46893 number where the problem is apparent. 46894 46895 "Warnings" report other unusual conditions in your code that _may_ 46896 indicate a problem, although compilation can (and does) proceed. 46897 Warning messages also report the source file name and line number, 46898 but include the text `warning:' to distinguish them from error 46899 messages. 46900 46901 Warnings may indicate danger points where you should check to make sure 46902that your program really does what you intend; or the use of obsolete 46903features; or the use of nonstandard features of GNU C or C++. Many 46904warnings are issued only if you ask for them, with one of the `-W' 46905options (for instance, `-Wall' requests a variety of useful warnings). 46906 46907 GCC always tries to compile your program if possible; it never 46908gratuitously rejects a program whose meaning is clear merely because 46909(for instance) it fails to conform to a standard. In some cases, 46910however, the C and C++ standards specify that certain extensions are 46911forbidden, and a diagnostic _must_ be issued by a conforming compiler. 46912The `-pedantic' option tells GCC to issue warnings in such cases; 46913`-pedantic-errors' says to make them errors instead. This does not 46914mean that _all_ non-ISO constructs get warnings or errors. 46915 46916 *Note Options to Request or Suppress Warnings: Warning Options, for 46917more detail on these and related command-line options. 46918 46919 46920File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 46921 4692212 Reporting Bugs 46923***************** 46924 46925Your bug reports play an essential role in making GCC reliable. 46926 46927 When you encounter a problem, the first thing to do is to see if it is 46928already known. *Note Trouble::. If it isn't known, then you should 46929report the problem. 46930 46931* Menu: 46932 46933* Criteria: Bug Criteria. Have you really found a bug? 46934* Reporting: Bug Reporting. How to report a bug effectively. 46935* Known: Trouble. Known problems. 46936* Help: Service. Where to ask for help. 46937 46938 46939File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 46940 4694112.1 Have You Found a Bug? 46942========================== 46943 46944If you are not sure whether you have found a bug, here are some 46945guidelines: 46946 46947 * If the compiler gets a fatal signal, for any input whatever, that 46948 is a compiler bug. Reliable compilers never crash. 46949 46950 * If the compiler produces invalid assembly code, for any input 46951 whatever (except an `asm' statement), that is a compiler bug, 46952 unless the compiler reports errors (not just warnings) which would 46953 ordinarily prevent the assembler from being run. 46954 46955 * If the compiler produces valid assembly code that does not 46956 correctly execute the input source code, that is a compiler bug. 46957 46958 However, you must double-check to make sure, because you may have a 46959 program whose behavior is undefined, which happened by chance to 46960 give the desired results with another C or C++ compiler. 46961 46962 For example, in many nonoptimizing compilers, you can write `x;' 46963 at the end of a function instead of `return x;', with the same 46964 results. But the value of the function is undefined if `return' 46965 is omitted; it is not a bug when GCC produces different results. 46966 46967 Problems often result from expressions with two increment 46968 operators, as in `f (*p++, *p++)'. Your previous compiler might 46969 have interpreted that expression the way you intended; GCC might 46970 interpret it another way. Neither compiler is wrong. The bug is 46971 in your code. 46972 46973 After you have localized the error to a single source line, it 46974 should be easy to check for these things. If your program is 46975 correct and well defined, you have found a compiler bug. 46976 46977 * If the compiler produces an error message for valid input, that is 46978 a compiler bug. 46979 46980 * If the compiler does not produce an error message for invalid 46981 input, that is a compiler bug. However, you should note that your 46982 idea of "invalid input" might be someone else's idea of "an 46983 extension" or "support for traditional practice". 46984 46985 * If you are an experienced user of one of the languages GCC 46986 supports, your suggestions for improvement of GCC are welcome in 46987 any case. 46988 46989 46990File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 46991 4699212.2 How and where to Report Bugs 46993================================= 46994 46995Bugs should be reported to the bug database at 46996`http://gcc.gnu.org/bugs.html'. 46997 46998 46999File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 47000 4700113 How To Get Help with GCC 47002*************************** 47003 47004If you need help installing, using or changing GCC, there are two ways 47005to find it: 47006 47007 * Send a message to a suitable network mailing list. First try 47008 <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if 47009 that brings no response, try <gcc@gcc.gnu.org>. For help changing 47010 GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in 47011 GCC, please report it following the instructions at *note Bug 47012 Reporting::. 47013 47014 * Look in the service directory for someone who might help you for a 47015 fee. The service directory is found at 47016 `http://www.fsf.org/resources/service'. 47017 47018 For further information, see `http://gcc.gnu.org/faq.html#support'. 47019 47020 47021File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 47022 4702314 Contributing to GCC Development 47024********************************** 47025 47026If you would like to help pretest GCC releases to assure they work well, 47027current development sources are available by SVN (see 47028`http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 47029available for FTP; see `http://gcc.gnu.org/snapshots.html'. 47030 47031 If you would like to work on improvements to GCC, please read the 47032advice at these URLs: 47033 47034 `http://gcc.gnu.org/contribute.html' 47035 `http://gcc.gnu.org/contributewhy.html' 47036 47037for information on how to make useful contributions and avoid 47038duplication of effort. Suggested projects are listed at 47039`http://gcc.gnu.org/projects/'. 47040 47041 47042File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 47043 47044Funding Free Software 47045********************* 47046 47047If you want to have more free software a few years from now, it makes 47048sense for you to help encourage people to contribute funds for its 47049development. The most effective approach known is to encourage 47050commercial redistributors to donate. 47051 47052 Users of free software systems can boost the pace of development by 47053encouraging for-a-fee distributors to donate part of their selling price 47054to free software developers--the Free Software Foundation, and others. 47055 47056 The way to convince distributors to do this is to demand it and expect 47057it from them. So when you compare distributors, judge them partly by 47058how much they give to free software development. Show distributors 47059they must compete to be the one who gives the most. 47060 47061 To make this approach work, you must insist on numbers that you can 47062compare, such as, "We will donate ten dollars to the Frobnitz project 47063for each disk sold." Don't be satisfied with a vague promise, such as 47064"A portion of the profits are donated," since it doesn't give a basis 47065for comparison. 47066 47067 Even a precise fraction "of the profits from this disk" is not very 47068meaningful, since creative accounting and unrelated business decisions 47069can greatly alter what fraction of the sales price counts as profit. 47070If the price you pay is $50, ten percent of the profit is probably less 47071than a dollar; it might be a few cents, or nothing at all. 47072 47073 Some redistributors do development work themselves. This is useful 47074too; but to keep everyone honest, you need to inquire how much they do, 47075and what kind. Some kinds of development make much more long-term 47076difference than others. For example, maintaining a separate version of 47077a program contributes very little; maintaining the standard version of a 47078program for the whole community contributes much. Easy new ports 47079contribute little, since someone else would surely do them; difficult 47080ports such as adding a new CPU to the GNU Compiler Collection 47081contribute more; major new features or packages contribute the most. 47082 47083 By establishing the idea that supporting further development is "the 47084proper thing to do" when distributing free software for a fee, we can 47085assure a steady flow of resources into making more free software. 47086 47087 Copyright (C) 1994 Free Software Foundation, Inc. 47088 Verbatim copying and redistribution of this section is permitted 47089 without royalty; alteration is not permitted. 47090 47091 47092File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 47093 47094The GNU Project and GNU/Linux 47095***************************** 47096 47097The GNU Project was launched in 1984 to develop a complete Unix-like 47098operating system which is free software: the GNU system. (GNU is a 47099recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 47100Variants of the GNU operating system, which use the kernel Linux, are 47101now widely used; though these systems are often referred to as "Linux", 47102they are more accurately called GNU/Linux systems. 47103 47104 For more information, see: 47105 `http://www.gnu.org/' 47106 `http://www.gnu.org/gnu/linux-and-gnu.html' 47107 47108 47109File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 47110 47111GNU General Public License 47112************************** 47113 47114 Version 3, 29 June 2007 47115 47116 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 47117 47118 Everyone is permitted to copy and distribute verbatim copies of this 47119 license document, but changing it is not allowed. 47120 47121Preamble 47122======== 47123 47124The GNU General Public License is a free, copyleft license for software 47125and other kinds of works. 47126 47127 The licenses for most software and other practical works are designed 47128to take away your freedom to share and change the works. By contrast, 47129the GNU General Public License is intended to guarantee your freedom to 47130share and change all versions of a program-to make sure it remains free 47131software for all its users. We, the Free Software Foundation, use the 47132GNU General Public License for most of our software; it applies also to 47133any other work released this way by its authors. You can apply it to 47134your programs, too. 47135 47136 When we speak of free software, we are referring to freedom, not 47137price. Our General Public Licenses are designed to make sure that you 47138have the freedom to distribute copies of free software (and charge for 47139them if you wish), that you receive source code or can get it if you 47140want it, that you can change the software or use pieces of it in new 47141free programs, and that you know you can do these things. 47142 47143 To protect your rights, we need to prevent others from denying you 47144these rights or asking you to surrender the rights. Therefore, you 47145have certain responsibilities if you distribute copies of the software, 47146or if you modify it: responsibilities to respect the freedom of others. 47147 47148 For example, if you distribute copies of such a program, whether 47149gratis or for a fee, you must pass on to the recipients the same 47150freedoms that you received. You must make sure that they, too, receive 47151or can get the source code. And you must show them these terms so they 47152know their rights. 47153 47154 Developers that use the GNU GPL protect your rights with two steps: 47155(1) assert copyright on the software, and (2) offer you this License 47156giving you legal permission to copy, distribute and/or modify it. 47157 47158 For the developers' and authors' protection, the GPL clearly explains 47159that there is no warranty for this free software. For both users' and 47160authors' sake, the GPL requires that modified versions be marked as 47161changed, so that their problems will not be attributed erroneously to 47162authors of previous versions. 47163 47164 Some devices are designed to deny users access to install or run 47165modified versions of the software inside them, although the 47166manufacturer can do so. This is fundamentally incompatible with the 47167aim of protecting users' freedom to change the software. The 47168systematic pattern of such abuse occurs in the area of products for 47169individuals to use, which is precisely where it is most unacceptable. 47170Therefore, we have designed this version of the GPL to prohibit the 47171practice for those products. If such problems arise substantially in 47172other domains, we stand ready to extend this provision to those domains 47173in future versions of the GPL, as needed to protect the freedom of 47174users. 47175 47176 Finally, every program is threatened constantly by software patents. 47177States should not allow patents to restrict development and use of 47178software on general-purpose computers, but in those that do, we wish to 47179avoid the special danger that patents applied to a free program could 47180make it effectively proprietary. To prevent this, the GPL assures that 47181patents cannot be used to render the program non-free. 47182 47183 The precise terms and conditions for copying, distribution and 47184modification follow. 47185 47186TERMS AND CONDITIONS 47187==================== 47188 47189 0. Definitions. 47190 47191 "This License" refers to version 3 of the GNU General Public 47192 License. 47193 47194 "Copyright" also means copyright-like laws that apply to other 47195 kinds of works, such as semiconductor masks. 47196 47197 "The Program" refers to any copyrightable work licensed under this 47198 License. Each licensee is addressed as "you". "Licensees" and 47199 "recipients" may be individuals or organizations. 47200 47201 To "modify" a work means to copy from or adapt all or part of the 47202 work in a fashion requiring copyright permission, other than the 47203 making of an exact copy. The resulting work is called a "modified 47204 version" of the earlier work or a work "based on" the earlier work. 47205 47206 A "covered work" means either the unmodified Program or a work 47207 based on the Program. 47208 47209 To "propagate" a work means to do anything with it that, without 47210 permission, would make you directly or secondarily liable for 47211 infringement under applicable copyright law, except executing it 47212 on a computer or modifying a private copy. Propagation includes 47213 copying, distribution (with or without modification), making 47214 available to the public, and in some countries other activities as 47215 well. 47216 47217 To "convey" a work means any kind of propagation that enables other 47218 parties to make or receive copies. Mere interaction with a user 47219 through a computer network, with no transfer of a copy, is not 47220 conveying. 47221 47222 An interactive user interface displays "Appropriate Legal Notices" 47223 to the extent that it includes a convenient and prominently visible 47224 feature that (1) displays an appropriate copyright notice, and (2) 47225 tells the user that there is no warranty for the work (except to 47226 the extent that warranties are provided), that licensees may 47227 convey the work under this License, and how to view a copy of this 47228 License. If the interface presents a list of user commands or 47229 options, such as a menu, a prominent item in the list meets this 47230 criterion. 47231 47232 1. Source Code. 47233 47234 The "source code" for a work means the preferred form of the work 47235 for making modifications to it. "Object code" means any 47236 non-source form of a work. 47237 47238 A "Standard Interface" means an interface that either is an 47239 official standard defined by a recognized standards body, or, in 47240 the case of interfaces specified for a particular programming 47241 language, one that is widely used among developers working in that 47242 language. 47243 47244 The "System Libraries" of an executable work include anything, 47245 other than the work as a whole, that (a) is included in the normal 47246 form of packaging a Major Component, but which is not part of that 47247 Major Component, and (b) serves only to enable use of the work 47248 with that Major Component, or to implement a Standard Interface 47249 for which an implementation is available to the public in source 47250 code form. A "Major Component", in this context, means a major 47251 essential component (kernel, window system, and so on) of the 47252 specific operating system (if any) on which the executable work 47253 runs, or a compiler used to produce the work, or an object code 47254 interpreter used to run it. 47255 47256 The "Corresponding Source" for a work in object code form means all 47257 the source code needed to generate, install, and (for an executable 47258 work) run the object code and to modify the work, including 47259 scripts to control those activities. However, it does not include 47260 the work's System Libraries, or general-purpose tools or generally 47261 available free programs which are used unmodified in performing 47262 those activities but which are not part of the work. For example, 47263 Corresponding Source includes interface definition files 47264 associated with source files for the work, and the source code for 47265 shared libraries and dynamically linked subprograms that the work 47266 is specifically designed to require, such as by intimate data 47267 communication or control flow between those subprograms and other 47268 parts of the work. 47269 47270 The Corresponding Source need not include anything that users can 47271 regenerate automatically from other parts of the Corresponding 47272 Source. 47273 47274 The Corresponding Source for a work in source code form is that 47275 same work. 47276 47277 2. Basic Permissions. 47278 47279 All rights granted under this License are granted for the term of 47280 copyright on the Program, and are irrevocable provided the stated 47281 conditions are met. This License explicitly affirms your unlimited 47282 permission to run the unmodified Program. The output from running 47283 a covered work is covered by this License only if the output, 47284 given its content, constitutes a covered work. This License 47285 acknowledges your rights of fair use or other equivalent, as 47286 provided by copyright law. 47287 47288 You may make, run and propagate covered works that you do not 47289 convey, without conditions so long as your license otherwise 47290 remains in force. You may convey covered works to others for the 47291 sole purpose of having them make modifications exclusively for 47292 you, or provide you with facilities for running those works, 47293 provided that you comply with the terms of this License in 47294 conveying all material for which you do not control copyright. 47295 Those thus making or running the covered works for you must do so 47296 exclusively on your behalf, under your direction and control, on 47297 terms that prohibit them from making any copies of your 47298 copyrighted material outside their relationship with you. 47299 47300 Conveying under any other circumstances is permitted solely under 47301 the conditions stated below. Sublicensing is not allowed; section 47302 10 makes it unnecessary. 47303 47304 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 47305 47306 No covered work shall be deemed part of an effective technological 47307 measure under any applicable law fulfilling obligations under 47308 article 11 of the WIPO copyright treaty adopted on 20 December 47309 1996, or similar laws prohibiting or restricting circumvention of 47310 such measures. 47311 47312 When you convey a covered work, you waive any legal power to forbid 47313 circumvention of technological measures to the extent such 47314 circumvention is effected by exercising rights under this License 47315 with respect to the covered work, and you disclaim any intention 47316 to limit operation or modification of the work as a means of 47317 enforcing, against the work's users, your or third parties' legal 47318 rights to forbid circumvention of technological measures. 47319 47320 4. Conveying Verbatim Copies. 47321 47322 You may convey verbatim copies of the Program's source code as you 47323 receive it, in any medium, provided that you conspicuously and 47324 appropriately publish on each copy an appropriate copyright notice; 47325 keep intact all notices stating that this License and any 47326 non-permissive terms added in accord with section 7 apply to the 47327 code; keep intact all notices of the absence of any warranty; and 47328 give all recipients a copy of this License along with the Program. 47329 47330 You may charge any price or no price for each copy that you convey, 47331 and you may offer support or warranty protection for a fee. 47332 47333 5. Conveying Modified Source Versions. 47334 47335 You may convey a work based on the Program, or the modifications to 47336 produce it from the Program, in the form of source code under the 47337 terms of section 4, provided that you also meet all of these 47338 conditions: 47339 47340 a. The work must carry prominent notices stating that you 47341 modified it, and giving a relevant date. 47342 47343 b. The work must carry prominent notices stating that it is 47344 released under this License and any conditions added under 47345 section 7. This requirement modifies the requirement in 47346 section 4 to "keep intact all notices". 47347 47348 c. You must license the entire work, as a whole, under this 47349 License to anyone who comes into possession of a copy. This 47350 License will therefore apply, along with any applicable 47351 section 7 additional terms, to the whole of the work, and all 47352 its parts, regardless of how they are packaged. This License 47353 gives no permission to license the work in any other way, but 47354 it does not invalidate such permission if you have separately 47355 received it. 47356 47357 d. If the work has interactive user interfaces, each must display 47358 Appropriate Legal Notices; however, if the Program has 47359 interactive interfaces that do not display Appropriate Legal 47360 Notices, your work need not make them do so. 47361 47362 A compilation of a covered work with other separate and independent 47363 works, which are not by their nature extensions of the covered 47364 work, and which are not combined with it such as to form a larger 47365 program, in or on a volume of a storage or distribution medium, is 47366 called an "aggregate" if the compilation and its resulting 47367 copyright are not used to limit the access or legal rights of the 47368 compilation's users beyond what the individual works permit. 47369 Inclusion of a covered work in an aggregate does not cause this 47370 License to apply to the other parts of the aggregate. 47371 47372 6. Conveying Non-Source Forms. 47373 47374 You may convey a covered work in object code form under the terms 47375 of sections 4 and 5, provided that you also convey the 47376 machine-readable Corresponding Source under the terms of this 47377 License, in one of these ways: 47378 47379 a. Convey the object code in, or embodied in, a physical product 47380 (including a physical distribution medium), accompanied by the 47381 Corresponding Source fixed on a durable physical medium 47382 customarily used for software interchange. 47383 47384 b. Convey the object code in, or embodied in, a physical product 47385 (including a physical distribution medium), accompanied by a 47386 written offer, valid for at least three years and valid for 47387 as long as you offer spare parts or customer support for that 47388 product model, to give anyone who possesses the object code 47389 either (1) a copy of the Corresponding Source for all the 47390 software in the product that is covered by this License, on a 47391 durable physical medium customarily used for software 47392 interchange, for a price no more than your reasonable cost of 47393 physically performing this conveying of source, or (2) access 47394 to copy the Corresponding Source from a network server at no 47395 charge. 47396 47397 c. Convey individual copies of the object code with a copy of 47398 the written offer to provide the Corresponding Source. This 47399 alternative is allowed only occasionally and noncommercially, 47400 and only if you received the object code with such an offer, 47401 in accord with subsection 6b. 47402 47403 d. Convey the object code by offering access from a designated 47404 place (gratis or for a charge), and offer equivalent access 47405 to the Corresponding Source in the same way through the same 47406 place at no further charge. You need not require recipients 47407 to copy the Corresponding Source along with the object code. 47408 If the place to copy the object code is a network server, the 47409 Corresponding Source may be on a different server (operated 47410 by you or a third party) that supports equivalent copying 47411 facilities, provided you maintain clear directions next to 47412 the object code saying where to find the Corresponding Source. 47413 Regardless of what server hosts the Corresponding Source, you 47414 remain obligated to ensure that it is available for as long 47415 as needed to satisfy these requirements. 47416 47417 e. Convey the object code using peer-to-peer transmission, 47418 provided you inform other peers where the object code and 47419 Corresponding Source of the work are being offered to the 47420 general public at no charge under subsection 6d. 47421 47422 47423 A separable portion of the object code, whose source code is 47424 excluded from the Corresponding Source as a System Library, need 47425 not be included in conveying the object code work. 47426 47427 A "User Product" is either (1) a "consumer product", which means 47428 any tangible personal property which is normally used for personal, 47429 family, or household purposes, or (2) anything designed or sold for 47430 incorporation into a dwelling. In determining whether a product 47431 is a consumer product, doubtful cases shall be resolved in favor of 47432 coverage. For a particular product received by a particular user, 47433 "normally used" refers to a typical or common use of that class of 47434 product, regardless of the status of the particular user or of the 47435 way in which the particular user actually uses, or expects or is 47436 expected to use, the product. A product is a consumer product 47437 regardless of whether the product has substantial commercial, 47438 industrial or non-consumer uses, unless such uses represent the 47439 only significant mode of use of the product. 47440 47441 "Installation Information" for a User Product means any methods, 47442 procedures, authorization keys, or other information required to 47443 install and execute modified versions of a covered work in that 47444 User Product from a modified version of its Corresponding Source. 47445 The information must suffice to ensure that the continued 47446 functioning of the modified object code is in no case prevented or 47447 interfered with solely because modification has been made. 47448 47449 If you convey an object code work under this section in, or with, 47450 or specifically for use in, a User Product, and the conveying 47451 occurs as part of a transaction in which the right of possession 47452 and use of the User Product is transferred to the recipient in 47453 perpetuity or for a fixed term (regardless of how the transaction 47454 is characterized), the Corresponding Source conveyed under this 47455 section must be accompanied by the Installation Information. But 47456 this requirement does not apply if neither you nor any third party 47457 retains the ability to install modified object code on the User 47458 Product (for example, the work has been installed in ROM). 47459 47460 The requirement to provide Installation Information does not 47461 include a requirement to continue to provide support service, 47462 warranty, or updates for a work that has been modified or 47463 installed by the recipient, or for the User Product in which it 47464 has been modified or installed. Access to a network may be denied 47465 when the modification itself materially and adversely affects the 47466 operation of the network or violates the rules and protocols for 47467 communication across the network. 47468 47469 Corresponding Source conveyed, and Installation Information 47470 provided, in accord with this section must be in a format that is 47471 publicly documented (and with an implementation available to the 47472 public in source code form), and must require no special password 47473 or key for unpacking, reading or copying. 47474 47475 7. Additional Terms. 47476 47477 "Additional permissions" are terms that supplement the terms of 47478 this License by making exceptions from one or more of its 47479 conditions. Additional permissions that are applicable to the 47480 entire Program shall be treated as though they were included in 47481 this License, to the extent that they are valid under applicable 47482 law. If additional permissions apply only to part of the Program, 47483 that part may be used separately under those permissions, but the 47484 entire Program remains governed by this License without regard to 47485 the additional permissions. 47486 47487 When you convey a copy of a covered work, you may at your option 47488 remove any additional permissions from that copy, or from any part 47489 of it. (Additional permissions may be written to require their own 47490 removal in certain cases when you modify the work.) You may place 47491 additional permissions on material, added by you to a covered work, 47492 for which you have or can give appropriate copyright permission. 47493 47494 Notwithstanding any other provision of this License, for material 47495 you add to a covered work, you may (if authorized by the copyright 47496 holders of that material) supplement the terms of this License 47497 with terms: 47498 47499 a. Disclaiming warranty or limiting liability differently from 47500 the terms of sections 15 and 16 of this License; or 47501 47502 b. Requiring preservation of specified reasonable legal notices 47503 or author attributions in that material or in the Appropriate 47504 Legal Notices displayed by works containing it; or 47505 47506 c. Prohibiting misrepresentation of the origin of that material, 47507 or requiring that modified versions of such material be 47508 marked in reasonable ways as different from the original 47509 version; or 47510 47511 d. Limiting the use for publicity purposes of names of licensors 47512 or authors of the material; or 47513 47514 e. Declining to grant rights under trademark law for use of some 47515 trade names, trademarks, or service marks; or 47516 47517 f. Requiring indemnification of licensors and authors of that 47518 material by anyone who conveys the material (or modified 47519 versions of it) with contractual assumptions of liability to 47520 the recipient, for any liability that these contractual 47521 assumptions directly impose on those licensors and authors. 47522 47523 All other non-permissive additional terms are considered "further 47524 restrictions" within the meaning of section 10. If the Program as 47525 you received it, or any part of it, contains a notice stating that 47526 it is governed by this License along with a term that is a further 47527 restriction, you may remove that term. If a license document 47528 contains a further restriction but permits relicensing or 47529 conveying under this License, you may add to a covered work 47530 material governed by the terms of that license document, provided 47531 that the further restriction does not survive such relicensing or 47532 conveying. 47533 47534 If you add terms to a covered work in accord with this section, you 47535 must place, in the relevant source files, a statement of the 47536 additional terms that apply to those files, or a notice indicating 47537 where to find the applicable terms. 47538 47539 Additional terms, permissive or non-permissive, may be stated in 47540 the form of a separately written license, or stated as exceptions; 47541 the above requirements apply either way. 47542 47543 8. Termination. 47544 47545 You may not propagate or modify a covered work except as expressly 47546 provided under this License. Any attempt otherwise to propagate or 47547 modify it is void, and will automatically terminate your rights 47548 under this License (including any patent licenses granted under 47549 the third paragraph of section 11). 47550 47551 However, if you cease all violation of this License, then your 47552 license from a particular copyright holder is reinstated (a) 47553 provisionally, unless and until the copyright holder explicitly 47554 and finally terminates your license, and (b) permanently, if the 47555 copyright holder fails to notify you of the violation by some 47556 reasonable means prior to 60 days after the cessation. 47557 47558 Moreover, your license from a particular copyright holder is 47559 reinstated permanently if the copyright holder notifies you of the 47560 violation by some reasonable means, this is the first time you have 47561 received notice of violation of this License (for any work) from 47562 that copyright holder, and you cure the violation prior to 30 days 47563 after your receipt of the notice. 47564 47565 Termination of your rights under this section does not terminate 47566 the licenses of parties who have received copies or rights from 47567 you under this License. If your rights have been terminated and 47568 not permanently reinstated, you do not qualify to receive new 47569 licenses for the same material under section 10. 47570 47571 9. Acceptance Not Required for Having Copies. 47572 47573 You are not required to accept this License in order to receive or 47574 run a copy of the Program. Ancillary propagation of a covered work 47575 occurring solely as a consequence of using peer-to-peer 47576 transmission to receive a copy likewise does not require 47577 acceptance. However, nothing other than this License grants you 47578 permission to propagate or modify any covered work. These actions 47579 infringe copyright if you do not accept this License. Therefore, 47580 by modifying or propagating a covered work, you indicate your 47581 acceptance of this License to do so. 47582 47583 10. Automatic Licensing of Downstream Recipients. 47584 47585 Each time you convey a covered work, the recipient automatically 47586 receives a license from the original licensors, to run, modify and 47587 propagate that work, subject to this License. You are not 47588 responsible for enforcing compliance by third parties with this 47589 License. 47590 47591 An "entity transaction" is a transaction transferring control of an 47592 organization, or substantially all assets of one, or subdividing an 47593 organization, or merging organizations. If propagation of a 47594 covered work results from an entity transaction, each party to that 47595 transaction who receives a copy of the work also receives whatever 47596 licenses to the work the party's predecessor in interest had or 47597 could give under the previous paragraph, plus a right to 47598 possession of the Corresponding Source of the work from the 47599 predecessor in interest, if the predecessor has it or can get it 47600 with reasonable efforts. 47601 47602 You may not impose any further restrictions on the exercise of the 47603 rights granted or affirmed under this License. For example, you 47604 may not impose a license fee, royalty, or other charge for 47605 exercise of rights granted under this License, and you may not 47606 initiate litigation (including a cross-claim or counterclaim in a 47607 lawsuit) alleging that any patent claim is infringed by making, 47608 using, selling, offering for sale, or importing the Program or any 47609 portion of it. 47610 47611 11. Patents. 47612 47613 A "contributor" is a copyright holder who authorizes use under this 47614 License of the Program or a work on which the Program is based. 47615 The work thus licensed is called the contributor's "contributor 47616 version". 47617 47618 A contributor's "essential patent claims" are all patent claims 47619 owned or controlled by the contributor, whether already acquired or 47620 hereafter acquired, that would be infringed by some manner, 47621 permitted by this License, of making, using, or selling its 47622 contributor version, but do not include claims that would be 47623 infringed only as a consequence of further modification of the 47624 contributor version. For purposes of this definition, "control" 47625 includes the right to grant patent sublicenses in a manner 47626 consistent with the requirements of this License. 47627 47628 Each contributor grants you a non-exclusive, worldwide, 47629 royalty-free patent license under the contributor's essential 47630 patent claims, to make, use, sell, offer for sale, import and 47631 otherwise run, modify and propagate the contents of its 47632 contributor version. 47633 47634 In the following three paragraphs, a "patent license" is any 47635 express agreement or commitment, however denominated, not to 47636 enforce a patent (such as an express permission to practice a 47637 patent or covenant not to sue for patent infringement). To 47638 "grant" such a patent license to a party means to make such an 47639 agreement or commitment not to enforce a patent against the party. 47640 47641 If you convey a covered work, knowingly relying on a patent 47642 license, and the Corresponding Source of the work is not available 47643 for anyone to copy, free of charge and under the terms of this 47644 License, through a publicly available network server or other 47645 readily accessible means, then you must either (1) cause the 47646 Corresponding Source to be so available, or (2) arrange to deprive 47647 yourself of the benefit of the patent license for this particular 47648 work, or (3) arrange, in a manner consistent with the requirements 47649 of this License, to extend the patent license to downstream 47650 recipients. "Knowingly relying" means you have actual knowledge 47651 that, but for the patent license, your conveying the covered work 47652 in a country, or your recipient's use of the covered work in a 47653 country, would infringe one or more identifiable patents in that 47654 country that you have reason to believe are valid. 47655 47656 If, pursuant to or in connection with a single transaction or 47657 arrangement, you convey, or propagate by procuring conveyance of, a 47658 covered work, and grant a patent license to some of the parties 47659 receiving the covered work authorizing them to use, propagate, 47660 modify or convey a specific copy of the covered work, then the 47661 patent license you grant is automatically extended to all 47662 recipients of the covered work and works based on it. 47663 47664 A patent license is "discriminatory" if it does not include within 47665 the scope of its coverage, prohibits the exercise of, or is 47666 conditioned on the non-exercise of one or more of the rights that 47667 are specifically granted under this License. You may not convey a 47668 covered work if you are a party to an arrangement with a third 47669 party that is in the business of distributing software, under 47670 which you make payment to the third party based on the extent of 47671 your activity of conveying the work, and under which the third 47672 party grants, to any of the parties who would receive the covered 47673 work from you, a discriminatory patent license (a) in connection 47674 with copies of the covered work conveyed by you (or copies made 47675 from those copies), or (b) primarily for and in connection with 47676 specific products or compilations that contain the covered work, 47677 unless you entered into that arrangement, or that patent license 47678 was granted, prior to 28 March 2007. 47679 47680 Nothing in this License shall be construed as excluding or limiting 47681 any implied license or other defenses to infringement that may 47682 otherwise be available to you under applicable patent law. 47683 47684 12. No Surrender of Others' Freedom. 47685 47686 If conditions are imposed on you (whether by court order, 47687 agreement or otherwise) that contradict the conditions of this 47688 License, they do not excuse you from the conditions of this 47689 License. If you cannot convey a covered work so as to satisfy 47690 simultaneously your obligations under this License and any other 47691 pertinent obligations, then as a consequence you may not convey it 47692 at all. For example, if you agree to terms that obligate you to 47693 collect a royalty for further conveying from those to whom you 47694 convey the Program, the only way you could satisfy both those 47695 terms and this License would be to refrain entirely from conveying 47696 the Program. 47697 47698 13. Use with the GNU Affero General Public License. 47699 47700 Notwithstanding any other provision of this License, you have 47701 permission to link or combine any covered work with a work licensed 47702 under version 3 of the GNU Affero General Public License into a 47703 single combined work, and to convey the resulting work. The terms 47704 of this License will continue to apply to the part which is the 47705 covered work, but the special requirements of the GNU Affero 47706 General Public License, section 13, concerning interaction through 47707 a network will apply to the combination as such. 47708 47709 14. Revised Versions of this License. 47710 47711 The Free Software Foundation may publish revised and/or new 47712 versions of the GNU General Public License from time to time. 47713 Such new versions will be similar in spirit to the present 47714 version, but may differ in detail to address new problems or 47715 concerns. 47716 47717 Each version is given a distinguishing version number. If the 47718 Program specifies that a certain numbered version of the GNU 47719 General Public License "or any later version" applies to it, you 47720 have the option of following the terms and conditions either of 47721 that numbered version or of any later version published by the 47722 Free Software Foundation. If the Program does not specify a 47723 version number of the GNU General Public License, you may choose 47724 any version ever published by the Free Software Foundation. 47725 47726 If the Program specifies that a proxy can decide which future 47727 versions of the GNU General Public License can be used, that 47728 proxy's public statement of acceptance of a version permanently 47729 authorizes you to choose that version for the Program. 47730 47731 Later license versions may give you additional or different 47732 permissions. However, no additional obligations are imposed on any 47733 author or copyright holder as a result of your choosing to follow a 47734 later version. 47735 47736 15. Disclaimer of Warranty. 47737 47738 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 47739 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 47740 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 47741 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 47742 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 47743 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 47744 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 47745 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 47746 NECESSARY SERVICING, REPAIR OR CORRECTION. 47747 47748 16. Limitation of Liability. 47749 47750 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 47751 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 47752 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 47753 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 47754 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 47755 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 47756 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 47757 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 47758 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 47759 THE POSSIBILITY OF SUCH DAMAGES. 47760 47761 17. Interpretation of Sections 15 and 16. 47762 47763 If the disclaimer of warranty and limitation of liability provided 47764 above cannot be given local legal effect according to their terms, 47765 reviewing courts shall apply local law that most closely 47766 approximates an absolute waiver of all civil liability in 47767 connection with the Program, unless a warranty or assumption of 47768 liability accompanies a copy of the Program in return for a fee. 47769 47770 47771END OF TERMS AND CONDITIONS 47772=========================== 47773 47774How to Apply These Terms to Your New Programs 47775============================================= 47776 47777If you develop a new program, and you want it to be of the greatest 47778possible use to the public, the best way to achieve this is to make it 47779free software which everyone can redistribute and change under these 47780terms. 47781 47782 To do so, attach the following notices to the program. It is safest 47783to attach them to the start of each source file to most effectively 47784state the exclusion of warranty; and each file should have at least the 47785"copyright" line and a pointer to where the full notice is found. 47786 47787 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 47788 Copyright (C) YEAR NAME OF AUTHOR 47789 47790 This program is free software: you can redistribute it and/or modify 47791 it under the terms of the GNU General Public License as published by 47792 the Free Software Foundation, either version 3 of the License, or (at 47793 your option) any later version. 47794 47795 This program is distributed in the hope that it will be useful, but 47796 WITHOUT ANY WARRANTY; without even the implied warranty of 47797 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 47798 General Public License for more details. 47799 47800 You should have received a copy of the GNU General Public License 47801 along with this program. If not, see `http://www.gnu.org/licenses/'. 47802 47803 Also add information on how to contact you by electronic and paper 47804mail. 47805 47806 If the program does terminal interaction, make it output a short 47807notice like this when it starts in an interactive mode: 47808 47809 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 47810 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 47811 This is free software, and you are welcome to redistribute it 47812 under certain conditions; type `show c' for details. 47813 47814 The hypothetical commands `show w' and `show c' should show the 47815appropriate parts of the General Public License. Of course, your 47816program's commands might be different; for a GUI interface, you would 47817use an "about box". 47818 47819 You should also get your employer (if you work as a programmer) or 47820school, if any, to sign a "copyright disclaimer" for the program, if 47821necessary. For more information on this, and how to apply and follow 47822the GNU GPL, see `http://www.gnu.org/licenses/'. 47823 47824 The GNU General Public License does not permit incorporating your 47825program into proprietary programs. If your program is a subroutine 47826library, you may consider it more useful to permit linking proprietary 47827applications with the library. If this is what you want to do, use the 47828GNU Lesser General Public License instead of this License. But first, 47829please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 47830 47831 47832File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 47833 47834GNU Free Documentation License 47835****************************** 47836 47837 Version 1.3, 3 November 2008 47838 47839 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 47840 `http://fsf.org/' 47841 47842 Everyone is permitted to copy and distribute verbatim copies 47843 of this license document, but changing it is not allowed. 47844 47845 0. PREAMBLE 47846 47847 The purpose of this License is to make a manual, textbook, or other 47848 functional and useful document "free" in the sense of freedom: to 47849 assure everyone the effective freedom to copy and redistribute it, 47850 with or without modifying it, either commercially or 47851 noncommercially. Secondarily, this License preserves for the 47852 author and publisher a way to get credit for their work, while not 47853 being considered responsible for modifications made by others. 47854 47855 This License is a kind of "copyleft", which means that derivative 47856 works of the document must themselves be free in the same sense. 47857 It complements the GNU General Public License, which is a copyleft 47858 license designed for free software. 47859 47860 We have designed this License in order to use it for manuals for 47861 free software, because free software needs free documentation: a 47862 free program should come with manuals providing the same freedoms 47863 that the software does. But this License is not limited to 47864 software manuals; it can be used for any textual work, regardless 47865 of subject matter or whether it is published as a printed book. 47866 We recommend this License principally for works whose purpose is 47867 instruction or reference. 47868 47869 1. APPLICABILITY AND DEFINITIONS 47870 47871 This License applies to any manual or other work, in any medium, 47872 that contains a notice placed by the copyright holder saying it 47873 can be distributed under the terms of this License. Such a notice 47874 grants a world-wide, royalty-free license, unlimited in duration, 47875 to use that work under the conditions stated herein. The 47876 "Document", below, refers to any such manual or work. Any member 47877 of the public is a licensee, and is addressed as "you". You 47878 accept the license if you copy, modify or distribute the work in a 47879 way requiring permission under copyright law. 47880 47881 A "Modified Version" of the Document means any work containing the 47882 Document or a portion of it, either copied verbatim, or with 47883 modifications and/or translated into another language. 47884 47885 A "Secondary Section" is a named appendix or a front-matter section 47886 of the Document that deals exclusively with the relationship of the 47887 publishers or authors of the Document to the Document's overall 47888 subject (or to related matters) and contains nothing that could 47889 fall directly within that overall subject. (Thus, if the Document 47890 is in part a textbook of mathematics, a Secondary Section may not 47891 explain any mathematics.) The relationship could be a matter of 47892 historical connection with the subject or with related matters, or 47893 of legal, commercial, philosophical, ethical or political position 47894 regarding them. 47895 47896 The "Invariant Sections" are certain Secondary Sections whose 47897 titles are designated, as being those of Invariant Sections, in 47898 the notice that says that the Document is released under this 47899 License. If a section does not fit the above definition of 47900 Secondary then it is not allowed to be designated as Invariant. 47901 The Document may contain zero Invariant Sections. If the Document 47902 does not identify any Invariant Sections then there are none. 47903 47904 The "Cover Texts" are certain short passages of text that are 47905 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 47906 that says that the Document is released under this License. A 47907 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 47908 be at most 25 words. 47909 47910 A "Transparent" copy of the Document means a machine-readable copy, 47911 represented in a format whose specification is available to the 47912 general public, that is suitable for revising the document 47913 straightforwardly with generic text editors or (for images 47914 composed of pixels) generic paint programs or (for drawings) some 47915 widely available drawing editor, and that is suitable for input to 47916 text formatters or for automatic translation to a variety of 47917 formats suitable for input to text formatters. A copy made in an 47918 otherwise Transparent file format whose markup, or absence of 47919 markup, has been arranged to thwart or discourage subsequent 47920 modification by readers is not Transparent. An image format is 47921 not Transparent if used for any substantial amount of text. A 47922 copy that is not "Transparent" is called "Opaque". 47923 47924 Examples of suitable formats for Transparent copies include plain 47925 ASCII without markup, Texinfo input format, LaTeX input format, 47926 SGML or XML using a publicly available DTD, and 47927 standard-conforming simple HTML, PostScript or PDF designed for 47928 human modification. Examples of transparent image formats include 47929 PNG, XCF and JPG. Opaque formats include proprietary formats that 47930 can be read and edited only by proprietary word processors, SGML or 47931 XML for which the DTD and/or processing tools are not generally 47932 available, and the machine-generated HTML, PostScript or PDF 47933 produced by some word processors for output purposes only. 47934 47935 The "Title Page" means, for a printed book, the title page itself, 47936 plus such following pages as are needed to hold, legibly, the 47937 material this License requires to appear in the title page. For 47938 works in formats which do not have any title page as such, "Title 47939 Page" means the text near the most prominent appearance of the 47940 work's title, preceding the beginning of the body of the text. 47941 47942 The "publisher" means any person or entity that distributes copies 47943 of the Document to the public. 47944 47945 A section "Entitled XYZ" means a named subunit of the Document 47946 whose title either is precisely XYZ or contains XYZ in parentheses 47947 following text that translates XYZ in another language. (Here XYZ 47948 stands for a specific section name mentioned below, such as 47949 "Acknowledgements", "Dedications", "Endorsements", or "History".) 47950 To "Preserve the Title" of such a section when you modify the 47951 Document means that it remains a section "Entitled XYZ" according 47952 to this definition. 47953 47954 The Document may include Warranty Disclaimers next to the notice 47955 which states that this License applies to the Document. These 47956 Warranty Disclaimers are considered to be included by reference in 47957 this License, but only as regards disclaiming warranties: any other 47958 implication that these Warranty Disclaimers may have is void and 47959 has no effect on the meaning of this License. 47960 47961 2. VERBATIM COPYING 47962 47963 You may copy and distribute the Document in any medium, either 47964 commercially or noncommercially, provided that this License, the 47965 copyright notices, and the license notice saying this License 47966 applies to the Document are reproduced in all copies, and that you 47967 add no other conditions whatsoever to those of this License. You 47968 may not use technical measures to obstruct or control the reading 47969 or further copying of the copies you make or distribute. However, 47970 you may accept compensation in exchange for copies. If you 47971 distribute a large enough number of copies you must also follow 47972 the conditions in section 3. 47973 47974 You may also lend copies, under the same conditions stated above, 47975 and you may publicly display copies. 47976 47977 3. COPYING IN QUANTITY 47978 47979 If you publish printed copies (or copies in media that commonly 47980 have printed covers) of the Document, numbering more than 100, and 47981 the Document's license notice requires Cover Texts, you must 47982 enclose the copies in covers that carry, clearly and legibly, all 47983 these Cover Texts: Front-Cover Texts on the front cover, and 47984 Back-Cover Texts on the back cover. Both covers must also clearly 47985 and legibly identify you as the publisher of these copies. The 47986 front cover must present the full title with all words of the 47987 title equally prominent and visible. You may add other material 47988 on the covers in addition. Copying with changes limited to the 47989 covers, as long as they preserve the title of the Document and 47990 satisfy these conditions, can be treated as verbatim copying in 47991 other respects. 47992 47993 If the required texts for either cover are too voluminous to fit 47994 legibly, you should put the first ones listed (as many as fit 47995 reasonably) on the actual cover, and continue the rest onto 47996 adjacent pages. 47997 47998 If you publish or distribute Opaque copies of the Document 47999 numbering more than 100, you must either include a 48000 machine-readable Transparent copy along with each Opaque copy, or 48001 state in or with each Opaque copy a computer-network location from 48002 which the general network-using public has access to download 48003 using public-standard network protocols a complete Transparent 48004 copy of the Document, free of added material. If you use the 48005 latter option, you must take reasonably prudent steps, when you 48006 begin distribution of Opaque copies in quantity, to ensure that 48007 this Transparent copy will remain thus accessible at the stated 48008 location until at least one year after the last time you 48009 distribute an Opaque copy (directly or through your agents or 48010 retailers) of that edition to the public. 48011 48012 It is requested, but not required, that you contact the authors of 48013 the Document well before redistributing any large number of 48014 copies, to give them a chance to provide you with an updated 48015 version of the Document. 48016 48017 4. MODIFICATIONS 48018 48019 You may copy and distribute a Modified Version of the Document 48020 under the conditions of sections 2 and 3 above, provided that you 48021 release the Modified Version under precisely this License, with 48022 the Modified Version filling the role of the Document, thus 48023 licensing distribution and modification of the Modified Version to 48024 whoever possesses a copy of it. In addition, you must do these 48025 things in the Modified Version: 48026 48027 A. Use in the Title Page (and on the covers, if any) a title 48028 distinct from that of the Document, and from those of 48029 previous versions (which should, if there were any, be listed 48030 in the History section of the Document). You may use the 48031 same title as a previous version if the original publisher of 48032 that version gives permission. 48033 48034 B. List on the Title Page, as authors, one or more persons or 48035 entities responsible for authorship of the modifications in 48036 the Modified Version, together with at least five of the 48037 principal authors of the Document (all of its principal 48038 authors, if it has fewer than five), unless they release you 48039 from this requirement. 48040 48041 C. State on the Title page the name of the publisher of the 48042 Modified Version, as the publisher. 48043 48044 D. Preserve all the copyright notices of the Document. 48045 48046 E. Add an appropriate copyright notice for your modifications 48047 adjacent to the other copyright notices. 48048 48049 F. Include, immediately after the copyright notices, a license 48050 notice giving the public permission to use the Modified 48051 Version under the terms of this License, in the form shown in 48052 the Addendum below. 48053 48054 G. Preserve in that license notice the full lists of Invariant 48055 Sections and required Cover Texts given in the Document's 48056 license notice. 48057 48058 H. Include an unaltered copy of this License. 48059 48060 I. Preserve the section Entitled "History", Preserve its Title, 48061 and add to it an item stating at least the title, year, new 48062 authors, and publisher of the Modified Version as given on 48063 the Title Page. If there is no section Entitled "History" in 48064 the Document, create one stating the title, year, authors, 48065 and publisher of the Document as given on its Title Page, 48066 then add an item describing the Modified Version as stated in 48067 the previous sentence. 48068 48069 J. Preserve the network location, if any, given in the Document 48070 for public access to a Transparent copy of the Document, and 48071 likewise the network locations given in the Document for 48072 previous versions it was based on. These may be placed in 48073 the "History" section. You may omit a network location for a 48074 work that was published at least four years before the 48075 Document itself, or if the original publisher of the version 48076 it refers to gives permission. 48077 48078 K. For any section Entitled "Acknowledgements" or "Dedications", 48079 Preserve the Title of the section, and preserve in the 48080 section all the substance and tone of each of the contributor 48081 acknowledgements and/or dedications given therein. 48082 48083 L. Preserve all the Invariant Sections of the Document, 48084 unaltered in their text and in their titles. Section numbers 48085 or the equivalent are not considered part of the section 48086 titles. 48087 48088 M. Delete any section Entitled "Endorsements". Such a section 48089 may not be included in the Modified Version. 48090 48091 N. Do not retitle any existing section to be Entitled 48092 "Endorsements" or to conflict in title with any Invariant 48093 Section. 48094 48095 O. Preserve any Warranty Disclaimers. 48096 48097 If the Modified Version includes new front-matter sections or 48098 appendices that qualify as Secondary Sections and contain no 48099 material copied from the Document, you may at your option 48100 designate some or all of these sections as invariant. To do this, 48101 add their titles to the list of Invariant Sections in the Modified 48102 Version's license notice. These titles must be distinct from any 48103 other section titles. 48104 48105 You may add a section Entitled "Endorsements", provided it contains 48106 nothing but endorsements of your Modified Version by various 48107 parties--for example, statements of peer review or that the text 48108 has been approved by an organization as the authoritative 48109 definition of a standard. 48110 48111 You may add a passage of up to five words as a Front-Cover Text, 48112 and a passage of up to 25 words as a Back-Cover Text, to the end 48113 of the list of Cover Texts in the Modified Version. Only one 48114 passage of Front-Cover Text and one of Back-Cover Text may be 48115 added by (or through arrangements made by) any one entity. If the 48116 Document already includes a cover text for the same cover, 48117 previously added by you or by arrangement made by the same entity 48118 you are acting on behalf of, you may not add another; but you may 48119 replace the old one, on explicit permission from the previous 48120 publisher that added the old one. 48121 48122 The author(s) and publisher(s) of the Document do not by this 48123 License give permission to use their names for publicity for or to 48124 assert or imply endorsement of any Modified Version. 48125 48126 5. COMBINING DOCUMENTS 48127 48128 You may combine the Document with other documents released under 48129 this License, under the terms defined in section 4 above for 48130 modified versions, provided that you include in the combination 48131 all of the Invariant Sections of all of the original documents, 48132 unmodified, and list them all as Invariant Sections of your 48133 combined work in its license notice, and that you preserve all 48134 their Warranty Disclaimers. 48135 48136 The combined work need only contain one copy of this License, and 48137 multiple identical Invariant Sections may be replaced with a single 48138 copy. If there are multiple Invariant Sections with the same name 48139 but different contents, make the title of each such section unique 48140 by adding at the end of it, in parentheses, the name of the 48141 original author or publisher of that section if known, or else a 48142 unique number. Make the same adjustment to the section titles in 48143 the list of Invariant Sections in the license notice of the 48144 combined work. 48145 48146 In the combination, you must combine any sections Entitled 48147 "History" in the various original documents, forming one section 48148 Entitled "History"; likewise combine any sections Entitled 48149 "Acknowledgements", and any sections Entitled "Dedications". You 48150 must delete all sections Entitled "Endorsements." 48151 48152 6. COLLECTIONS OF DOCUMENTS 48153 48154 You may make a collection consisting of the Document and other 48155 documents released under this License, and replace the individual 48156 copies of this License in the various documents with a single copy 48157 that is included in the collection, provided that you follow the 48158 rules of this License for verbatim copying of each of the 48159 documents in all other respects. 48160 48161 You may extract a single document from such a collection, and 48162 distribute it individually under this License, provided you insert 48163 a copy of this License into the extracted document, and follow 48164 this License in all other respects regarding verbatim copying of 48165 that document. 48166 48167 7. AGGREGATION WITH INDEPENDENT WORKS 48168 48169 A compilation of the Document or its derivatives with other 48170 separate and independent documents or works, in or on a volume of 48171 a storage or distribution medium, is called an "aggregate" if the 48172 copyright resulting from the compilation is not used to limit the 48173 legal rights of the compilation's users beyond what the individual 48174 works permit. When the Document is included in an aggregate, this 48175 License does not apply to the other works in the aggregate which 48176 are not themselves derivative works of the Document. 48177 48178 If the Cover Text requirement of section 3 is applicable to these 48179 copies of the Document, then if the Document is less than one half 48180 of the entire aggregate, the Document's Cover Texts may be placed 48181 on covers that bracket the Document within the aggregate, or the 48182 electronic equivalent of covers if the Document is in electronic 48183 form. Otherwise they must appear on printed covers that bracket 48184 the whole aggregate. 48185 48186 8. TRANSLATION 48187 48188 Translation is considered a kind of modification, so you may 48189 distribute translations of the Document under the terms of section 48190 4. Replacing Invariant Sections with translations requires special 48191 permission from their copyright holders, but you may include 48192 translations of some or all Invariant Sections in addition to the 48193 original versions of these Invariant Sections. You may include a 48194 translation of this License, and all the license notices in the 48195 Document, and any Warranty Disclaimers, provided that you also 48196 include the original English version of this License and the 48197 original versions of those notices and disclaimers. In case of a 48198 disagreement between the translation and the original version of 48199 this License or a notice or disclaimer, the original version will 48200 prevail. 48201 48202 If a section in the Document is Entitled "Acknowledgements", 48203 "Dedications", or "History", the requirement (section 4) to 48204 Preserve its Title (section 1) will typically require changing the 48205 actual title. 48206 48207 9. TERMINATION 48208 48209 You may not copy, modify, sublicense, or distribute the Document 48210 except as expressly provided under this License. Any attempt 48211 otherwise to copy, modify, sublicense, or distribute it is void, 48212 and will automatically terminate your rights under this License. 48213 48214 However, if you cease all violation of this License, then your 48215 license from a particular copyright holder is reinstated (a) 48216 provisionally, unless and until the copyright holder explicitly 48217 and finally terminates your license, and (b) permanently, if the 48218 copyright holder fails to notify you of the violation by some 48219 reasonable means prior to 60 days after the cessation. 48220 48221 Moreover, your license from a particular copyright holder is 48222 reinstated permanently if the copyright holder notifies you of the 48223 violation by some reasonable means, this is the first time you have 48224 received notice of violation of this License (for any work) from 48225 that copyright holder, and you cure the violation prior to 30 days 48226 after your receipt of the notice. 48227 48228 Termination of your rights under this section does not terminate 48229 the licenses of parties who have received copies or rights from 48230 you under this License. If your rights have been terminated and 48231 not permanently reinstated, receipt of a copy of some or all of 48232 the same material does not give you any rights to use it. 48233 48234 10. FUTURE REVISIONS OF THIS LICENSE 48235 48236 The Free Software Foundation may publish new, revised versions of 48237 the GNU Free Documentation License from time to time. Such new 48238 versions will be similar in spirit to the present version, but may 48239 differ in detail to address new problems or concerns. See 48240 `http://www.gnu.org/copyleft/'. 48241 48242 Each version of the License is given a distinguishing version 48243 number. If the Document specifies that a particular numbered 48244 version of this License "or any later version" applies to it, you 48245 have the option of following the terms and conditions either of 48246 that specified version or of any later version that has been 48247 published (not as a draft) by the Free Software Foundation. If 48248 the Document does not specify a version number of this License, 48249 you may choose any version ever published (not as a draft) by the 48250 Free Software Foundation. If the Document specifies that a proxy 48251 can decide which future versions of this License can be used, that 48252 proxy's public statement of acceptance of a version permanently 48253 authorizes you to choose that version for the Document. 48254 48255 11. RELICENSING 48256 48257 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 48258 World Wide Web server that publishes copyrightable works and also 48259 provides prominent facilities for anybody to edit those works. A 48260 public wiki that anybody can edit is an example of such a server. 48261 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 48262 site means any set of copyrightable works thus published on the MMC 48263 site. 48264 48265 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 48266 license published by Creative Commons Corporation, a not-for-profit 48267 corporation with a principal place of business in San Francisco, 48268 California, as well as future copyleft versions of that license 48269 published by that same organization. 48270 48271 "Incorporate" means to publish or republish a Document, in whole or 48272 in part, as part of another Document. 48273 48274 An MMC is "eligible for relicensing" if it is licensed under this 48275 License, and if all works that were first published under this 48276 License somewhere other than this MMC, and subsequently 48277 incorporated in whole or in part into the MMC, (1) had no cover 48278 texts or invariant sections, and (2) were thus incorporated prior 48279 to November 1, 2008. 48280 48281 The operator of an MMC Site may republish an MMC contained in the 48282 site under CC-BY-SA on the same site at any time before August 1, 48283 2009, provided the MMC is eligible for relicensing. 48284 48285 48286ADDENDUM: How to use this License for your documents 48287==================================================== 48288 48289To use this License in a document you have written, include a copy of 48290the License in the document and put the following copyright and license 48291notices just after the title page: 48292 48293 Copyright (C) YEAR YOUR NAME. 48294 Permission is granted to copy, distribute and/or modify this document 48295 under the terms of the GNU Free Documentation License, Version 1.3 48296 or any later version published by the Free Software Foundation; 48297 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 48298 Texts. A copy of the license is included in the section entitled ``GNU 48299 Free Documentation License''. 48300 48301 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 48302replace the "with...Texts." line with this: 48303 48304 with the Invariant Sections being LIST THEIR TITLES, with 48305 the Front-Cover Texts being LIST, and with the Back-Cover Texts 48306 being LIST. 48307 48308 If you have Invariant Sections without Cover Texts, or some other 48309combination of the three, merge those two alternatives to suit the 48310situation. 48311 48312 If your document contains nontrivial examples of program code, we 48313recommend releasing these examples in parallel under your choice of 48314free software license, such as the GNU General Public License, to 48315permit their use in free software. 48316 48317 48318File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 48319 48320Contributors to GCC 48321******************* 48322 48323The GCC project would like to thank its many contributors. Without 48324them the project would not have been nearly as successful as it has 48325been. Any omissions in this list are accidental. Feel free to contact 48326<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 48327some of your contributions are not listed. Please keep this list in 48328alphabetical order. 48329 48330 * Analog Devices helped implement the support for complex data types 48331 and iterators. 48332 48333 * John David Anglin for threading-related fixes and improvements to 48334 libstdc++-v3, and the HP-UX port. 48335 48336 * James van Artsdalen wrote the code that makes efficient use of the 48337 Intel 80387 register stack. 48338 48339 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 48340 Series port. 48341 48342 * Alasdair Baird for various bug fixes. 48343 48344 * Giovanni Bajo for analyzing lots of complicated C++ problem 48345 reports. 48346 48347 * Peter Barada for his work to improve code generation for new 48348 ColdFire cores. 48349 48350 * Gerald Baumgartner added the signature extension to the C++ front 48351 end. 48352 48353 * Godmar Back for his Java improvements and encouragement. 48354 48355 * Scott Bambrough for help porting the Java compiler. 48356 48357 * Wolfgang Bangerth for processing tons of bug reports. 48358 48359 * Jon Beniston for his Microsoft Windows port of Java and port to 48360 Lattice Mico32. 48361 48362 * Daniel Berlin for better DWARF2 support, faster/better 48363 optimizations, improved alias analysis, plus migrating GCC to 48364 Bugzilla. 48365 48366 * Geoff Berry for his Java object serialization work and various 48367 patches. 48368 48369 * David Binderman tests weekly snapshots of GCC trunk against Fedora 48370 Rawhide for several architectures. 48371 48372 * Uros Bizjak for the implementation of x87 math built-in functions 48373 and for various middle end and i386 back end improvements and bug 48374 fixes. 48375 48376 * Eric Blake for helping to make GCJ and libgcj conform to the 48377 specifications. 48378 48379 * Janne Blomqvist for contributions to GNU Fortran. 48380 48381 * Segher Boessenkool for various fixes. 48382 48383 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 48384 other Java work. 48385 48386 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 48387 miscellaneous clean-ups. 48388 48389 * Steven Bosscher for integrating the GNU Fortran front end into GCC 48390 and for contributing to the tree-ssa branch. 48391 48392 * Eric Botcazou for fixing middle- and backend bugs left and right. 48393 48394 * Per Bothner for his direction via the steering committee and 48395 various improvements to the infrastructure for supporting new 48396 languages. Chill front end implementation. Initial 48397 implementations of cpplib, fix-header, config.guess, libio, and 48398 past C++ library (libg++) maintainer. Dreaming up, designing and 48399 implementing much of GCJ. 48400 48401 * Devon Bowen helped port GCC to the Tahoe. 48402 48403 * Don Bowman for mips-vxworks contributions. 48404 48405 * Dave Brolley for work on cpplib and Chill. 48406 48407 * Paul Brook for work on the ARM architecture and maintaining GNU 48408 Fortran. 48409 48410 * Robert Brown implemented the support for Encore 32000 systems. 48411 48412 * Christian Bruel for improvements to local store elimination. 48413 48414 * Herman A.J. ten Brugge for various fixes. 48415 48416 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 48417 FAQ. 48418 48419 * Joe Buck for his direction via the steering committee. 48420 48421 * Craig Burley for leadership of the G77 Fortran effort. 48422 48423 * Stephan Buys for contributing Doxygen notes for libstdc++. 48424 48425 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 48426 to the C++ strings, streambufs and formatted I/O, hard detective 48427 work on the frustrating localization issues, and keeping up with 48428 the problem reports. 48429 48430 * John Carr for his alias work, SPARC hacking, infrastructure 48431 improvements, previous contributions to the steering committee, 48432 loop optimizations, etc. 48433 48434 * Stephane Carrez for 68HC11 and 68HC12 ports. 48435 48436 * Steve Chamberlain for support for the Renesas SH and H8 processors 48437 and the PicoJava processor, and for GCJ config fixes. 48438 48439 * Glenn Chambers for help with the GCJ FAQ. 48440 48441 * John-Marc Chandonia for various libgcj patches. 48442 48443 * Denis Chertykov for contributing and maintaining the AVR port, the 48444 first GCC port for an 8-bit architecture. 48445 48446 * Scott Christley for his Objective-C contributions. 48447 48448 * Eric Christopher for his Java porting help and clean-ups. 48449 48450 * Branko Cibej for more warning contributions. 48451 48452 * The GNU Classpath project for all of their merged runtime code. 48453 48454 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help', 48455 and other random hacking. 48456 48457 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 48458 48459 * R. Kelley Cook for making GCC buildable from a read-only directory 48460 as well as other miscellaneous build process and documentation 48461 clean-ups. 48462 48463 * Ralf Corsepius for SH testing and minor bug fixing. 48464 48465 * Stan Cox for care and feeding of the x86 port and lots of behind 48466 the scenes hacking. 48467 48468 * Alex Crain provided changes for the 3b1. 48469 48470 * Ian Dall for major improvements to the NS32k port. 48471 48472 * Paul Dale for his work to add uClinux platform support to the m68k 48473 backend. 48474 48475 * Dario Dariol contributed the four varieties of sample programs 48476 that print a copy of their source. 48477 48478 * Russell Davidson for fstream and stringstream fixes in libstdc++. 48479 48480 * Bud Davis for work on the G77 and GNU Fortran compilers. 48481 48482 * Mo DeJong for GCJ and libgcj bug fixes. 48483 48484 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 48485 various bug fixes, and the M32C, MeP, and RL78 ports. 48486 48487 * Arnaud Desitter for helping to debug GNU Fortran. 48488 48489 * Gabriel Dos Reis for contributions to G++, contributions and 48490 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 48491 including `valarray<>', `complex<>', maintaining the numerics 48492 library (including that pesky `<limits>' :-) and keeping 48493 up-to-date anything to do with numbers. 48494 48495 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 48496 ISO C99 support, CFG dumping support, etc., plus support of the 48497 C++ runtime libraries including for all kinds of C interface 48498 issues, contributing and maintaining `complex<>', sanity checking 48499 and disbursement, configuration architecture, libio maintenance, 48500 and early math work. 48501 48502 * Zdenek Dvorak for a new loop unroller and various fixes. 48503 48504 * Michael Eager for his work on the Xilinx MicroBlaze port. 48505 48506 * Richard Earnshaw for his ongoing work with the ARM. 48507 48508 * David Edelsohn for his direction via the steering committee, 48509 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 48510 loop changes, doing the entire AIX port of libstdc++ with his bare 48511 hands, and for ensuring GCC properly keeps working on AIX. 48512 48513 * Kevin Ediger for the floating point formatting of num_put::do_put 48514 in libstdc++. 48515 48516 * Phil Edwards for libstdc++ work including configuration hackery, 48517 documentation maintainer, chief breaker of the web pages, the 48518 occasional iostream bug fix, and work on shared library symbol 48519 versioning. 48520 48521 * Paul Eggert for random hacking all over GCC. 48522 48523 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 48524 configuration support for locales and fstream-related fixes. 48525 48526 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 48527 iostreams. 48528 48529 * Christian Ehrhardt for dealing with bug reports. 48530 48531 * Ben Elliston for his work to move the Objective-C runtime into its 48532 own subdirectory and for his work on autoconf. 48533 48534 * Revital Eres for work on the PowerPC 750CL port. 48535 48536 * Marc Espie for OpenBSD support. 48537 48538 * Doug Evans for much of the global optimization framework, arc, 48539 m32r, and SPARC work. 48540 48541 * Christopher Faylor for his work on the Cygwin port and for caring 48542 and feeding the gcc.gnu.org box and saving its users tons of spam. 48543 48544 * Fred Fish for BeOS support and Ada fixes. 48545 48546 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 48547 48548 * Peter Gerwinski for various bug fixes and the Pascal front end. 48549 48550 * Kaveh R. Ghazi for his direction via the steering committee, 48551 amazing work to make `-W -Wall -W* -Werror' useful, and testing 48552 GCC on a plethora of platforms. Kaveh extends his gratitude to 48553 the CAIP Center at Rutgers University for providing him with 48554 computing resources to work on Free Software from the late 1980s 48555 to 2010. 48556 48557 * John Gilmore for a donation to the FSF earmarked improving GNU 48558 Java. 48559 48560 * Judy Goldberg for c++ contributions. 48561 48562 * Torbjorn Granlund for various fixes and the c-torture testsuite, 48563 multiply- and divide-by-constant optimization, improved long long 48564 support, improved leaf function register allocation, and his 48565 direction via the steering committee. 48566 48567 * Anthony Green for his `-Os' contributions, the moxie port, and 48568 Java front end work. 48569 48570 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 48571 Java code. 48572 48573 * Michael K. Gschwind contributed the port to the PDP-11. 48574 48575 * Richard Guenther for his ongoing middle-end contributions and bug 48576 fixes and for release management. 48577 48578 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 48579 the support for Dwarf symbolic debugging information, and much of 48580 the support for System V Release 4. He has also worked heavily on 48581 the Intel 386 and 860 support. 48582 48583 * Sumanth Gundapaneni for contributing the CR16 port. 48584 48585 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 48586 GCSE. 48587 48588 * Bruno Haible for improvements in the runtime overhead for EH, new 48589 warnings and assorted bug fixes. 48590 48591 * Andrew Haley for his amazing Java compiler and library efforts. 48592 48593 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 48594 series 300. 48595 48596 * Michael Hayes for various thankless work he's done trying to get 48597 the c30/c40 ports functional. Lots of loop and unroll 48598 improvements and fixes. 48599 48600 * Dara Hazeghi for wading through myriads of target-specific bug 48601 reports. 48602 48603 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 48604 48605 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 48606 work, loop opts, and generally fixing lots of old problems we've 48607 ignored for years, flow rewrite and lots of further stuff, 48608 including reviewing tons of patches. 48609 48610 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 48611 various fixes. 48612 48613 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 48614 contributed the support for the Sony NEWS machine. 48615 48616 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 48617 various fixes. 48618 48619 * Katherine Holcomb for work on GNU Fortran. 48620 48621 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 48622 of testing and bug fixing, particularly of GCC configury code. 48623 48624 * Steve Holmgren for MachTen patches. 48625 48626 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 48627 48628 * Jan Hubicka for his x86 port improvements. 48629 48630 * Falk Hueffner for working on C and optimization bug reports. 48631 48632 * Bernardo Innocenti for his m68k work, including merging of 48633 ColdFire improvements and uClinux support. 48634 48635 * Christian Iseli for various bug fixes. 48636 48637 * Kamil Iskra for general m68k hacking. 48638 48639 * Lee Iverson for random fixes and MIPS testing. 48640 48641 * Andreas Jaeger for testing and benchmarking of GCC and various bug 48642 fixes. 48643 48644 * Jakub Jelinek for his SPARC work and sibling call optimizations as 48645 well as lots of bug fixes and test cases, and for improving the 48646 Java build system. 48647 48648 * Janis Johnson for ia64 testing and fixes, her quality improvement 48649 sidetracks, and web page maintenance. 48650 48651 * Kean Johnston for SCO OpenServer support and various fixes. 48652 48653 * Tim Josling for the sample language treelang based originally on 48654 Richard Kenner's "toy" language. 48655 48656 * Nicolai Josuttis for additional libstdc++ documentation. 48657 48658 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 48659 target. 48660 48661 * Steven G. Kargl for work on GNU Fortran. 48662 48663 * David Kashtan of SRI adapted GCC to VMS. 48664 48665 * Ryszard Kabatek for many, many libstdc++ bug fixes and 48666 optimizations of strings, especially member functions, and for 48667 auto_ptr fixes. 48668 48669 * Geoffrey Keating for his ongoing work to make the PPC work for 48670 GNU/Linux and his automatic regression tester. 48671 48672 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 48673 work in just about every part of libstdc++. 48674 48675 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 48676 MIL-STD-1750A. 48677 48678 * Richard Kenner of the New York University Ultracomputer Research 48679 Laboratory wrote the machine descriptions for the AMD 29000, the 48680 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 48681 support for instruction attributes. He also made changes to 48682 better support RISC processors including changes to common 48683 subexpression elimination, strength reduction, function calling 48684 sequence handling, and condition code support, in addition to 48685 generalizing the code for frame pointer elimination and delay slot 48686 scheduling. Richard Kenner was also the head maintainer of GCC 48687 for several years. 48688 48689 * Mumit Khan for various contributions to the Cygwin and Mingw32 48690 ports and maintaining binary releases for Microsoft Windows hosts, 48691 and for massive libstdc++ porting work to Cygwin/Mingw32. 48692 48693 * Robin Kirkham for cpu32 support. 48694 48695 * Mark Klein for PA improvements. 48696 48697 * Thomas Koenig for various bug fixes. 48698 48699 * Bruce Korb for the new and improved fixincludes code. 48700 48701 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 48702 effort. 48703 48704 * Charles LaBrec contributed the support for the Integrated Solutions 48705 68020 system. 48706 48707 * Asher Langton and Mike Kumbera for contributing Cray pointer 48708 support to GNU Fortran, and for other GNU Fortran improvements. 48709 48710 * Jeff Law for his direction via the steering committee, 48711 coordinating the entire egcs project and GCC 2.95, rolling out 48712 snapshots and releases, handling merges from GCC2, reviewing tons 48713 of patches that might have fallen through the cracks else, and 48714 random but extensive hacking. 48715 48716 * Walter Lee for work on the TILE-Gx and TILEPro ports. 48717 48718 * Marc Lehmann for his direction via the steering committee and 48719 helping with analysis and improvements of x86 performance. 48720 48721 * Victor Leikehman for work on GNU Fortran. 48722 48723 * Ted Lemon wrote parts of the RTL reader and printer. 48724 48725 * Kriang Lerdsuwanakij for C++ improvements including template as 48726 template parameter support, and many C++ fixes. 48727 48728 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 48729 and random work on the Java front end. 48730 48731 * Alain Lichnewsky ported GCC to the MIPS CPU. 48732 48733 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 48734 and patches. 48735 48736 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 48737 48738 * Chen Liqin for various S+core related fixes/improvement, and for 48739 maintaining the S+core port. 48740 48741 * Weiwen Liu for testing and various bug fixes. 48742 48743 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 48744 diagnostics fixes and improvements. 48745 48746 * Dave Love for his ongoing work with the Fortran front end and 48747 runtime libraries. 48748 48749 * Martin von Lo"wis for internal consistency checking infrastructure, 48750 various C++ improvements including namespace support, and tons of 48751 assistance with libstdc++/compiler merges. 48752 48753 * H.J. Lu for his previous contributions to the steering committee, 48754 many x86 bug reports, prototype patches, and keeping the GNU/Linux 48755 ports working. 48756 48757 * Greg McGary for random fixes and (someday) bounded pointers. 48758 48759 * Andrew MacLeod for his ongoing work in building a real EH system, 48760 various code generation improvements, work on the global 48761 optimizer, etc. 48762 48763 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 48764 hacking improvements to compile-time performance, overall 48765 knowledge and direction in the area of instruction scheduling, and 48766 design and implementation of the automaton based instruction 48767 scheduler. 48768 48769 * Bob Manson for his behind the scenes work on dejagnu. 48770 48771 * Philip Martin for lots of libstdc++ string and vector iterator 48772 fixes and improvements, and string clean up and testsuites. 48773 48774 * All of the Mauve project contributors, for Java test code. 48775 48776 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 48777 48778 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 48779 48780 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 48781 powerpc, haifa, ECOFF debug support, and other assorted hacking. 48782 48783 * Jason Merrill for his direction via the steering committee and 48784 leading the G++ effort. 48785 48786 * Martin Michlmayr for testing GCC on several architectures using the 48787 entire Debian archive. 48788 48789 * David Miller for his direction via the steering committee, lots of 48790 SPARC work, improvements in jump.c and interfacing with the Linux 48791 kernel developers. 48792 48793 * Gary Miller ported GCC to Charles River Data Systems machines. 48794 48795 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 48796 the entire libstdc++ testsuite namespace-compatible. 48797 48798 * Mark Mitchell for his direction via the steering committee, 48799 mountains of C++ work, load/store hoisting out of loops, alias 48800 analysis improvements, ISO C `restrict' support, and serving as 48801 release manager from 2000 to 2011. 48802 48803 * Alan Modra for various GNU/Linux bits and testing. 48804 48805 * Toon Moene for his direction via the steering committee, Fortran 48806 maintenance, and his ongoing work to make us make Fortran run fast. 48807 48808 * Jason Molenda for major help in the care and feeding of all the 48809 services on the gcc.gnu.org (formerly egcs.cygnus.com) 48810 machine--mail, web services, ftp services, etc etc. Doing all 48811 this work on scrap paper and the backs of envelopes would have 48812 been... difficult. 48813 48814 * Catherine Moore for fixing various ugly problems we have sent her 48815 way, including the haifa bug which was killing the Alpha & PowerPC 48816 Linux kernels. 48817 48818 * Mike Moreton for his various Java patches. 48819 48820 * David Mosberger-Tang for various Alpha improvements, and for the 48821 initial IA-64 port. 48822 48823 * Stephen Moshier contributed the floating point emulator that 48824 assists in cross-compilation and permits support for floating 48825 point numbers wider than 64 bits and for ISO C99 support. 48826 48827 * Bill Moyer for his behind the scenes work on various issues. 48828 48829 * Philippe De Muyter for his work on the m68k port. 48830 48831 * Joseph S. Myers for his work on the PDP-11 port, format checking 48832 and ISO C99 support, and continuous emphasis on (and contributions 48833 to) documentation. 48834 48835 * Nathan Myers for his work on libstdc++-v3: architecture and 48836 authorship through the first three snapshots, including 48837 implementation of locale infrastructure, string, shadow C headers, 48838 and the initial project documentation (DESIGN, CHECKLIST, and so 48839 forth). Later, more work on MT-safe string and shadow headers. 48840 48841 * Felix Natter for documentation on porting libstdc++. 48842 48843 * Nathanael Nerode for cleaning up the configuration/build process. 48844 48845 * NeXT, Inc. donated the front end that supports the Objective-C 48846 language. 48847 48848 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 48849 the search engine setup, various documentation fixes and other 48850 small fixes. 48851 48852 * Geoff Noer for his work on getting cygwin native builds working. 48853 48854 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 48855 tracking web pages, GIMPLE tuples, and assorted fixes. 48856 48857 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 48858 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 48859 related infrastructure improvements. 48860 48861 * Alexandre Oliva for various build infrastructure improvements, 48862 scripts and amazing testing work, including keeping libtool issues 48863 sane and happy. 48864 48865 * Stefan Olsson for work on mt_alloc. 48866 48867 * Melissa O'Neill for various NeXT fixes. 48868 48869 * Rainer Orth for random MIPS work, including improvements to GCC's 48870 o32 ABI support, improvements to dejagnu's MIPS support, Java 48871 configuration clean-ups and porting work, and maintaining the 48872 IRIX, Solaris 2, and Tru64 UNIX ports. 48873 48874 * Hartmut Penner for work on the s390 port. 48875 48876 * Paul Petersen wrote the machine description for the Alliant FX/8. 48877 48878 * Alexandre Petit-Bianco for implementing much of the Java compiler 48879 and continued Java maintainership. 48880 48881 * Matthias Pfaller for major improvements to the NS32k port. 48882 48883 * Gerald Pfeifer for his direction via the steering committee, 48884 pointing out lots of problems we need to solve, maintenance of the 48885 web pages, and taking care of documentation maintenance in general. 48886 48887 * Andrew Pinski for processing bug reports by the dozen. 48888 48889 * Ovidiu Predescu for his work on the Objective-C front end and 48890 runtime libraries. 48891 48892 * Jerry Quinn for major performance improvements in C++ formatted 48893 I/O. 48894 48895 * Ken Raeburn for various improvements to checker, MIPS ports and 48896 various cleanups in the compiler. 48897 48898 * Rolf W. Rasmussen for hacking on AWT. 48899 48900 * David Reese of Sun Microsystems contributed to the Solaris on 48901 PowerPC port. 48902 48903 * Volker Reichelt for keeping up with the problem reports. 48904 48905 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 48906 hacking and developing and maintaining the Epiphany port. 48907 48908 * Loren J. Rittle for improvements to libstdc++-v3 including the 48909 FreeBSD port, threading fixes, thread-related configury changes, 48910 critical threading documentation, and solutions to really tricky 48911 I/O problems, as well as keeping GCC properly working on FreeBSD 48912 and continuous testing. 48913 48914 * Craig Rodrigues for processing tons of bug reports. 48915 48916 * Ola Ro"nnerup for work on mt_alloc. 48917 48918 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 48919 48920 * David Ronis inspired and encouraged Craig to rewrite the G77 48921 documentation in texinfo format by contributing a first pass at a 48922 translation of the old `g77-0.5.16/f/DOC' file. 48923 48924 * Ken Rose for fixes to GCC's delay slot filling code. 48925 48926 * Paul Rubin wrote most of the preprocessor. 48927 48928 * Pe'tur Runo'lfsson for major performance improvements in C++ 48929 formatted I/O and large file support in C++ filebuf. 48930 48931 * Chip Salzenberg for libstdc++ patches and improvements to locales, 48932 traits, Makefiles, libio, libtool hackery, and "long long" support. 48933 48934 * Juha Sarlin for improvements to the H8 code generator. 48935 48936 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 48937 300. 48938 48939 * Roger Sayle for improvements to constant folding and GCC's RTL 48940 optimizers as well as for fixing numerous bugs. 48941 48942 * Bradley Schatz for his work on the GCJ FAQ. 48943 48944 * Peter Schauer wrote the code to allow debugging to work on the 48945 Alpha. 48946 48947 * William Schelter did most of the work on the Intel 80386 support. 48948 48949 * Tobias Schlu"ter for work on GNU Fortran. 48950 48951 * Bernd Schmidt for various code generation improvements and major 48952 work in the reload pass, serving as release manager for GCC 48953 2.95.3, and work on the Blackfin and C6X ports. 48954 48955 * Peter Schmid for constant testing of libstdc++--especially 48956 application testing, going above and beyond what was requested for 48957 the release criteria--and libstdc++ header file tweaks. 48958 48959 * Jason Schroeder for jcf-dump patches. 48960 48961 * Andreas Schwab for his work on the m68k port. 48962 48963 * Lars Segerlund for work on GNU Fortran. 48964 48965 * Dodji Seketeli for numerous C++ bug fixes and debug info 48966 improvements. 48967 48968 * Joel Sherrill for his direction via the steering committee, RTEMS 48969 contributions and RTEMS testing. 48970 48971 * Nathan Sidwell for many C++ fixes/improvements. 48972 48973 * Jeffrey Siegal for helping RMS with the original design of GCC, 48974 some code which handles the parse tree and RTL data structures, 48975 constant folding and help with the original VAX & m68k ports. 48976 48977 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 48978 from the LWG (thereby keeping GCC in line with updates from the 48979 ISO). 48980 48981 * Franz Sirl for his ongoing work with making the PPC port stable 48982 for GNU/Linux. 48983 48984 * Andrey Slepuhin for assorted AIX hacking. 48985 48986 * Trevor Smigiel for contributing the SPU port. 48987 48988 * Christopher Smith did the port for Convex machines. 48989 48990 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 48991 48992 * Randy Smith finished the Sun FPA support. 48993 48994 * Scott Snyder for queue, iterator, istream, and string fixes and 48995 libstdc++ testsuite entries. Also for providing the patch to G77 48996 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 48997 `LOGICAL*1'. 48998 48999 * Zdenek Sojka for running automated regression testing of GCC and 49000 reporting numerous bugs. 49001 49002 * Jayant Sonar for contributing the CR16 port. 49003 49004 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 49005 49006 * Richard Stallman, for writing the original GCC and launching the 49007 GNU project. 49008 49009 * Jan Stein of the Chalmers Computer Society provided support for 49010 Genix, as well as part of the 32000 machine description. 49011 49012 * Nigel Stephens for various mips16 related fixes/improvements. 49013 49014 * Jonathan Stone wrote the machine description for the Pyramid 49015 computer. 49016 49017 * Graham Stott for various infrastructure improvements. 49018 49019 * John Stracke for his Java HTTP protocol fixes. 49020 49021 * Mike Stump for his Elxsi port, G++ contributions over the years 49022 and more recently his vxworks contributions 49023 49024 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 49025 49026 * Shigeya Suzuki for this fixes for the bsdi platforms. 49027 49028 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 49029 support, general configury hacking, fixincludes, etc. 49030 49031 * Holger Teutsch provided the support for the Clipper CPU. 49032 49033 * Gary Thomas for his ongoing work to make the PPC work for 49034 GNU/Linux. 49035 49036 * Philipp Thomas for random bug fixes throughout the compiler 49037 49038 * Jason Thorpe for thread support in libstdc++ on NetBSD. 49039 49040 * Kresten Krab Thorup wrote the run time support for the Objective-C 49041 language and the fantastic Java bytecode interpreter. 49042 49043 * Michael Tiemann for random bug fixes, the first instruction 49044 scheduler, initial C++ support, function integration, NS32k, SPARC 49045 and M88k machine description work, delay slot scheduling. 49046 49047 * Andreas Tobler for his work porting libgcj to Darwin. 49048 49049 * Teemu Torma for thread safe exception handling support. 49050 49051 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 49052 definitions, and of the VAX machine description. 49053 49054 * Daniel Towner and Hariharan Sandanagobalane contributed and 49055 maintain the picoChip port. 49056 49057 * Tom Tromey for internationalization support and for his many Java 49058 contributions and libgcj maintainership. 49059 49060 * Lassi Tuura for improvements to config.guess to determine HP 49061 processor types. 49062 49063 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 49064 49065 * Andy Vaught for the design and initial implementation of the GNU 49066 Fortran front end. 49067 49068 * Brent Verner for work with the libstdc++ cshadow files and their 49069 associated configure steps. 49070 49071 * Todd Vierling for contributions for NetBSD ports. 49072 49073 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 49074 guidance. 49075 49076 * Dean Wakerley for converting the install documentation from HTML 49077 to texinfo in time for GCC 3.0. 49078 49079 * Krister Walfridsson for random bug fixes. 49080 49081 * Feng Wang for contributions to GNU Fortran. 49082 49083 * Stephen M. Webb for time and effort on making libstdc++ shadow 49084 files work with the tricky Solaris 8+ headers, and for pushing the 49085 build-time header tree. 49086 49087 * John Wehle for various improvements for the x86 code generator, 49088 related infrastructure improvements to help x86 code generation, 49089 value range propagation and other work, WE32k port. 49090 49091 * Ulrich Weigand for work on the s390 port. 49092 49093 * Zack Weinberg for major work on cpplib and various other bug fixes. 49094 49095 * Matt Welsh for help with Linux Threads support in GCJ. 49096 49097 * Urban Widmark for help fixing java.io. 49098 49099 * Mark Wielaard for new Java library code and his work integrating 49100 with Classpath. 49101 49102 * Dale Wiles helped port GCC to the Tahoe. 49103 49104 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 49105 49106 * Jim Wilson for his direction via the steering committee, tackling 49107 hard problems in various places that nobody else wanted to work 49108 on, strength reduction and other loop optimizations. 49109 49110 * Paul Woegerer and Tal Agmon for the CRX port. 49111 49112 * Carlo Wood for various fixes. 49113 49114 * Tom Wood for work on the m88k port. 49115 49116 * Canqun Yang for work on GNU Fortran. 49117 49118 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 49119 description for the Tron architecture (specifically, the Gmicro). 49120 49121 * Kevin Zachmann helped port GCC to the Tahoe. 49122 49123 * Ayal Zaks for Swing Modulo Scheduling (SMS). 49124 49125 * Xiaoqiang Zhang for work on GNU Fortran. 49126 49127 * Gilles Zunino for help porting Java to Irix. 49128 49129 49130 The following people are recognized for their contributions to GNAT, 49131the Ada front end of GCC: 49132 * Bernard Banner 49133 49134 * Romain Berrendonner 49135 49136 * Geert Bosch 49137 49138 * Emmanuel Briot 49139 49140 * Joel Brobecker 49141 49142 * Ben Brosgol 49143 49144 * Vincent Celier 49145 49146 * Arnaud Charlet 49147 49148 * Chien Chieng 49149 49150 * Cyrille Comar 49151 49152 * Cyrille Crozes 49153 49154 * Robert Dewar 49155 49156 * Gary Dismukes 49157 49158 * Robert Duff 49159 49160 * Ed Falis 49161 49162 * Ramon Fernandez 49163 49164 * Sam Figueroa 49165 49166 * Vasiliy Fofanov 49167 49168 * Michael Friess 49169 49170 * Franco Gasperoni 49171 49172 * Ted Giering 49173 49174 * Matthew Gingell 49175 49176 * Laurent Guerby 49177 49178 * Jerome Guitton 49179 49180 * Olivier Hainque 49181 49182 * Jerome Hugues 49183 49184 * Hristian Kirtchev 49185 49186 * Jerome Lambourg 49187 49188 * Bruno Leclerc 49189 49190 * Albert Lee 49191 49192 * Sean McNeil 49193 49194 * Javier Miranda 49195 49196 * Laurent Nana 49197 49198 * Pascal Obry 49199 49200 * Dong-Ik Oh 49201 49202 * Laurent Pautet 49203 49204 * Brett Porter 49205 49206 * Thomas Quinot 49207 49208 * Nicolas Roche 49209 49210 * Pat Rogers 49211 49212 * Jose Ruiz 49213 49214 * Douglas Rupp 49215 49216 * Sergey Rybin 49217 49218 * Gail Schenker 49219 49220 * Ed Schonberg 49221 49222 * Nicolas Setton 49223 49224 * Samuel Tardieu 49225 49226 49227 The following people are recognized for their contributions of new 49228features, bug reports, testing and integration of classpath/libgcj for 49229GCC version 4.1: 49230 * Lillian Angel for `JTree' implementation and lots Free Swing 49231 additions and bug fixes. 49232 49233 * Wolfgang Baer for `GapContent' bug fixes. 49234 49235 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 49236 event fixes, lots of Free Swing work including `JTable' editing. 49237 49238 * Stuart Ballard for RMI constant fixes. 49239 49240 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 49241 49242 * Gary Benson for `MessageFormat' fixes. 49243 49244 * Daniel Bonniot for `Serialization' fixes. 49245 49246 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 49247 and `DOM xml:id' support. 49248 49249 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 49250 49251 * Archie Cobbs for build fixes, VM interface updates, 49252 `URLClassLoader' updates. 49253 49254 * Kelley Cook for build fixes. 49255 49256 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 49257 49258 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 49259 and improvements. 49260 49261 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 49262 2D support. Lots of imageio framework additions, lots of AWT and 49263 Free Swing bug fixes. 49264 49265 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 49266 fixes, better `Proxy' support, bug fixes and IKVM integration. 49267 49268 * Santiago Gala for `AccessControlContext' fixes. 49269 49270 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 49271 improvements. 49272 49273 * David Gilbert for `basic' and `metal' icon and plaf support and 49274 lots of documenting, Lots of Free Swing and metal theme additions. 49275 `MetalIconFactory' implementation. 49276 49277 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 49278 49279 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 49280 build speedups. 49281 49282 * Kim Ho for `JFileChooser' implementation. 49283 49284 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 49285 updates, `Serialization' fixes, `Properties' XML support and 49286 generic branch work, VMIntegration guide update. 49287 49288 * Bastiaan Huisman for `TimeZone' bug fixing. 49289 49290 * Andreas Jaeger for mprec updates. 49291 49292 * Paul Jenner for better `-Werror' support. 49293 49294 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 49295 49296 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 49297 bug fixes all over. Lots of Free Swing work including styled text. 49298 49299 * Simon Kitching for `String' cleanups and optimization suggestions. 49300 49301 * Michael Koch for configuration fixes, `Locale' updates, bug and 49302 build fixes. 49303 49304 * Guilhem Lavaux for configuration, thread and channel fixes and 49305 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 49306 49307 * David Lichteblau for JCL support library global/local reference 49308 cleanups. 49309 49310 * Aaron Luchko for JDWP updates and documentation fixes. 49311 49312 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 49313 features. 49314 49315 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 49316 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 49317 and implementing the Qt4 peers. 49318 49319 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 49320 `SystemLogger' and `FileHandler' rotate implementations, NIO 49321 `FileChannel.map' support, security and policy updates. 49322 49323 * Bryce McKinlay for RMI work. 49324 49325 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 49326 testing and documenting. 49327 49328 * Kalle Olavi Niemitalo for build fixes. 49329 49330 * Rainer Orth for build fixes. 49331 49332 * Andrew Overholt for `File' locking fixes. 49333 49334 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 49335 49336 * Olga Rodimina for `MenuSelectionManager' implementation. 49337 49338 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 49339 49340 * Julian Scheid for documentation updates and gjdoc support. 49341 49342 * Christian Schlichtherle for zip fixes and cleanups. 49343 49344 * Robert Schuster for documentation updates and beans fixes, 49345 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 49346 and URL, AWT and Free Swing bug fixes. 49347 49348 * Keith Seitz for lots of JDWP work. 49349 49350 * Christian Thalinger for 64-bit cleanups, Configuration and VM 49351 interface fixes and `CACAO' integration, `fdlibm' updates. 49352 49353 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 49354 49355 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 49356 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 49357 49358 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 49359 integration. `Qt4' build infrastructure, `SHA1PRNG' and 49360 `GdkPixbugDecoder' updates. 49361 49362 * Tom Tromey for Eclipse integration, generics work, lots of bug 49363 fixes and gcj integration including coordinating The Big Merge. 49364 49365 * Mark Wielaard for bug fixes, packaging and release management, 49366 `Clipboard' implementation, system call interrupts and network 49367 timeouts and `GdkPixpufDecoder' fixes. 49368 49369 49370 In addition to the above, all of which also contributed time and 49371energy in testing GCC, we would like to thank the following for their 49372contributions to testing: 49373 49374 * Michael Abd-El-Malek 49375 49376 * Thomas Arend 49377 49378 * Bonzo Armstrong 49379 49380 * Steven Ashe 49381 49382 * Chris Baldwin 49383 49384 * David Billinghurst 49385 49386 * Jim Blandy 49387 49388 * Stephane Bortzmeyer 49389 49390 * Horst von Brand 49391 49392 * Frank Braun 49393 49394 * Rodney Brown 49395 49396 * Sidney Cadot 49397 49398 * Bradford Castalia 49399 49400 * Robert Clark 49401 49402 * Jonathan Corbet 49403 49404 * Ralph Doncaster 49405 49406 * Richard Emberson 49407 49408 * Levente Farkas 49409 49410 * Graham Fawcett 49411 49412 * Mark Fernyhough 49413 49414 * Robert A. French 49415 49416 * Jo"rgen Freyh 49417 49418 * Mark K. Gardner 49419 49420 * Charles-Antoine Gauthier 49421 49422 * Yung Shing Gene 49423 49424 * David Gilbert 49425 49426 * Simon Gornall 49427 49428 * Fred Gray 49429 49430 * John Griffin 49431 49432 * Patrik Hagglund 49433 49434 * Phil Hargett 49435 49436 * Amancio Hasty 49437 49438 * Takafumi Hayashi 49439 49440 * Bryan W. Headley 49441 49442 * Kevin B. Hendricks 49443 49444 * Joep Jansen 49445 49446 * Christian Joensson 49447 49448 * Michel Kern 49449 49450 * David Kidd 49451 49452 * Tobias Kuipers 49453 49454 * Anand Krishnaswamy 49455 49456 * A. O. V. Le Blanc 49457 49458 * llewelly 49459 49460 * Damon Love 49461 49462 * Brad Lucier 49463 49464 * Matthias Klose 49465 49466 * Martin Knoblauch 49467 49468 * Rick Lutowski 49469 49470 * Jesse Macnish 49471 49472 * Stefan Morrell 49473 49474 * Anon A. Mous 49475 49476 * Matthias Mueller 49477 49478 * Pekka Nikander 49479 49480 * Rick Niles 49481 49482 * Jon Olson 49483 49484 * Magnus Persson 49485 49486 * Chris Pollard 49487 49488 * Richard Polton 49489 49490 * Derk Reefman 49491 49492 * David Rees 49493 49494 * Paul Reilly 49495 49496 * Tom Reilly 49497 49498 * Torsten Rueger 49499 49500 * Danny Sadinoff 49501 49502 * Marc Schifer 49503 49504 * Erik Schnetter 49505 49506 * Wayne K. Schroll 49507 49508 * David Schuler 49509 49510 * Vin Shelton 49511 49512 * Tim Souder 49513 49514 * Adam Sulmicki 49515 49516 * Bill Thorson 49517 49518 * George Talbot 49519 49520 * Pedro A. M. Vazquez 49521 49522 * Gregory Warnes 49523 49524 * Ian Watson 49525 49526 * David E. Young 49527 49528 * And many others 49529 49530 And finally we'd like to thank everyone who uses the compiler, provides 49531feedback and generally reminds us why we're doing this work in the first 49532place. 49533 49534 49535File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 49536 49537Option Index 49538************ 49539 49540GCC's command line options are indexed here without any initial `-' or 49541`--'. Where an option has both positive and negative forms (such as 49542`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 49543indexed under the most appropriate form; it may sometimes be useful to 49544look up both forms. 49545 49546[index] 49547* Menu: 49548 49549* ###: Overall Options. (line 209) 49550* -fno-keep-inline-dllexport: Optimize Options. (line 319) 49551* -mcpu: RX Options. (line 30) 49552* -mfix-cortex-a53-835769: AArch64 Options. (line 56) 49553* -mno-fix-cortex-a53-835769: AArch64 Options. (line 56) 49554* -mpointer-size=SIZE: VMS Options. (line 20) 49555* 8bit-idiv: i386 and x86-64 Options. 49556 (line 824) 49557* A: Preprocessor Options. 49558 (line 597) 49559* all_load: Darwin Options. (line 110) 49560* allowable_client: Darwin Options. (line 196) 49561* ansi <1>: Non-bugs. (line 107) 49562* ansi <2>: Other Builtins. (line 22) 49563* ansi <3>: Preprocessor Options. 49564 (line 338) 49565* ansi <4>: C Dialect Options. (line 11) 49566* ansi: Standards. (line 16) 49567* arch_errors_fatal: Darwin Options. (line 114) 49568* aux-info: C Dialect Options. (line 168) 49569* avx256-split-unaligned-load: i386 and x86-64 Options. 49570 (line 832) 49571* avx256-split-unaligned-store: i386 and x86-64 Options. 49572 (line 832) 49573* B: Directory Options. (line 46) 49574* Bdynamic: VxWorks Options. (line 22) 49575* bind_at_load: Darwin Options. (line 118) 49576* Bstatic: VxWorks Options. (line 22) 49577* bundle: Darwin Options. (line 123) 49578* bundle_loader: Darwin Options. (line 127) 49579* c: Link Options. (line 20) 49580* C: Preprocessor Options. 49581 (line 655) 49582* c: Overall Options. (line 164) 49583* client_name: Darwin Options. (line 196) 49584* compatibility_version: Darwin Options. (line 196) 49585* coverage: Debugging Options. (line 412) 49586* current_version: Darwin Options. (line 196) 49587* D: Preprocessor Options. 49588 (line 46) 49589* d: Debugging Options. (line 544) 49590* dA: Debugging Options. (line 754) 49591* da: Debugging Options. (line 751) 49592* dD <1>: Preprocessor Options. 49593 (line 629) 49594* dD: Debugging Options. (line 758) 49595* dead_strip: Darwin Options. (line 196) 49596* dependency-file: Darwin Options. (line 196) 49597* dH: Debugging Options. (line 762) 49598* dI: Preprocessor Options. 49599 (line 638) 49600* dM: Preprocessor Options. 49601 (line 613) 49602* dN: Preprocessor Options. 49603 (line 635) 49604* dP: Debugging Options. (line 770) 49605* dp: Debugging Options. (line 765) 49606* dU: Preprocessor Options. 49607 (line 642) 49608* dumpmachine: Debugging Options. (line 1380) 49609* dumpspecs: Debugging Options. (line 1388) 49610* dumpversion: Debugging Options. (line 1384) 49611* dx: Debugging Options. (line 774) 49612* dylib_file: Darwin Options. (line 196) 49613* dylinker_install_name: Darwin Options. (line 196) 49614* dynamic: Darwin Options. (line 196) 49615* dynamiclib: Darwin Options. (line 131) 49616* E <1>: Link Options. (line 20) 49617* E: Overall Options. (line 185) 49618* EB: MIPS Options. (line 7) 49619* EL: MIPS Options. (line 10) 49620* exported_symbols_list: Darwin Options. (line 196) 49621* F: Darwin Options. (line 31) 49622* fabi-version: C++ Dialect Options. 49623 (line 20) 49624* fada-spec-parent: Overall Options. (line 369) 49625* faggressive-loop-optimizations: Optimize Options. (line 509) 49626* falign-functions: Optimize Options. (line 1462) 49627* falign-jumps: Optimize Options. (line 1511) 49628* falign-labels: Optimize Options. (line 1480) 49629* falign-loops: Optimize Options. (line 1498) 49630* fassociative-math: Optimize Options. (line 1955) 49631* fasynchronous-unwind-tables: Code Gen Options. (line 146) 49632* fauto-inc-dec: Optimize Options. (line 533) 49633* fbounds-check: Code Gen Options. (line 15) 49634* fbranch-probabilities: Optimize Options. (line 2082) 49635* fbranch-target-load-optimize: Optimize Options. (line 2190) 49636* fbranch-target-load-optimize2: Optimize Options. (line 2196) 49637* fbtr-bb-exclusive: Optimize Options. (line 2200) 49638* fcall-saved: Code Gen Options. (line 358) 49639* fcall-used: Code Gen Options. (line 344) 49640* fcaller-saves: Optimize Options. (line 829) 49641* fcheck-data-deps: Optimize Options. (line 1094) 49642* fcheck-new: C++ Dialect Options. 49643 (line 55) 49644* fcombine-stack-adjustments: Optimize Options. (line 841) 49645* fcommon: Variable Attributes. 49646 (line 105) 49647* fcompare-debug: Debugging Options. (line 200) 49648* fcompare-debug-second: Debugging Options. (line 226) 49649* fcompare-elim: Optimize Options. (line 1794) 49650* fcond-mismatch: C Dialect Options. (line 315) 49651* fconserve-stack: Optimize Options. (line 847) 49652* fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 49653 (line 30) 49654* fconstexpr-depth: C++ Dialect Options. 49655 (line 65) 49656* fcprop-registers: Optimize Options. (line 1812) 49657* fcrossjumping: Optimize Options. (line 526) 49658* fcse-follow-jumps: Optimize Options. (line 445) 49659* fcse-skip-blocks: Optimize Options. (line 454) 49660* fcx-fortran-rules: Optimize Options. (line 2068) 49661* fcx-limited-range: Optimize Options. (line 2056) 49662* fdata-sections: Optimize Options. (line 2171) 49663* fdbg-cnt: Debugging Options. (line 465) 49664* fdbg-cnt-list: Debugging Options. (line 462) 49665* fdce: Optimize Options. (line 539) 49666* fdebug-cpp: Preprocessor Options. 49667 (line 526) 49668* fdebug-prefix-map: Debugging Options. (line 320) 49669* fdebug-types-section: Debugging Options. (line 74) 49670* fdeduce-init-list: C++ Dialect Options. 49671 (line 71) 49672* fdelayed-branch: Optimize Options. (line 676) 49673* fdelete-dead-exceptions: Code Gen Options. (line 131) 49674* fdelete-null-pointer-checks: Optimize Options. (line 562) 49675* fdevirtualize: Optimize Options. (line 580) 49676* fdiagnostics-show-caret: Language Independent Options. 49677 (line 40) 49678* fdiagnostics-show-location: Language Independent Options. 49679 (line 20) 49680* fdiagnostics-show-option: Language Independent Options. 49681 (line 34) 49682* fdirectives-only: Preprocessor Options. 49683 (line 473) 49684* fdisable-: Debugging Options. (line 475) 49685* fdollars-in-identifiers <1>: Interoperation. (line 141) 49686* fdollars-in-identifiers: Preprocessor Options. 49687 (line 495) 49688* fdse: Optimize Options. (line 543) 49689* fdump-ada-spec: Overall Options. (line 363) 49690* fdump-class-hierarchy: Debugging Options. (line 805) 49691* fdump-final-insns: Debugging Options. (line 194) 49692* fdump-go-spec: Overall Options. (line 373) 49693* fdump-ipa: Debugging Options. (line 813) 49694* fdump-noaddr: Debugging Options. (line 778) 49695* fdump-passes: Debugging Options. (line 831) 49696* fdump-rtl-alignments: Debugging Options. (line 565) 49697* fdump-rtl-all: Debugging Options. (line 751) 49698* fdump-rtl-asmcons: Debugging Options. (line 568) 49699* fdump-rtl-auto_inc_dec: Debugging Options. (line 572) 49700* fdump-rtl-barriers: Debugging Options. (line 576) 49701* fdump-rtl-bbpart: Debugging Options. (line 579) 49702* fdump-rtl-bbro: Debugging Options. (line 582) 49703* fdump-rtl-btl2: Debugging Options. (line 586) 49704* fdump-rtl-bypass: Debugging Options. (line 590) 49705* fdump-rtl-ce1: Debugging Options. (line 601) 49706* fdump-rtl-ce2: Debugging Options. (line 601) 49707* fdump-rtl-ce3: Debugging Options. (line 601) 49708* fdump-rtl-combine: Debugging Options. (line 593) 49709* fdump-rtl-compgotos: Debugging Options. (line 596) 49710* fdump-rtl-cprop_hardreg: Debugging Options. (line 605) 49711* fdump-rtl-csa: Debugging Options. (line 608) 49712* fdump-rtl-cse1: Debugging Options. (line 612) 49713* fdump-rtl-cse2: Debugging Options. (line 612) 49714* fdump-rtl-dbr: Debugging Options. (line 619) 49715* fdump-rtl-dce: Debugging Options. (line 616) 49716* fdump-rtl-dce1: Debugging Options. (line 623) 49717* fdump-rtl-dce2: Debugging Options. (line 623) 49718* fdump-rtl-dfinish: Debugging Options. (line 747) 49719* fdump-rtl-dfinit: Debugging Options. (line 747) 49720* fdump-rtl-eh: Debugging Options. (line 627) 49721* fdump-rtl-eh_ranges: Debugging Options. (line 630) 49722* fdump-rtl-expand: Debugging Options. (line 633) 49723* fdump-rtl-fwprop1: Debugging Options. (line 637) 49724* fdump-rtl-fwprop2: Debugging Options. (line 637) 49725* fdump-rtl-gcse1: Debugging Options. (line 642) 49726* fdump-rtl-gcse2: Debugging Options. (line 642) 49727* fdump-rtl-init-regs: Debugging Options. (line 646) 49728* fdump-rtl-initvals: Debugging Options. (line 649) 49729* fdump-rtl-into_cfglayout: Debugging Options. (line 652) 49730* fdump-rtl-ira: Debugging Options. (line 655) 49731* fdump-rtl-jump: Debugging Options. (line 658) 49732* fdump-rtl-loop2: Debugging Options. (line 661) 49733* fdump-rtl-mach: Debugging Options. (line 665) 49734* fdump-rtl-mode_sw: Debugging Options. (line 669) 49735* fdump-rtl-outof_cfglayout: Debugging Options. (line 675) 49736* fdump-rtl-peephole2: Debugging Options. (line 678) 49737* fdump-rtl-postreload: Debugging Options. (line 681) 49738* fdump-rtl-pro_and_epilogue: Debugging Options. (line 684) 49739* fdump-rtl-regclass: Debugging Options. (line 747) 49740* fdump-rtl-regmove: Debugging Options. (line 687) 49741* fdump-rtl-rnreg: Debugging Options. (line 672) 49742* fdump-rtl-sched1: Debugging Options. (line 691) 49743* fdump-rtl-sched2: Debugging Options. (line 691) 49744* fdump-rtl-see: Debugging Options. (line 695) 49745* fdump-rtl-seqabstr: Debugging Options. (line 698) 49746* fdump-rtl-shorten: Debugging Options. (line 701) 49747* fdump-rtl-sibling: Debugging Options. (line 704) 49748* fdump-rtl-sms: Debugging Options. (line 717) 49749* fdump-rtl-split1: Debugging Options. (line 711) 49750* fdump-rtl-split2: Debugging Options. (line 711) 49751* fdump-rtl-split3: Debugging Options. (line 711) 49752* fdump-rtl-split4: Debugging Options. (line 711) 49753* fdump-rtl-split5: Debugging Options. (line 711) 49754* fdump-rtl-stack: Debugging Options. (line 721) 49755* fdump-rtl-subreg1: Debugging Options. (line 727) 49756* fdump-rtl-subreg2: Debugging Options. (line 727) 49757* fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 747) 49758* fdump-rtl-subregs_of_mode_init: Debugging Options. (line 747) 49759* fdump-rtl-unshare: Debugging Options. (line 731) 49760* fdump-rtl-vartrack: Debugging Options. (line 734) 49761* fdump-rtl-vregs: Debugging Options. (line 737) 49762* fdump-rtl-web: Debugging Options. (line 740) 49763* fdump-statistics: Debugging Options. (line 835) 49764* fdump-translation-unit: Debugging Options. (line 796) 49765* fdump-tree: Debugging Options. (line 847) 49766* fdump-tree-alias: Debugging Options. (line 986) 49767* fdump-tree-all: Debugging Options. (line 1076) 49768* fdump-tree-ccp: Debugging Options. (line 990) 49769* fdump-tree-cfg: Debugging Options. (line 974) 49770* fdump-tree-ch: Debugging Options. (line 978) 49771* fdump-tree-copyprop: Debugging Options. (line 1006) 49772* fdump-tree-copyrename: Debugging Options. (line 1052) 49773* fdump-tree-dce: Debugging Options. (line 1014) 49774* fdump-tree-dom: Debugging Options. (line 1032) 49775* fdump-tree-dse: Debugging Options. (line 1037) 49776* fdump-tree-forwprop: Debugging Options. (line 1047) 49777* fdump-tree-fre: Debugging Options. (line 1002) 49778* fdump-tree-gimple: Debugging Options. (line 969) 49779* fdump-tree-mudflap: Debugging Options. (line 1018) 49780* fdump-tree-nrv: Debugging Options. (line 1057) 49781* fdump-tree-optimized: Debugging Options. (line 966) 49782* fdump-tree-original: Debugging Options. (line 963) 49783* fdump-tree-phiopt: Debugging Options. (line 1042) 49784* fdump-tree-pre: Debugging Options. (line 998) 49785* fdump-tree-sink: Debugging Options. (line 1028) 49786* fdump-tree-slp: Debugging Options. (line 1067) 49787* fdump-tree-sra: Debugging Options. (line 1023) 49788* fdump-tree-ssa: Debugging Options. (line 982) 49789* fdump-tree-store_copyprop: Debugging Options. (line 1010) 49790* fdump-tree-storeccp: Debugging Options. (line 994) 49791* fdump-tree-vect: Debugging Options. (line 1062) 49792* fdump-tree-vrp: Debugging Options. (line 1072) 49793* fdump-unnumbered: Debugging Options. (line 784) 49794* fdump-unnumbered-links: Debugging Options. (line 790) 49795* fdwarf2-cfi-asm: Debugging Options. (line 324) 49796* fearly-inlining: Optimize Options. (line 276) 49797* feliminate-dwarf2-dups: Debugging Options. (line 239) 49798* feliminate-unused-debug-symbols: Debugging Options. (line 62) 49799* feliminate-unused-debug-types: Debugging Options. (line 1392) 49800* fenable-: Debugging Options. (line 475) 49801* fexceptions: Code Gen Options. (line 108) 49802* fexcess-precision: Optimize Options. (line 1883) 49803* fexec-charset: Preprocessor Options. 49804 (line 554) 49805* fexpensive-optimizations: Optimize Options. (line 587) 49806* fext-numeric-literals: C++ Dialect Options. 49807 (line 547) 49808* fextended-identifiers: Preprocessor Options. 49809 (line 498) 49810* fextern-tls-init: C++ Dialect Options. 49811 (line 122) 49812* ffast-math: Optimize Options. (line 1906) 49813* ffat-lto-objects: Optimize Options. (line 1774) 49814* ffinite-math-only: Optimize Options. (line 1980) 49815* ffix-and-continue: Darwin Options. (line 104) 49816* ffixed: Code Gen Options. (line 332) 49817* ffloat-store <1>: Disappointments. (line 77) 49818* ffloat-store: Optimize Options. (line 1869) 49819* ffor-scope: C++ Dialect Options. 49820 (line 143) 49821* fforward-propagate: Optimize Options. (line 185) 49822* ffp-contract: Optimize Options. (line 194) 49823* ffreestanding <1>: Function Attributes. 49824 (line 459) 49825* ffreestanding <2>: Warning Options. (line 255) 49826* ffreestanding <3>: C Dialect Options. (line 246) 49827* ffreestanding: Standards. (line 93) 49828* ffriend-injection: C++ Dialect Options. 49829 (line 92) 49830* ffunction-sections: Optimize Options. (line 2171) 49831* fgcse: Optimize Options. (line 468) 49832* fgcse-after-reload: Optimize Options. (line 504) 49833* fgcse-las: Optimize Options. (line 497) 49834* fgcse-lm: Optimize Options. (line 479) 49835* fgcse-sm: Optimize Options. (line 488) 49836* fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 49837 (line 39) 49838* fgnu-tm: C Dialect Options. (line 264) 49839* fgnu89-inline: C Dialect Options. (line 147) 49840* fgraphite-identity: Optimize Options. (line 1074) 49841* fhosted: C Dialect Options. (line 239) 49842* fif-conversion: Optimize Options. (line 547) 49843* fif-conversion2: Optimize Options. (line 556) 49844* filelist: Darwin Options. (line 196) 49845* findirect-data: Darwin Options. (line 104) 49846* findirect-inlining: Optimize Options. (line 249) 49847* finhibit-size-directive: Code Gen Options. (line 252) 49848* finline-functions: Optimize Options. (line 257) 49849* finline-functions-called-once: Optimize Options. (line 268) 49850* finline-limit: Optimize Options. (line 293) 49851* finline-small-functions: Optimize Options. (line 240) 49852* finput-charset: Preprocessor Options. 49853 (line 567) 49854* finstrument-functions <1>: Function Attributes. 49855 (line 958) 49856* finstrument-functions: Code Gen Options. (line 388) 49857* finstrument-functions-exclude-file-list: Code Gen Options. (line 424) 49858* finstrument-functions-exclude-function-list: Code Gen Options. 49859 (line 444) 49860* fipa-cp: Optimize Options. (line 913) 49861* fipa-cp-clone: Optimize Options. (line 921) 49862* fipa-profile: Optimize Options. (line 905) 49863* fipa-pta: Optimize Options. (line 899) 49864* fipa-pure-const: Optimize Options. (line 891) 49865* fipa-reference: Optimize Options. (line 895) 49866* fipa-sra: Optimize Options. (line 286) 49867* fira-hoist-pressure: Optimize Options. (line 643) 49868* fira-loop-pressure: Optimize Options. (line 650) 49869* fira-verbose: Optimize Options. (line 670) 49870* fivopts: Optimize Options. (line 1170) 49871* fkeep-inline-functions <1>: Inline. (line 51) 49872* fkeep-inline-functions: Optimize Options. (line 325) 49873* fkeep-static-consts: Optimize Options. (line 332) 49874* flat_namespace: Darwin Options. (line 196) 49875* flax-vector-conversions: C Dialect Options. (line 320) 49876* fleading-underscore: Code Gen Options. (line 527) 49877* floop-block: Optimize Options. (line 1045) 49878* floop-interchange: Optimize Options. (line 1000) 49879* floop-nest-optimize: Optimize Options. (line 1082) 49880* floop-parallelize-all: Optimize Options. (line 1088) 49881* floop-strip-mine: Optimize Options. (line 1024) 49882* flto: Optimize Options. (line 1565) 49883* flto-partition: Optimize Options. (line 1729) 49884* fmax-errors: Warning Options. (line 18) 49885* fmem-report: Debugging Options. (line 348) 49886* fmem-report-wpa: Debugging Options. (line 352) 49887* fmerge-all-constants: Optimize Options. (line 351) 49888* fmerge-constants: Optimize Options. (line 341) 49889* fmerge-debug-strings: Debugging Options. (line 313) 49890* fmessage-length: Language Independent Options. 49891 (line 14) 49892* fmodulo-sched: Optimize Options. (line 362) 49893* fmodulo-sched-allow-regmoves: Optimize Options. (line 367) 49894* fmove-loop-invariants: Optimize Options. (line 2161) 49895* fms-extensions <1>: Unnamed Fields. (line 36) 49896* fms-extensions <2>: C++ Dialect Options. 49897 (line 177) 49898* fms-extensions: C Dialect Options. (line 279) 49899* fmudflap: Optimize Options. (line 407) 49900* fmudflapir: Optimize Options. (line 407) 49901* fmudflapth: Optimize Options. (line 407) 49902* fnext-runtime: Objective-C and Objective-C++ Dialect Options. 49903 (line 43) 49904* fno-access-control: C++ Dialect Options. 49905 (line 51) 49906* fno-asm: C Dialect Options. (line 191) 49907* fno-branch-count-reg: Optimize Options. (line 374) 49908* fno-builtin <1>: Other Builtins. (line 14) 49909* fno-builtin <2>: Function Attributes. 49910 (line 459) 49911* fno-builtin <3>: Warning Options. (line 255) 49912* fno-builtin: C Dialect Options. (line 205) 49913* fno-canonical-system-headers: Preprocessor Options. 49914 (line 503) 49915* fno-common <1>: Variable Attributes. 49916 (line 105) 49917* fno-common: Code Gen Options. (line 229) 49918* fno-compare-debug: Debugging Options. (line 200) 49919* fno-debug-types-section: Debugging Options. (line 74) 49920* fno-default-inline <1>: Inline. (line 71) 49921* fno-default-inline <2>: Optimize Options. (line 170) 49922* fno-default-inline: C++ Dialect Options. 49923 (line 356) 49924* fno-defer-pop: Optimize Options. (line 177) 49925* fno-diagnostics-show-caret: Language Independent Options. 49926 (line 40) 49927* fno-diagnostics-show-option: Language Independent Options. 49928 (line 34) 49929* fno-dwarf2-cfi-asm: Debugging Options. (line 324) 49930* fno-elide-constructors: C++ Dialect Options. 49931 (line 105) 49932* fno-eliminate-unused-debug-types: Debugging Options. (line 1392) 49933* fno-enforce-eh-specs: C++ Dialect Options. 49934 (line 111) 49935* fno-ext-numeric-literals: C++ Dialect Options. 49936 (line 547) 49937* fno-extern-tls-init: C++ Dialect Options. 49938 (line 122) 49939* fno-for-scope: C++ Dialect Options. 49940 (line 143) 49941* fno-function-cse: Optimize Options. (line 384) 49942* fno-gnu-keywords: C++ Dialect Options. 49943 (line 155) 49944* fno-gnu-unique: Code Gen Options. (line 152) 49945* fno-guess-branch-probability: Optimize Options. (line 1334) 49946* fno-ident: Code Gen Options. (line 249) 49947* fno-implement-inlines <1>: C++ Interface. (line 75) 49948* fno-implement-inlines: C++ Dialect Options. 49949 (line 172) 49950* fno-implicit-inline-templates: C++ Dialect Options. 49951 (line 166) 49952* fno-implicit-templates <1>: Template Instantiation. 49953 (line 78) 49954* fno-implicit-templates: C++ Dialect Options. 49955 (line 160) 49956* fno-inline: Optimize Options. (line 232) 49957* fno-ira-share-save-slots: Optimize Options. (line 658) 49958* fno-ira-share-spill-slots: Optimize Options. (line 664) 49959* fno-jump-tables: Code Gen Options. (line 324) 49960* fno-math-errno: Optimize Options. (line 1920) 49961* fno-merge-debug-strings: Debugging Options. (line 313) 49962* fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 49963 (line 49) 49964* fno-nonansi-builtins: C++ Dialect Options. 49965 (line 182) 49966* fno-operator-names: C++ Dialect Options. 49967 (line 198) 49968* fno-optional-diags: C++ Dialect Options. 49969 (line 202) 49970* fno-peephole: Optimize Options. (line 1325) 49971* fno-peephole2: Optimize Options. (line 1325) 49972* fno-pretty-templates: C++ Dialect Options. 49973 (line 212) 49974* fno-rtti: C++ Dialect Options. 49975 (line 229) 49976* fno-sched-interblock: Optimize Options. (line 702) 49977* fno-sched-spec: Optimize Options. (line 707) 49978* fno-set-stack-executable: i386 and x86-64 Windows Options. 49979 (line 46) 49980* fno-show-column: Preprocessor Options. 49981 (line 592) 49982* fno-signed-bitfields: C Dialect Options. (line 353) 49983* fno-signed-zeros: Optimize Options. (line 1992) 49984* fno-stack-limit: Code Gen Options. (line 495) 49985* fno-threadsafe-statics: C++ Dialect Options. 49986 (line 266) 49987* fno-toplevel-reorder: Optimize Options. (line 1531) 49988* fno-trapping-math: Optimize Options. (line 2002) 49989* fno-unsigned-bitfields: C Dialect Options. (line 353) 49990* fno-use-cxa-get-exception-ptr: C++ Dialect Options. 49991 (line 279) 49992* fno-var-tracking-assignments: Debugging Options. (line 1300) 49993* fno-var-tracking-assignments-toggle: Debugging Options. (line 1309) 49994* fno-weak: C++ Dialect Options. 49995 (line 341) 49996* fno-working-directory: Preprocessor Options. 49997 (line 577) 49998* fno-writable-relocated-rdata: i386 and x86-64 Windows Options. 49999 (line 53) 50000* fno-zero-initialized-in-bss: Optimize Options. (line 395) 50001* fnon-call-exceptions: Code Gen Options. (line 122) 50002* fnothrow-opt: C++ Dialect Options. 50003 (line 187) 50004* fobjc-abi-version: Objective-C and Objective-C++ Dialect Options. 50005 (line 56) 50006* fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 50007 (line 67) 50008* fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 50009 (line 92) 50010* fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 50011 (line 96) 50012* fobjc-gc: Objective-C and Objective-C++ Dialect Options. 50013 (line 105) 50014* fobjc-nilcheck: Objective-C and Objective-C++ Dialect Options. 50015 (line 111) 50016* fobjc-std: Objective-C and Objective-C++ Dialect Options. 50017 (line 120) 50018* fomit-frame-pointer: Optimize Options. (line 205) 50019* fopenmp: C Dialect Options. (line 256) 50020* fopt-info: Debugging Options. (line 1082) 50021* foptimize-register-move: Optimize Options. (line 602) 50022* foptimize-sibling-calls: Optimize Options. (line 227) 50023* force_cpusubtype_ALL: Darwin Options. (line 135) 50024* force_flat_namespace: Darwin Options. (line 196) 50025* fpack-struct: Code Gen Options. (line 375) 50026* fpartial-inlining: Optimize Options. (line 1300) 50027* fpcc-struct-return <1>: Incompatibilities. (line 170) 50028* fpcc-struct-return: Code Gen Options. (line 165) 50029* fpch-deps: Preprocessor Options. 50030 (line 294) 50031* fpch-preprocess: Preprocessor Options. 50032 (line 302) 50033* fpeel-loops: Optimize Options. (line 2153) 50034* fpermissive: C++ Dialect Options. 50035 (line 207) 50036* fPIC: Code Gen Options. (line 301) 50037* fpic: Code Gen Options. (line 280) 50038* fPIE: Code Gen Options. (line 314) 50039* fpie: Code Gen Options. (line 314) 50040* fplan9-extensions: Unnamed Fields. (line 44) 50041* fpost-ipa-mem-report: Debugging Options. (line 358) 50042* fpre-ipa-mem-report: Debugging Options. (line 356) 50043* fpredictive-commoning: Optimize Options. (line 1307) 50044* fprefetch-loop-arrays: Optimize Options. (line 1314) 50045* fpreprocessed: Preprocessor Options. 50046 (line 507) 50047* fprofile-arcs <1>: Other Builtins. (line 257) 50048* fprofile-arcs: Debugging Options. (line 397) 50049* fprofile-correction: Optimize Options. (line 1819) 50050* fprofile-dir: Optimize Options. (line 1826) 50051* fprofile-generate: Optimize Options. (line 1836) 50052* fprofile-report: Debugging Options. (line 362) 50053* fprofile-use: Optimize Options. (line 1849) 50054* fprofile-values: Optimize Options. (line 2101) 50055* fpu: RX Options. (line 17) 50056* frandom-seed: Debugging Options. (line 1194) 50057* freciprocal-math: Optimize Options. (line 1971) 50058* frecord-gcc-switches: Code Gen Options. (line 268) 50059* free: Optimize Options. (line 593) 50060* freg-struct-return: Code Gen Options. (line 183) 50061* fregmove: Optimize Options. (line 602) 50062* frename-registers: Optimize Options. (line 2120) 50063* freorder-blocks: Optimize Options. (line 1351) 50064* freorder-blocks-and-partition: Optimize Options. (line 1357) 50065* freorder-functions: Optimize Options. (line 1368) 50066* freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 50067 (line 131) 50068* frepo <1>: Template Instantiation. 50069 (line 54) 50070* frepo: C++ Dialect Options. 50071 (line 224) 50072* frerun-cse-after-loop: Optimize Options. (line 462) 50073* freschedule-modulo-scheduled-loops: Optimize Options. (line 801) 50074* frounding-math: Optimize Options. (line 2017) 50075* fsched-critical-path-heuristic: Optimize Options. (line 767) 50076* fsched-dep-count-heuristic: Optimize Options. (line 794) 50077* fsched-group-heuristic: Optimize Options. (line 761) 50078* fsched-last-insn-heuristic: Optimize Options. (line 787) 50079* fsched-pressure: Optimize Options. (line 712) 50080* fsched-rank-heuristic: Optimize Options. (line 780) 50081* fsched-spec-insn-heuristic: Optimize Options. (line 773) 50082* fsched-spec-load: Optimize Options. (line 721) 50083* fsched-spec-load-dangerous: Optimize Options. (line 726) 50084* fsched-stalled-insns: Optimize Options. (line 732) 50085* fsched-stalled-insns-dep: Optimize Options. (line 742) 50086* fsched-verbose: Debugging Options. (line 1204) 50087* fsched2-use-superblocks: Optimize Options. (line 751) 50088* fschedule-insns: Optimize Options. (line 683) 50089* fschedule-insns2: Optimize Options. (line 693) 50090* fsection-anchors: Optimize Options. (line 2216) 50091* fsel-sched-pipelining: Optimize Options. (line 814) 50092* fsel-sched-pipelining-outer-loops: Optimize Options. (line 819) 50093* fselective-scheduling: Optimize Options. (line 806) 50094* fselective-scheduling2: Optimize Options. (line 810) 50095* fshort-double: Code Gen Options. (line 211) 50096* fshort-enums <1>: Non-bugs. (line 42) 50097* fshort-enums <2>: Type Attributes. (line 113) 50098* fshort-enums <3>: Structures unions enumerations and bit-fields implementation. 50099 (line 43) 50100* fshort-enums: Code Gen Options. (line 201) 50101* fshort-wchar: Code Gen Options. (line 219) 50102* fshrink-wrap: Optimize Options. (line 824) 50103* fsignaling-nans: Optimize Options. (line 2037) 50104* fsigned-bitfields <1>: Non-bugs. (line 57) 50105* fsigned-bitfields: C Dialect Options. (line 353) 50106* fsigned-char <1>: Characters implementation. 50107 (line 31) 50108* fsigned-char: C Dialect Options. (line 343) 50109* fsingle-precision-constant: Optimize Options. (line 2052) 50110* fsplit-ivs-in-unroller: Optimize Options. (line 1281) 50111* fsplit-stack <1>: Function Attributes. 50112 (line 963) 50113* fsplit-stack: Code Gen Options. (line 509) 50114* fsplit-wide-types: Optimize Options. (line 437) 50115* fstack-check: Code Gen Options. (line 456) 50116* fstack-limit-register: Code Gen Options. (line 495) 50117* fstack-limit-symbol: Code Gen Options. (line 495) 50118* fstack-protector: Optimize Options. (line 2204) 50119* fstack-protector-all: Optimize Options. (line 2213) 50120* fstack-usage: Debugging Options. (line 366) 50121* fstack_reuse: Code Gen Options. (line 21) 50122* fstats: C++ Dialect Options. 50123 (line 239) 50124* fstrict-aliasing: Optimize Options. (line 1381) 50125* fstrict-enums: C++ Dialect Options. 50126 (line 244) 50127* fstrict-overflow: Optimize Options. (line 1427) 50128* fstrict-volatile-bitfields: Code Gen Options. (line 612) 50129* fsync-libcalls: Code Gen Options. (line 641) 50130* fsyntax-only: Warning Options. (line 14) 50131* ftabstop: Preprocessor Options. 50132 (line 520) 50133* ftemplate-backtrace-limit: C++ Dialect Options. 50134 (line 253) 50135* ftemplate-depth: C++ Dialect Options. 50136 (line 257) 50137* ftest-coverage: Debugging Options. (line 453) 50138* fthread-jumps: Optimize Options. (line 428) 50139* ftime-report: Debugging Options. (line 344) 50140* ftls-model: Code Gen Options. (line 538) 50141* ftracer: Optimize Options. (line 1264) 50142* ftrack-macro-expansion: Preprocessor Options. 50143 (line 536) 50144* ftrapv: Code Gen Options. (line 96) 50145* ftree-bit-ccp: Optimize Options. (line 935) 50146* ftree-builtin-call-dce: Optimize Options. (line 963) 50147* ftree-ccp: Optimize Options. (line 941) 50148* ftree-ch: Optimize Options. (line 983) 50149* ftree-copy-prop: Optimize Options. (line 886) 50150* ftree-copyrename: Optimize Options. (line 1194) 50151* ftree-dce: Optimize Options. (line 959) 50152* ftree-dominator-opts: Optimize Options. (line 969) 50153* ftree-dse: Optimize Options. (line 976) 50154* ftree-forwprop: Optimize Options. (line 865) 50155* ftree-fre: Optimize Options. (line 869) 50156* ftree-loop-im: Optimize Options. (line 1155) 50157* ftree-loop-ivcanon: Optimize Options. (line 1164) 50158* ftree-loop-linear: Optimize Options. (line 994) 50159* ftree-loop-optimize: Optimize Options. (line 990) 50160* ftree-parallelize-loops: Optimize Options. (line 1175) 50161* ftree-partial-pre: Optimize Options. (line 861) 50162* ftree-phiprop: Optimize Options. (line 876) 50163* ftree-pre: Optimize Options. (line 857) 50164* ftree-pta: Optimize Options. (line 1184) 50165* ftree-reassoc: Optimize Options. (line 853) 50166* ftree-sink: Optimize Options. (line 931) 50167* ftree-slp-vectorize: Optimize Options. (line 1238) 50168* ftree-slsr: Optimize Options. (line 1228) 50169* ftree-sra: Optimize Options. (line 1188) 50170* ftree-ter: Optimize Options. (line 1220) 50171* ftree-vect-loop-version: Optimize Options. (line 1242) 50172* ftree-vectorize: Optimize Options. (line 1234) 50173* ftree-vectorizer-verbose: Debugging Options. (line 1177) 50174* ftree-vrp: Optimize Options. (line 1255) 50175* funit-at-a-time: Optimize Options. (line 1524) 50176* funroll-all-loops: Optimize Options. (line 1275) 50177* funroll-loops: Optimize Options. (line 1269) 50178* funsafe-loop-optimizations: Optimize Options. (line 518) 50179* funsafe-math-optimizations: Optimize Options. (line 1938) 50180* funsigned-bitfields <1>: Non-bugs. (line 57) 50181* funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 50182 (line 17) 50183* funsigned-bitfields: C Dialect Options. (line 353) 50184* funsigned-char <1>: Characters implementation. 50185 (line 31) 50186* funsigned-char: C Dialect Options. (line 325) 50187* funswitch-loops: Optimize Options. (line 2165) 50188* funwind-tables: Code Gen Options. (line 139) 50189* fuse-cxa-atexit: C++ Dialect Options. 50190 (line 272) 50191* fvar-tracking: Debugging Options. (line 1290) 50192* fvar-tracking-assignments: Debugging Options. (line 1300) 50193* fvar-tracking-assignments-toggle: Debugging Options. (line 1309) 50194* fvariable-expansion-in-unroller: Optimize Options. (line 1295) 50195* fvect-cost-model: Optimize Options. (line 1251) 50196* fverbose-asm: Code Gen Options. (line 259) 50197* fvisibility: Code Gen Options. (line 546) 50198* fvisibility-inlines-hidden: C++ Dialect Options. 50199 (line 284) 50200* fvisibility-ms-compat: C++ Dialect Options. 50201 (line 312) 50202* fvpt: Optimize Options. (line 2110) 50203* fweb: Optimize Options. (line 1543) 50204* fwhole-program: Optimize Options. (line 1554) 50205* fwide-exec-charset: Preprocessor Options. 50206 (line 559) 50207* fworking-directory: Preprocessor Options. 50208 (line 577) 50209* fwrapv: Code Gen Options. (line 100) 50210* fzero-link: Objective-C and Objective-C++ Dialect Options. 50211 (line 141) 50212* G <1>: System V Options. (line 10) 50213* G <2>: RS/6000 and PowerPC Options. 50214 (line 745) 50215* G <3>: MIPS Options. (line 330) 50216* G: M32R/D Options. (line 57) 50217* g: Debugging Options. (line 10) 50218* gcoff: Debugging Options. (line 89) 50219* gdwarf-VERSION: Debugging Options. (line 107) 50220* gen-decls: Objective-C and Objective-C++ Dialect Options. 50221 (line 153) 50222* gfull: Darwin Options. (line 69) 50223* ggdb: Debugging Options. (line 45) 50224* gno-record-gcc-switches: Debugging Options. (line 127) 50225* gno-strict-dwarf: Debugging Options. (line 137) 50226* gpubnames: Debugging Options. (line 51) 50227* grecord-gcc-switches: Debugging Options. (line 118) 50228* gsplit-dwarf: Debugging Options. (line 38) 50229* gstabs: Debugging Options. (line 54) 50230* gstabs+: Debugging Options. (line 83) 50231* gstrict-dwarf: Debugging Options. (line 131) 50232* gtoggle: Debugging Options. (line 174) 50233* gused: Darwin Options. (line 64) 50234* gvms: Debugging Options. (line 141) 50235* gxcoff: Debugging Options. (line 94) 50236* gxcoff+: Debugging Options. (line 99) 50237* H: Preprocessor Options. 50238 (line 710) 50239* headerpad_max_install_names: Darwin Options. (line 196) 50240* help <1>: Preprocessor Options. 50241 (line 702) 50242* help: Overall Options. (line 221) 50243* hoist-adjacent-loads: Optimize Options. (line 880) 50244* I <1>: Directory Options. (line 10) 50245* I: Preprocessor Options. 50246 (line 77) 50247* I- <1>: Directory Options. (line 119) 50248* I-: Preprocessor Options. 50249 (line 387) 50250* idirafter: Preprocessor Options. 50251 (line 429) 50252* iframework: Darwin Options. (line 57) 50253* imacros: Preprocessor Options. 50254 (line 420) 50255* image_base: Darwin Options. (line 196) 50256* imultilib: Preprocessor Options. 50257 (line 454) 50258* include: Preprocessor Options. 50259 (line 409) 50260* init: Darwin Options. (line 196) 50261* install_name: Darwin Options. (line 196) 50262* iprefix: Preprocessor Options. 50263 (line 436) 50264* iquote <1>: Directory Options. (line 36) 50265* iquote: Preprocessor Options. 50266 (line 466) 50267* isysroot: Preprocessor Options. 50268 (line 448) 50269* isystem: Preprocessor Options. 50270 (line 458) 50271* iwithprefix: Preprocessor Options. 50272 (line 442) 50273* iwithprefixbefore: Preprocessor Options. 50274 (line 442) 50275* keep_private_externs: Darwin Options. (line 196) 50276* L: Directory Options. (line 42) 50277* l: Link Options. (line 26) 50278* lobjc: Link Options. (line 53) 50279* m: RS/6000 and PowerPC Options. 50280 (line 586) 50281* M: Preprocessor Options. 50282 (line 185) 50283* m1: SH Options. (line 9) 50284* m10: PDP-11 Options. (line 29) 50285* m128bit-long-double: i386 and x86-64 Options. 50286 (line 342) 50287* m16-bit: CRIS Options. (line 64) 50288* m1reg-: Adapteva Epiphany Options. 50289 (line 132) 50290* m2: SH Options. (line 12) 50291* m210: MCore Options. (line 43) 50292* m2a: SH Options. (line 30) 50293* m2a-nofpu: SH Options. (line 18) 50294* m2a-single: SH Options. (line 26) 50295* m2a-single-only: SH Options. (line 22) 50296* m3: SH Options. (line 34) 50297* m31: S/390 and zSeries Options. 50298 (line 87) 50299* m32 <1>: TILEPro Options. (line 13) 50300* m32 <2>: TILE-Gx Options. (line 23) 50301* m32 <3>: SPARC Options. (line 257) 50302* m32 <4>: RS/6000 and PowerPC Options. 50303 (line 278) 50304* m32: i386 and x86-64 Options. 50305 (line 841) 50306* m32-bit: CRIS Options. (line 64) 50307* m32bit-doubles: RX Options. (line 10) 50308* m32r: M32R/D Options. (line 15) 50309* m32r2: M32R/D Options. (line 9) 50310* m32rx: M32R/D Options. (line 12) 50311* m340: MCore Options. (line 43) 50312* m3dnow: i386 and x86-64 Options. 50313 (line 571) 50314* m3e: SH Options. (line 37) 50315* m4: SH Options. (line 51) 50316* m4-100: SH Options. (line 54) 50317* m4-100-nofpu: SH Options. (line 57) 50318* m4-100-single: SH Options. (line 61) 50319* m4-100-single-only: SH Options. (line 65) 50320* m4-200: SH Options. (line 69) 50321* m4-200-nofpu: SH Options. (line 72) 50322* m4-200-single: SH Options. (line 76) 50323* m4-200-single-only: SH Options. (line 80) 50324* m4-300: SH Options. (line 84) 50325* m4-300-nofpu: SH Options. (line 87) 50326* m4-300-single: SH Options. (line 91) 50327* m4-300-single-only: SH Options. (line 95) 50328* m4-340: SH Options. (line 99) 50329* m4-500: SH Options. (line 102) 50330* m4-nofpu: SH Options. (line 40) 50331* m4-single: SH Options. (line 47) 50332* m4-single-only: SH Options. (line 43) 50333* m40: PDP-11 Options. (line 23) 50334* m45: PDP-11 Options. (line 26) 50335* m4a: SH Options. (line 118) 50336* m4a-nofpu: SH Options. (line 106) 50337* m4a-single: SH Options. (line 114) 50338* m4a-single-only: SH Options. (line 110) 50339* m4al: SH Options. (line 121) 50340* m4byte-functions: MCore Options. (line 27) 50341* m5-32media: SH Options. (line 126) 50342* m5-32media-nofpu: SH Options. (line 129) 50343* m5-64media: SH Options. (line 133) 50344* m5-64media-nofpu: SH Options. (line 136) 50345* m5-compact: SH Options. (line 140) 50346* m5-compact-nofpu: SH Options. (line 143) 50347* m5200: M680x0 Options. (line 147) 50348* m5206e: M680x0 Options. (line 156) 50349* m528x: M680x0 Options. (line 160) 50350* m5307: M680x0 Options. (line 164) 50351* m5407: M680x0 Options. (line 168) 50352* m64 <1>: TILE-Gx Options. (line 23) 50353* m64 <2>: SPARC Options. (line 257) 50354* m64 <3>: S/390 and zSeries Options. 50355 (line 87) 50356* m64 <4>: RS/6000 and PowerPC Options. 50357 (line 278) 50358* m64: i386 and x86-64 Options. 50359 (line 841) 50360* m64bit-doubles: RX Options. (line 10) 50361* m68000: M680x0 Options. (line 95) 50362* m68010: M680x0 Options. (line 103) 50363* m68020: M680x0 Options. (line 109) 50364* m68020-40: M680x0 Options. (line 178) 50365* m68020-60: M680x0 Options. (line 187) 50366* m68030: M680x0 Options. (line 114) 50367* m68040: M680x0 Options. (line 119) 50368* m68060: M680x0 Options. (line 128) 50369* m68881: M680x0 Options. (line 197) 50370* m8-bit: CRIS Options. (line 64) 50371* m8byte-align: V850 Options. (line 170) 50372* m96bit-long-double: i386 and x86-64 Options. 50373 (line 342) 50374* mabi <1>: RS/6000 and PowerPC Options. 50375 (line 613) 50376* mabi <2>: i386 and x86-64 Options. 50377 (line 721) 50378* mabi: ARM Options. (line 10) 50379* mabi=32: MIPS Options. (line 131) 50380* mabi=64: MIPS Options. (line 131) 50381* mabi=eabi: MIPS Options. (line 131) 50382* mabi=elfv1: RS/6000 and PowerPC Options. 50383 (line 634) 50384* mabi=elfv2: RS/6000 and PowerPC Options. 50385 (line 640) 50386* mabi=gnu: MMIX Options. (line 20) 50387* mabi=ibmlongdouble: RS/6000 and PowerPC Options. 50388 (line 626) 50389* mabi=ieeelongdouble: RS/6000 and PowerPC Options. 50390 (line 630) 50391* mabi=mmixware: MMIX Options. (line 20) 50392* mabi=n32: MIPS Options. (line 131) 50393* mabi=no-spe: RS/6000 and PowerPC Options. 50394 (line 623) 50395* mabi=o64: MIPS Options. (line 131) 50396* mabi=spe: RS/6000 and PowerPC Options. 50397 (line 618) 50398* mabicalls: MIPS Options. (line 155) 50399* mabort-on-noreturn: ARM Options. (line 184) 50400* mabsdiff: MeP Options. (line 7) 50401* mabshi: PDP-11 Options. (line 55) 50402* mac0: PDP-11 Options. (line 16) 50403* macc-4: FRV Options. (line 113) 50404* macc-8: FRV Options. (line 116) 50405* maccumulate-args: AVR Options. (line 135) 50406* maccumulate-outgoing-args <1>: SH Options. (line 401) 50407* maccumulate-outgoing-args: i386 and x86-64 Options. 50408 (line 744) 50409* maddress-mode=long: i386 and x86-64 Options. 50410 (line 884) 50411* maddress-mode=short: i386 and x86-64 Options. 50412 (line 889) 50413* maddress-space-conversion: SPU Options. (line 63) 50414* mads: RS/6000 and PowerPC Options. 50415 (line 668) 50416* maix-struct-return: RS/6000 and PowerPC Options. 50417 (line 606) 50418* maix32: RS/6000 and PowerPC Options. 50419 (line 316) 50420* maix64: RS/6000 and PowerPC Options. 50421 (line 316) 50422* malign-300: H8/300 Options. (line 41) 50423* malign-double: i386 and x86-64 Options. 50424 (line 326) 50425* malign-int: M680x0 Options. (line 267) 50426* malign-labels: FRV Options. (line 104) 50427* malign-loops: M32R/D Options. (line 73) 50428* malign-natural: RS/6000 and PowerPC Options. 50429 (line 355) 50430* malign-power: RS/6000 and PowerPC Options. 50431 (line 355) 50432* mall-opts: MeP Options. (line 11) 50433* malloc-cc: FRV Options. (line 25) 50434* maltivec: RS/6000 and PowerPC Options. 50435 (line 136) 50436* maltivec=be: RS/6000 and PowerPC Options. 50437 (line 152) 50438* maltivec=le: RS/6000 and PowerPC Options. 50439 (line 162) 50440* mam33: MN10300 Options. (line 17) 50441* mam33-2: MN10300 Options. (line 24) 50442* mam34: MN10300 Options. (line 27) 50443* mandroid: GNU/Linux Options. (line 21) 50444* mapcs: ARM Options. (line 22) 50445* mapcs-frame: ARM Options. (line 14) 50446* mapp-regs <1>: V850 Options. (line 181) 50447* mapp-regs: SPARC Options. (line 10) 50448* march <1>: S/390 and zSeries Options. 50449 (line 116) 50450* march <2>: MIPS Options. (line 14) 50451* march <3>: M680x0 Options. (line 12) 50452* march <4>: i386 and x86-64 Options. 50453 (line 10) 50454* march <5>: HPPA Options. (line 9) 50455* march <6>: CRIS Options. (line 10) 50456* march <7>: C6X Options. (line 7) 50457* march <8>: ARM Options. (line 75) 50458* march: AArch64 Options. (line 62) 50459* marm: ARM Options. (line 248) 50460* mas100-syntax: RX Options. (line 76) 50461* masm=DIALECT: i386 and x86-64 Options. 50462 (line 281) 50463* matomic-model=MODEL: SH Options. (line 214) 50464* matomic-updates: SPU Options. (line 78) 50465* mauto-pic: IA-64 Options. (line 50) 50466* maverage: MeP Options. (line 16) 50467* mavoid-indexed-addresses: RS/6000 and PowerPC Options. 50468 (line 425) 50469* max-vect-align: Adapteva Epiphany Options. 50470 (line 120) 50471* mb: SH Options. (line 147) 50472* mbackchain: S/390 and zSeries Options. 50473 (line 35) 50474* mbarrel-shift-enabled: LM32 Options. (line 9) 50475* mbase-addresses: MMIX Options. (line 54) 50476* mbased=: MeP Options. (line 20) 50477* mbcopy: PDP-11 Options. (line 36) 50478* mbcopy-builtin: PDP-11 Options. (line 32) 50479* mbig: RS/6000 and PowerPC Options. 50480 (line 505) 50481* mbig-endian <1>: RS/6000 and PowerPC Options. 50482 (line 505) 50483* mbig-endian <2>: MicroBlaze Options. (line 57) 50484* mbig-endian <3>: MCore Options. (line 39) 50485* mbig-endian <4>: IA-64 Options. (line 9) 50486* mbig-endian <5>: C6X Options. (line 13) 50487* mbig-endian <6>: ARM Options. (line 62) 50488* mbig-endian: AArch64 Options. (line 9) 50489* mbig-endian-data: RX Options. (line 42) 50490* mbig-switch <1>: V850 Options. (line 176) 50491* mbig-switch: HPPA Options. (line 23) 50492* mbigtable: SH Options. (line 162) 50493* mbionic: GNU/Linux Options. (line 17) 50494* mbit-align: RS/6000 and PowerPC Options. 50495 (line 457) 50496* mbit-ops: CR16 Options. (line 25) 50497* mbitfield: M680x0 Options. (line 235) 50498* mbitops <1>: SH Options. (line 166) 50499* mbitops: MeP Options. (line 26) 50500* mblock-move-inline-limit: RS/6000 and PowerPC Options. 50501 (line 739) 50502* mbranch-cheap: PDP-11 Options. (line 65) 50503* mbranch-cost <1>: MIPS Options. (line 635) 50504* mbranch-cost <2>: AVR Options. (line 150) 50505* mbranch-cost: Adapteva Epiphany Options. 50506 (line 18) 50507* mbranch-cost=NUM: SH Options. (line 467) 50508* mbranch-cost=NUMBER: M32R/D Options. (line 82) 50509* mbranch-expensive: PDP-11 Options. (line 61) 50510* mbranch-hints: SPU Options. (line 27) 50511* mbranch-likely: MIPS Options. (line 642) 50512* mbranch-predict: MMIX Options. (line 49) 50513* mbss-plt: RS/6000 and PowerPC Options. 50514 (line 189) 50515* mbuild-constants: DEC Alpha Options. (line 141) 50516* mbwx: DEC Alpha Options. (line 163) 50517* mc68000: M680x0 Options. (line 95) 50518* mc68020: M680x0 Options. (line 109) 50519* mc=: MeP Options. (line 31) 50520* mcache-size: SPU Options. (line 70) 50521* mcall-eabi: RS/6000 and PowerPC Options. 50522 (line 580) 50523* mcall-freebsd: RS/6000 and PowerPC Options. 50524 (line 594) 50525* mcall-linux: RS/6000 and PowerPC Options. 50526 (line 590) 50527* mcall-netbsd: RS/6000 and PowerPC Options. 50528 (line 598) 50529* mcall-prologues: AVR Options. (line 155) 50530* mcall-sysv: RS/6000 and PowerPC Options. 50531 (line 572) 50532* mcall-sysv-eabi: RS/6000 and PowerPC Options. 50533 (line 580) 50534* mcall-sysv-noeabi: RS/6000 and PowerPC Options. 50535 (line 583) 50536* mcallee-super-interworking: ARM Options. (line 266) 50537* mcaller-super-interworking: ARM Options. (line 273) 50538* mcallgraph-data: MCore Options. (line 31) 50539* mcbcond: SPARC Options. (line 224) 50540* mcbranchdi: SH Options. (line 482) 50541* mcc-init: CRIS Options. (line 41) 50542* mcfv4e: M680x0 Options. (line 172) 50543* mcheck-zero-division: MIPS Options. (line 441) 50544* mcix: DEC Alpha Options. (line 163) 50545* mcld: i386 and x86-64 Options. 50546 (line 594) 50547* mclip: MeP Options. (line 35) 50548* mcmodel: SPARC Options. (line 262) 50549* mcmodel=kernel: i386 and x86-64 Options. 50550 (line 868) 50551* mcmodel=large <1>: TILE-Gx Options. (line 14) 50552* mcmodel=large <2>: RS/6000 and PowerPC Options. 50553 (line 130) 50554* mcmodel=large <3>: i386 and x86-64 Options. 50555 (line 880) 50556* mcmodel=large: AArch64 Options. (line 33) 50557* mcmodel=medium <1>: RS/6000 and PowerPC Options. 50558 (line 126) 50559* mcmodel=medium: i386 and x86-64 Options. 50560 (line 873) 50561* mcmodel=small <1>: TILE-Gx Options. (line 9) 50562* mcmodel=small <2>: RS/6000 and PowerPC Options. 50563 (line 122) 50564* mcmodel=small <3>: i386 and x86-64 Options. 50565 (line 862) 50566* mcmodel=small: AArch64 Options. (line 27) 50567* mcmodel=tiny: AArch64 Options. (line 20) 50568* mcmove: Adapteva Epiphany Options. 50569 (line 23) 50570* mcmpb: RS/6000 and PowerPC Options. 50571 (line 27) 50572* mcmpeqdi: SH Options. (line 485) 50573* mcode-readable: MIPS Options. (line 401) 50574* mcompat-align-parm: RS/6000 and PowerPC Options. 50575 (line 897) 50576* mcond-exec: FRV Options. (line 152) 50577* mcond-move: FRV Options. (line 128) 50578* mconfig=: MeP Options. (line 39) 50579* mconsole: i386 and x86-64 Windows Options. 50580 (line 9) 50581* mconst-align: CRIS Options. (line 55) 50582* mconst16: Xtensa Options. (line 10) 50583* mconstant-gp: IA-64 Options. (line 46) 50584* mcop: MeP Options. (line 48) 50585* mcop32: MeP Options. (line 53) 50586* mcop64: MeP Options. (line 56) 50587* mcorea: Blackfin Options. (line 157) 50588* mcoreb: Blackfin Options. (line 164) 50589* mcpu <1>: TILEPro Options. (line 9) 50590* mcpu <2>: TILE-Gx Options. (line 18) 50591* mcpu <3>: SPARC Options. (line 102) 50592* mcpu <4>: RS/6000 and PowerPC Options. 50593 (line 69) 50594* mcpu <5>: picoChip Options. (line 9) 50595* mcpu <6>: M680x0 Options. (line 28) 50596* mcpu <7>: i386 and x86-64 Options. 50597 (line 229) 50598* mcpu <8>: FRV Options. (line 212) 50599* mcpu <9>: DEC Alpha Options. (line 215) 50600* mcpu <10>: CRIS Options. (line 10) 50601* mcpu <11>: ARM Options. (line 124) 50602* mcpu: AArch64 Options. (line 76) 50603* mcpu32: M680x0 Options. (line 138) 50604* mcpu= <1>: MicroBlaze Options. (line 20) 50605* mcpu= <2>: M32C Options. (line 7) 50606* mcpu=: Blackfin Options. (line 7) 50607* mcr16c: CR16 Options. (line 14) 50608* mcr16cplus: CR16 Options. (line 14) 50609* mcrc32: i386 and x86-64 Options. 50610 (line 641) 50611* mcrypto: RS/6000 and PowerPC Options. 50612 (line 224) 50613* mcsync-anomaly: Blackfin Options. (line 60) 50614* mcx16: i386 and x86-64 Options. 50615 (line 618) 50616* MD: Preprocessor Options. 50617 (line 274) 50618* mdalign: SH Options. (line 153) 50619* mdata-align: CRIS Options. (line 55) 50620* mdata-model: CR16 Options. (line 28) 50621* mdc: MeP Options. (line 62) 50622* mdebug <1>: S/390 and zSeries Options. 50623 (line 112) 50624* mdebug: M32R/D Options. (line 69) 50625* mdebug-main=PREFIX: VMS Options. (line 13) 50626* mdec-asm: PDP-11 Options. (line 72) 50627* mdirect-move: RS/6000 and PowerPC Options. 50628 (line 230) 50629* mdisable-callt: V850 Options. (line 92) 50630* mdisable-fpregs: HPPA Options. (line 33) 50631* mdisable-indexing: HPPA Options. (line 39) 50632* mdiv <1>: MeP Options. (line 65) 50633* mdiv <2>: MCore Options. (line 15) 50634* mdiv: M680x0 Options. (line 209) 50635* mdiv=STRATEGY: SH Options. (line 309) 50636* mdivide-breaks: MIPS Options. (line 447) 50637* mdivide-enabled: LM32 Options. (line 12) 50638* mdivide-traps: MIPS Options. (line 447) 50639* mdivsi3_libfunc=NAME: SH Options. (line 407) 50640* mdll: i386 and x86-64 Windows Options. 50641 (line 16) 50642* mdlmzb: RS/6000 and PowerPC Options. 50643 (line 450) 50644* mdmx: MIPS Options. (line 290) 50645* mdouble: FRV Options. (line 38) 50646* mdouble-float <1>: RS/6000 and PowerPC Options. 50647 (line 373) 50648* mdouble-float: MIPS Options. (line 248) 50649* mdsp: MIPS Options. (line 267) 50650* mdspr2: MIPS Options. (line 273) 50651* mdual-nops: SPU Options. (line 90) 50652* mdwarf2-asm: IA-64 Options. (line 94) 50653* mdword: FRV Options. (line 32) 50654* mdynamic-no-pic: RS/6000 and PowerPC Options. 50655 (line 510) 50656* mea32: SPU Options. (line 55) 50657* mea64: SPU Options. (line 55) 50658* meabi: RS/6000 and PowerPC Options. 50659 (line 687) 50660* mearly-stop-bits: IA-64 Options. (line 100) 50661* meb <1>: Score Options. (line 9) 50662* meb <2>: Moxie Options. (line 7) 50663* meb: MeP Options. (line 68) 50664* mel <1>: Score Options. (line 12) 50665* mel <2>: Moxie Options. (line 11) 50666* mel: MeP Options. (line 71) 50667* melf <1>: MMIX Options. (line 44) 50668* melf: CRIS Options. (line 87) 50669* memb: RS/6000 and PowerPC Options. 50670 (line 682) 50671* membedded-data: MIPS Options. (line 388) 50672* memregs=: M32C Options. (line 21) 50673* mep: V850 Options. (line 16) 50674* mepsilon: MMIX Options. (line 15) 50675* merror-reloc: SPU Options. (line 10) 50676* mesa: S/390 and zSeries Options. 50677 (line 95) 50678* metrax100: CRIS Options. (line 26) 50679* metrax4: CRIS Options. (line 26) 50680* mexplicit-relocs <1>: MIPS Options. (line 432) 50681* mexplicit-relocs: DEC Alpha Options. (line 176) 50682* mexr: H8/300 Options. (line 28) 50683* mextern-sdata: MIPS Options. (line 350) 50684* MF: Preprocessor Options. 50685 (line 220) 50686* mfast-fp: Blackfin Options. (line 133) 50687* mfast-indirect-calls: HPPA Options. (line 51) 50688* mfaster-structs: SPARC Options. (line 92) 50689* mfdpic: FRV Options. (line 56) 50690* mfentry: i386 and x86-64 Options. 50691 (line 817) 50692* mfix: DEC Alpha Options. (line 163) 50693* mfix-24k: MIPS Options. (line 500) 50694* mfix-and-continue: Darwin Options. (line 104) 50695* mfix-at697f: SPARC Options. (line 244) 50696* mfix-cortex-m3-ldrd: ARM Options. (line 306) 50697* mfix-r10000: MIPS Options. (line 527) 50698* mfix-r4000: MIPS Options. (line 506) 50699* mfix-r4400: MIPS Options. (line 520) 50700* mfix-sb1: MIPS Options. (line 559) 50701* mfix-ut699: SPARC Options. (line 249) 50702* mfix-vr4120: MIPS Options. (line 538) 50703* mfix-vr4130: MIPS Options. (line 552) 50704* mfixed-cc: FRV Options. (line 28) 50705* mfixed-range <1>: SPU Options. (line 47) 50706* mfixed-range <2>: SH Options. (line 414) 50707* mfixed-range <3>: IA-64 Options. (line 105) 50708* mfixed-range: HPPA Options. (line 58) 50709* mflat: SPARC Options. (line 22) 50710* mflip-mips16: MIPS Options. (line 111) 50711* mfloat-abi: ARM Options. (line 42) 50712* mfloat-gprs: RS/6000 and PowerPC Options. 50713 (line 261) 50714* mfloat-ieee: DEC Alpha Options. (line 171) 50715* mfloat-vax: DEC Alpha Options. (line 171) 50716* mfloat32: PDP-11 Options. (line 52) 50717* mfloat64: PDP-11 Options. (line 48) 50718* mflush-func: MIPS Options. (line 626) 50719* mflush-func=NAME: M32R/D Options. (line 93) 50720* mflush-trap=NUMBER: M32R/D Options. (line 86) 50721* mfmaf: SPARC Options. (line 238) 50722* mfmovd: SH Options. (line 169) 50723* mforce-no-pic: Xtensa Options. (line 41) 50724* mfp-exceptions: MIPS Options. (line 653) 50725* mfp-mode: Adapteva Epiphany Options. 50726 (line 72) 50727* mfp-reg: DEC Alpha Options. (line 25) 50728* mfp-rounding-mode: DEC Alpha Options. (line 85) 50729* mfp-trap-mode: DEC Alpha Options. (line 63) 50730* mfp16-format: ARM Options. (line 164) 50731* mfp32: MIPS Options. (line 221) 50732* mfp64: MIPS Options. (line 224) 50733* mfpmath <1>: i386 and x86-64 Options. 50734 (line 232) 50735* mfpmath: Optimize Options. (line 1898) 50736* mfpr-32: FRV Options. (line 13) 50737* mfpr-64: FRV Options. (line 16) 50738* mfprnd: RS/6000 and PowerPC Options. 50739 (line 27) 50740* mfpu <1>: SPARC Options. (line 35) 50741* mfpu <2>: RS/6000 and PowerPC Options. 50742 (line 381) 50743* mfpu <3>: PDP-11 Options. (line 9) 50744* mfpu: ARM Options. (line 144) 50745* mfriz: RS/6000 and PowerPC Options. 50746 (line 868) 50747* mfsca: SH Options. (line 499) 50748* mfsrra: SH Options. (line 508) 50749* mfull-toc: RS/6000 and PowerPC Options. 50750 (line 289) 50751* mfused-madd <1>: Xtensa Options. (line 19) 50752* mfused-madd <2>: SH Options. (line 490) 50753* mfused-madd <3>: S/390 and zSeries Options. 50754 (line 137) 50755* mfused-madd <4>: RS/6000 and PowerPC Options. 50756 (line 434) 50757* mfused-madd <5>: MIPS Options. (line 482) 50758* mfused-madd: IA-64 Options. (line 88) 50759* mg: VAX Options. (line 17) 50760* MG: Preprocessor Options. 50761 (line 229) 50762* mgas: HPPA Options. (line 74) 50763* mgcc-abi: V850 Options. (line 148) 50764* mgen-cell-microcode: RS/6000 and PowerPC Options. 50765 (line 177) 50766* mgeneral-regs-only: AArch64 Options. (line 13) 50767* mgettrcost=NUMBER: SH Options. (line 431) 50768* mghs: V850 Options. (line 127) 50769* mglibc: GNU/Linux Options. (line 9) 50770* mgnu: VAX Options. (line 13) 50771* mgnu-as: IA-64 Options. (line 18) 50772* mgnu-ld <1>: IA-64 Options. (line 23) 50773* mgnu-ld: HPPA Options. (line 110) 50774* mgotplt: CRIS Options. (line 81) 50775* mgp32: MIPS Options. (line 215) 50776* mgp64: MIPS Options. (line 218) 50777* mgpopt: MIPS Options. (line 373) 50778* mgpr-32: FRV Options. (line 7) 50779* mgpr-64: FRV Options. (line 10) 50780* mgprel-ro: FRV Options. (line 79) 50781* mh: H8/300 Options. (line 14) 50782* mhalf-reg-file: Adapteva Epiphany Options. 50783 (line 9) 50784* mhard-dfp <1>: S/390 and zSeries Options. 50785 (line 20) 50786* mhard-dfp: RS/6000 and PowerPC Options. 50787 (line 27) 50788* mhard-float <1>: V850 Options. (line 113) 50789* mhard-float <2>: SPARC Options. (line 35) 50790* mhard-float <3>: S/390 and zSeries Options. 50791 (line 11) 50792* mhard-float <4>: RS/6000 and PowerPC Options. 50793 (line 367) 50794* mhard-float <5>: MIPS Options. (line 227) 50795* mhard-float <6>: MicroBlaze Options. (line 10) 50796* mhard-float <7>: M680x0 Options. (line 197) 50797* mhard-float: FRV Options. (line 19) 50798* mhard-quad-float: SPARC Options. (line 56) 50799* mhardlit: MCore Options. (line 10) 50800* mhint-max-distance: SPU Options. (line 102) 50801* mhint-max-nops: SPU Options. (line 96) 50802* mhotpatch: S/390 and zSeries Options. 50803 (line 173) 50804* mhp-ld: HPPA Options. (line 122) 50805* micplb: Blackfin Options. (line 178) 50806* mid-shared-library: Blackfin Options. (line 81) 50807* mieee <1>: SH Options. (line 186) 50808* mieee: DEC Alpha Options. (line 39) 50809* mieee-conformant: DEC Alpha Options. (line 134) 50810* mieee-fp: i386 and x86-64 Options. 50811 (line 287) 50812* mieee-with-inexact: DEC Alpha Options. (line 52) 50813* milp32: IA-64 Options. (line 121) 50814* mimpure-text: Solaris 2 Options. (line 9) 50815* mincoming-stack-boundary: i386 and x86-64 Options. 50816 (line 492) 50817* mindexed-addressing: SH Options. (line 421) 50818* minline-all-stringops: i386 and x86-64 Options. 50819 (line 765) 50820* minline-float-divide-max-throughput: IA-64 Options. (line 58) 50821* minline-float-divide-min-latency: IA-64 Options. (line 54) 50822* minline-ic_invalidate: SH Options. (line 195) 50823* minline-int-divide-max-throughput: IA-64 Options. (line 69) 50824* minline-int-divide-min-latency: IA-64 Options. (line 65) 50825* minline-plt <1>: FRV Options. (line 64) 50826* minline-plt: Blackfin Options. (line 138) 50827* minline-sqrt-max-throughput: IA-64 Options. (line 80) 50828* minline-sqrt-min-latency: IA-64 Options. (line 76) 50829* minline-stringops-dynamically: i386 and x86-64 Options. 50830 (line 772) 50831* minsert-sched-nops: RS/6000 and PowerPC Options. 50832 (line 550) 50833* mint-register: RX Options. (line 100) 50834* mint16: PDP-11 Options. (line 40) 50835* mint32 <1>: PDP-11 Options. (line 44) 50836* mint32 <2>: H8/300 Options. (line 38) 50837* mint32: CR16 Options. (line 22) 50838* mint8: AVR Options. (line 159) 50839* minterlink-mips16: MIPS Options. (line 118) 50840* minvalid-symbols: SH Options. (line 457) 50841* mio-volatile: MeP Options. (line 74) 50842* mips1: MIPS Options. (line 78) 50843* mips16: MIPS Options. (line 103) 50844* mips2: MIPS Options. (line 81) 50845* mips3: MIPS Options. (line 84) 50846* mips32: MIPS Options. (line 90) 50847* mips32r2: MIPS Options. (line 93) 50848* mips3d: MIPS Options. (line 296) 50849* mips4: MIPS Options. (line 87) 50850* mips64: MIPS Options. (line 96) 50851* mips64r2: MIPS Options. (line 99) 50852* misel: RS/6000 and PowerPC Options. 50853 (line 195) 50854* misize: SH Options. (line 207) 50855* missue-rate=NUMBER: M32R/D Options. (line 79) 50856* mivc2: MeP Options. (line 59) 50857* mjump-in-delay: HPPA Options. (line 28) 50858* mkernel: Darwin Options. (line 82) 50859* mknuthdiv: MMIX Options. (line 33) 50860* ml <1>: SH Options. (line 150) 50861* ml: MeP Options. (line 78) 50862* mlarge-data: DEC Alpha Options. (line 187) 50863* mlarge-data-threshold: i386 and x86-64 Options. 50864 (line 378) 50865* mlarge-mem: SPU Options. (line 35) 50866* mlarge-text: DEC Alpha Options. (line 205) 50867* mleadz: MeP Options. (line 81) 50868* mleaf-id-shared-library: Blackfin Options. (line 92) 50869* mlibfuncs: MMIX Options. (line 10) 50870* mlibrary-pic: FRV Options. (line 110) 50871* mlinked-fp: FRV Options. (line 94) 50872* mlinker-opt: HPPA Options. (line 84) 50873* mlinux: CRIS Options. (line 91) 50874* mlittle: RS/6000 and PowerPC Options. 50875 (line 499) 50876* mlittle-endian <1>: RS/6000 and PowerPC Options. 50877 (line 499) 50878* mlittle-endian <2>: MicroBlaze Options. (line 60) 50879* mlittle-endian <3>: MCore Options. (line 39) 50880* mlittle-endian <4>: IA-64 Options. (line 13) 50881* mlittle-endian <5>: C6X Options. (line 16) 50882* mlittle-endian <6>: ARM Options. (line 58) 50883* mlittle-endian: AArch64 Options. (line 16) 50884* mlittle-endian-data: RX Options. (line 42) 50885* mliw: MN10300 Options. (line 54) 50886* mllsc: MIPS Options. (line 253) 50887* mlocal-sdata: MIPS Options. (line 338) 50888* mlong-calls <1>: V850 Options. (line 10) 50889* mlong-calls <2>: MIPS Options. (line 468) 50890* mlong-calls <3>: FRV Options. (line 99) 50891* mlong-calls <4>: Blackfin Options. (line 121) 50892* mlong-calls <5>: ARM Options. (line 189) 50893* mlong-calls: Adapteva Epiphany Options. 50894 (line 55) 50895* mlong-double-128: S/390 and zSeries Options. 50896 (line 29) 50897* mlong-double-64 <1>: S/390 and zSeries Options. 50898 (line 29) 50899* mlong-double-64: i386 and x86-64 Options. 50900 (line 367) 50901* mlong-double-80: i386 and x86-64 Options. 50902 (line 367) 50903* mlong-jumps: V850 Options. (line 108) 50904* mlong-load-store: HPPA Options. (line 65) 50905* mlong32: MIPS Options. (line 313) 50906* mlong64: MIPS Options. (line 308) 50907* mlongcall: RS/6000 and PowerPC Options. 50908 (line 759) 50909* mlongcalls: Xtensa Options. (line 72) 50910* mloop: V850 Options. (line 121) 50911* mlow-64k: Blackfin Options. (line 70) 50912* mlp64: IA-64 Options. (line 121) 50913* mm: MeP Options. (line 84) 50914* MM: Preprocessor Options. 50915 (line 210) 50916* mmac <1>: Score Options. (line 21) 50917* mmac: CR16 Options. (line 9) 50918* mmad: MIPS Options. (line 477) 50919* mmalloc64: VMS Options. (line 17) 50920* mmax: DEC Alpha Options. (line 163) 50921* mmax-constant-size: RX Options. (line 82) 50922* mmax-stack-frame: CRIS Options. (line 22) 50923* mmcount-ra-address: MIPS Options. (line 702) 50924* mmcu <1>: MIPS Options. (line 305) 50925* mmcu: AVR Options. (line 9) 50926* MMD: Preprocessor Options. 50927 (line 290) 50928* mmedia: FRV Options. (line 44) 50929* mmemcpy <1>: MIPS Options. (line 462) 50930* mmemcpy: MicroBlaze Options. (line 13) 50931* mmemory-latency: DEC Alpha Options. (line 268) 50932* mmemory-model: SPARC Options. (line 290) 50933* mmfcrf: RS/6000 and PowerPC Options. 50934 (line 27) 50935* mmfpgpr: RS/6000 and PowerPC Options. 50936 (line 27) 50937* mminimal-toc: RS/6000 and PowerPC Options. 50938 (line 289) 50939* mminmax: MeP Options. (line 87) 50940* mmmx: i386 and x86-64 Options. 50941 (line 571) 50942* mmodel=large: M32R/D Options. (line 33) 50943* mmodel=medium: M32R/D Options. (line 27) 50944* mmodel=small: M32R/D Options. (line 18) 50945* mmovbe: i386 and x86-64 Options. 50946 (line 637) 50947* mmt: MIPS Options. (line 301) 50948* mmul: RL78 Options. (line 13) 50949* mmul-bug-workaround: CRIS Options. (line 31) 50950* mmuladd: FRV Options. (line 50) 50951* mmulhw: RS/6000 and PowerPC Options. 50952 (line 443) 50953* mmult: MeP Options. (line 90) 50954* mmult-bug: MN10300 Options. (line 9) 50955* mmulti-cond-exec: FRV Options. (line 176) 50956* mmulticore: Blackfin Options. (line 142) 50957* mmultiple: RS/6000 and PowerPC Options. 50958 (line 393) 50959* mmvcle: S/390 and zSeries Options. 50960 (line 105) 50961* mmvme: RS/6000 and PowerPC Options. 50962 (line 663) 50963* mn: H8/300 Options. (line 20) 50964* mnested-cond-exec: FRV Options. (line 189) 50965* mnhwloop: Score Options. (line 15) 50966* mno-3dnow: i386 and x86-64 Options. 50967 (line 571) 50968* mno-4byte-functions: MCore Options. (line 27) 50969* mno-8byte-align: V850 Options. (line 170) 50970* mno-abicalls: MIPS Options. (line 155) 50971* mno-abshi: PDP-11 Options. (line 58) 50972* mno-ac0: PDP-11 Options. (line 20) 50973* mno-address-space-conversion: SPU Options. (line 63) 50974* mno-align-double: i386 and x86-64 Options. 50975 (line 326) 50976* mno-align-int: M680x0 Options. (line 267) 50977* mno-align-loops: M32R/D Options. (line 76) 50978* mno-align-stringops: i386 and x86-64 Options. 50979 (line 760) 50980* mno-altivec: RS/6000 and PowerPC Options. 50981 (line 136) 50982* mno-am33: MN10300 Options. (line 20) 50983* mno-app-regs <1>: V850 Options. (line 185) 50984* mno-app-regs: SPARC Options. (line 10) 50985* mno-as100-syntax: RX Options. (line 76) 50986* mno-atomic-updates: SPU Options. (line 78) 50987* mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 50988 (line 425) 50989* mno-backchain: S/390 and zSeries Options. 50990 (line 35) 50991* mno-base-addresses: MMIX Options. (line 54) 50992* mno-bit-align: RS/6000 and PowerPC Options. 50993 (line 457) 50994* mno-bitfield: M680x0 Options. (line 231) 50995* mno-branch-likely: MIPS Options. (line 642) 50996* mno-branch-predict: MMIX Options. (line 49) 50997* mno-bwx: DEC Alpha Options. (line 163) 50998* mno-callgraph-data: MCore Options. (line 31) 50999* mno-cbcond: SPARC Options. (line 224) 51000* mno-check-zero-division: MIPS Options. (line 441) 51001* mno-cix: DEC Alpha Options. (line 163) 51002* mno-clearbss: MicroBlaze Options. (line 16) 51003* mno-cmpb: RS/6000 and PowerPC Options. 51004 (line 27) 51005* mno-cond-exec: FRV Options. (line 158) 51006* mno-cond-move: FRV Options. (line 134) 51007* mno-const-align: CRIS Options. (line 55) 51008* mno-const16: Xtensa Options. (line 10) 51009* mno-crt0 <1>: Moxie Options. (line 14) 51010* mno-crt0: MN10300 Options. (line 43) 51011* mno-crypto: RS/6000 and PowerPC Options. 51012 (line 224) 51013* mno-csync-anomaly: Blackfin Options. (line 66) 51014* mno-data-align: CRIS Options. (line 55) 51015* mno-debug: S/390 and zSeries Options. 51016 (line 112) 51017* mno-direct-move: RS/6000 and PowerPC Options. 51018 (line 230) 51019* mno-disable-callt: V850 Options. (line 92) 51020* mno-div <1>: MCore Options. (line 15) 51021* mno-div: M680x0 Options. (line 209) 51022* mno-dlmzb: RS/6000 and PowerPC Options. 51023 (line 450) 51024* mno-double: FRV Options. (line 41) 51025* mno-dsp: MIPS Options. (line 267) 51026* mno-dspr2: MIPS Options. (line 273) 51027* mno-dwarf2-asm: IA-64 Options. (line 94) 51028* mno-dword: FRV Options. (line 35) 51029* mno-eabi: RS/6000 and PowerPC Options. 51030 (line 687) 51031* mno-early-stop-bits: IA-64 Options. (line 100) 51032* mno-eflags: FRV Options. (line 125) 51033* mno-embedded-data: MIPS Options. (line 388) 51034* mno-ep: V850 Options. (line 16) 51035* mno-epsilon: MMIX Options. (line 15) 51036* mno-explicit-relocs <1>: MIPS Options. (line 432) 51037* mno-explicit-relocs: DEC Alpha Options. (line 176) 51038* mno-exr: H8/300 Options. (line 33) 51039* mno-extern-sdata: MIPS Options. (line 350) 51040* mno-fancy-math-387: i386 and x86-64 Options. 51041 (line 315) 51042* mno-faster-structs: SPARC Options. (line 92) 51043* mno-fix: DEC Alpha Options. (line 163) 51044* mno-fix-24k: MIPS Options. (line 500) 51045* mno-fix-r10000: MIPS Options. (line 527) 51046* mno-fix-r4000: MIPS Options. (line 506) 51047* mno-fix-r4400: MIPS Options. (line 520) 51048* mno-flat: SPARC Options. (line 22) 51049* mno-float: MIPS Options. (line 234) 51050* mno-float32: PDP-11 Options. (line 48) 51051* mno-float64: PDP-11 Options. (line 52) 51052* mno-flush-func: M32R/D Options. (line 98) 51053* mno-flush-trap: M32R/D Options. (line 90) 51054* mno-fmaf: SPARC Options. (line 238) 51055* mno-fp-in-toc: RS/6000 and PowerPC Options. 51056 (line 289) 51057* mno-fp-regs: DEC Alpha Options. (line 25) 51058* mno-fp-ret-in-387: i386 and x86-64 Options. 51059 (line 305) 51060* mno-fprnd: RS/6000 and PowerPC Options. 51061 (line 27) 51062* mno-fpu: SPARC Options. (line 40) 51063* mno-fsca: SH Options. (line 499) 51064* mno-fsrra: SH Options. (line 508) 51065* mno-fused-madd <1>: Xtensa Options. (line 19) 51066* mno-fused-madd <2>: SH Options. (line 490) 51067* mno-fused-madd <3>: S/390 and zSeries Options. 51068 (line 137) 51069* mno-fused-madd <4>: RS/6000 and PowerPC Options. 51070 (line 434) 51071* mno-fused-madd <5>: MIPS Options. (line 482) 51072* mno-fused-madd: IA-64 Options. (line 88) 51073* mno-gnu-as: IA-64 Options. (line 18) 51074* mno-gnu-ld: IA-64 Options. (line 23) 51075* mno-gotplt: CRIS Options. (line 81) 51076* mno-gpopt: MIPS Options. (line 373) 51077* mno-hard-dfp <1>: S/390 and zSeries Options. 51078 (line 20) 51079* mno-hard-dfp: RS/6000 and PowerPC Options. 51080 (line 27) 51081* mno-hardlit: MCore Options. (line 10) 51082* mno-id-shared-library: Blackfin Options. (line 88) 51083* mno-ieee: SH Options. (line 186) 51084* mno-ieee-fp: i386 and x86-64 Options. 51085 (line 287) 51086* mno-inline-float-divide: IA-64 Options. (line 62) 51087* mno-inline-int-divide: IA-64 Options. (line 73) 51088* mno-inline-sqrt: IA-64 Options. (line 84) 51089* mno-int16: PDP-11 Options. (line 44) 51090* mno-int32: PDP-11 Options. (line 40) 51091* mno-interlink-mips16: MIPS Options. (line 118) 51092* mno-interrupts: AVR Options. (line 165) 51093* mno-isel: RS/6000 and PowerPC Options. 51094 (line 195) 51095* mno-knuthdiv: MMIX Options. (line 33) 51096* mno-leaf-id-shared-library: Blackfin Options. (line 98) 51097* mno-libfuncs: MMIX Options. (line 10) 51098* mno-llsc: MIPS Options. (line 253) 51099* mno-local-sdata: MIPS Options. (line 338) 51100* mno-long-calls <1>: V850 Options. (line 10) 51101* mno-long-calls <2>: MIPS Options. (line 468) 51102* mno-long-calls <3>: HPPA Options. (line 135) 51103* mno-long-calls <4>: Blackfin Options. (line 121) 51104* mno-long-calls: ARM Options. (line 189) 51105* mno-long-jumps: V850 Options. (line 108) 51106* mno-longcall: RS/6000 and PowerPC Options. 51107 (line 759) 51108* mno-longcalls: Xtensa Options. (line 72) 51109* mno-low-64k: Blackfin Options. (line 74) 51110* mno-lsim <1>: MCore Options. (line 46) 51111* mno-lsim: FR30 Options. (line 14) 51112* mno-mad: MIPS Options. (line 477) 51113* mno-max: DEC Alpha Options. (line 163) 51114* mno-mcount-ra-address: MIPS Options. (line 702) 51115* mno-mcu: MIPS Options. (line 305) 51116* mno-mdmx: MIPS Options. (line 290) 51117* mno-media: FRV Options. (line 47) 51118* mno-memcpy: MIPS Options. (line 462) 51119* mno-mfcrf: RS/6000 and PowerPC Options. 51120 (line 27) 51121* mno-mfpgpr: RS/6000 and PowerPC Options. 51122 (line 27) 51123* mno-mips16: MIPS Options. (line 103) 51124* mno-mips3d: MIPS Options. (line 296) 51125* mno-mmx: i386 and x86-64 Options. 51126 (line 571) 51127* mno-mt: MIPS Options. (line 301) 51128* mno-mul-bug-workaround: CRIS Options. (line 31) 51129* mno-muladd: FRV Options. (line 53) 51130* mno-mulhw: RS/6000 and PowerPC Options. 51131 (line 443) 51132* mno-mult-bug: MN10300 Options. (line 13) 51133* mno-multi-cond-exec: FRV Options. (line 183) 51134* mno-multiple: RS/6000 and PowerPC Options. 51135 (line 393) 51136* mno-mvcle: S/390 and zSeries Options. 51137 (line 105) 51138* mno-nested-cond-exec: FRV Options. (line 195) 51139* mno-omit-leaf-frame-pointer: AArch64 Options. (line 43) 51140* mno-optimize-membar: FRV Options. (line 205) 51141* mno-opts: MeP Options. (line 93) 51142* mno-pack: FRV Options. (line 122) 51143* mno-packed-stack: S/390 and zSeries Options. 51144 (line 54) 51145* mno-paired: RS/6000 and PowerPC Options. 51146 (line 209) 51147* mno-paired-single: MIPS Options. (line 284) 51148* mno-pic: IA-64 Options. (line 26) 51149* mno-pid: RX Options. (line 117) 51150* mno-plt: MIPS Options. (line 182) 51151* mno-popc: SPARC Options. (line 231) 51152* mno-popcntb: RS/6000 and PowerPC Options. 51153 (line 27) 51154* mno-popcntd: RS/6000 and PowerPC Options. 51155 (line 27) 51156* mno-postinc: Adapteva Epiphany Options. 51157 (line 110) 51158* mno-postmodify: Adapteva Epiphany Options. 51159 (line 110) 51160* mno-power8-fusion: RS/6000 and PowerPC Options. 51161 (line 236) 51162* mno-power8-vector: RS/6000 and PowerPC Options. 51163 (line 242) 51164* mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 51165 (line 27) 51166* mno-powerpc-gpopt: RS/6000 and PowerPC Options. 51167 (line 27) 51168* mno-powerpc64: RS/6000 and PowerPC Options. 51169 (line 27) 51170* mno-prolog-function: V850 Options. (line 23) 51171* mno-prologue-epilogue: CRIS Options. (line 71) 51172* mno-prototype: RS/6000 and PowerPC Options. 51173 (line 647) 51174* mno-push-args: i386 and x86-64 Options. 51175 (line 737) 51176* mno-quad-memory: RS/6000 and PowerPC Options. 51177 (line 249) 51178* mno-quad-memory-atomic: RS/6000 and PowerPC Options. 51179 (line 255) 51180* mno-red-zone: i386 and x86-64 Options. 51181 (line 854) 51182* mno-register-names: IA-64 Options. (line 37) 51183* mno-regnames: RS/6000 and PowerPC Options. 51184 (line 753) 51185* mno-relax: V850 Options. (line 103) 51186* mno-relax-immediate: MCore Options. (line 19) 51187* mno-relocatable: RS/6000 and PowerPC Options. 51188 (line 473) 51189* mno-relocatable-lib: RS/6000 and PowerPC Options. 51190 (line 484) 51191* mno-renesas: SH Options. (line 176) 51192* mno-round-nearest: Adapteva Epiphany Options. 51193 (line 51) 51194* mno-rtd: M680x0 Options. (line 262) 51195* mno-scc: FRV Options. (line 146) 51196* mno-sched-ar-data-spec: IA-64 Options. (line 134) 51197* mno-sched-ar-in-data-spec: IA-64 Options. (line 155) 51198* mno-sched-br-data-spec: IA-64 Options. (line 128) 51199* mno-sched-br-in-data-spec: IA-64 Options. (line 148) 51200* mno-sched-control-spec: IA-64 Options. (line 140) 51201* mno-sched-count-spec-in-critical-path: IA-64 Options. (line 182) 51202* mno-sched-in-control-spec: IA-64 Options. (line 162) 51203* mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 51204* mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 51205* mno-sched-prolog: ARM Options. (line 33) 51206* mno-sdata <1>: RS/6000 and PowerPC Options. 51207 (line 734) 51208* mno-sdata: IA-64 Options. (line 42) 51209* mno-sep-data: Blackfin Options. (line 116) 51210* mno-serialize-volatile: Xtensa Options. (line 35) 51211* mno-short: M680x0 Options. (line 226) 51212* mno-side-effects: CRIS Options. (line 46) 51213* mno-sim: RX Options. (line 71) 51214* mno-single-exit: MMIX Options. (line 66) 51215* mno-slow-bytes: MCore Options. (line 35) 51216* mno-small-exec: S/390 and zSeries Options. 51217 (line 80) 51218* mno-smartmips: MIPS Options. (line 280) 51219* mno-soft-cmpsf: Adapteva Epiphany Options. 51220 (line 29) 51221* mno-soft-float: DEC Alpha Options. (line 10) 51222* mno-space-regs: HPPA Options. (line 44) 51223* mno-spe: RS/6000 and PowerPC Options. 51224 (line 204) 51225* mno-specld-anomaly: Blackfin Options. (line 56) 51226* mno-split-addresses: MIPS Options. (line 426) 51227* mno-sse: i386 and x86-64 Options. 51228 (line 571) 51229* mno-stack-align: CRIS Options. (line 55) 51230* mno-stack-bias: SPARC Options. (line 314) 51231* mno-strict-align <1>: RS/6000 and PowerPC Options. 51232 (line 468) 51233* mno-strict-align: M680x0 Options. (line 287) 51234* mno-string: RS/6000 and PowerPC Options. 51235 (line 404) 51236* mno-sum-in-toc: RS/6000 and PowerPC Options. 51237 (line 289) 51238* mno-sym32: MIPS Options. (line 323) 51239* mno-target-align: Xtensa Options. (line 59) 51240* mno-text-section-literals: Xtensa Options. (line 47) 51241* mno-tls-markers: RS/6000 and PowerPC Options. 51242 (line 792) 51243* mno-toc: RS/6000 and PowerPC Options. 51244 (line 493) 51245* mno-toplevel-symbols: MMIX Options. (line 40) 51246* mno-tpf-trace: S/390 and zSeries Options. 51247 (line 131) 51248* mno-unaligned-access: ARM Options. (line 313) 51249* mno-unaligned-doubles: SPARC Options. (line 74) 51250* mno-uninit-const-in-rodata: MIPS Options. (line 396) 51251* mno-update: RS/6000 and PowerPC Options. 51252 (line 415) 51253* mno-user-mode: SPARC Options. (line 86) 51254* mno-usermode: SH Options. (line 298) 51255* mno-v8plus: SPARC Options. (line 195) 51256* mno-vect-double: Adapteva Epiphany Options. 51257 (line 116) 51258* mno-vis: SPARC Options. (line 202) 51259* mno-vis2: SPARC Options. (line 208) 51260* mno-vis3: SPARC Options. (line 216) 51261* mno-vliw-branch: FRV Options. (line 170) 51262* mno-volatile-asm-stop: IA-64 Options. (line 32) 51263* mno-vrsave: RS/6000 and PowerPC Options. 51264 (line 174) 51265* mno-vsx: RS/6000 and PowerPC Options. 51266 (line 218) 51267* mno-warn-multiple-fast-interrupts: RX Options. (line 143) 51268* mno-wide-bitfields: MCore Options. (line 23) 51269* mno-xgot <1>: MIPS Options. (line 192) 51270* mno-xgot: M680x0 Options. (line 319) 51271* mno-xl-compat: RS/6000 and PowerPC Options. 51272 (line 324) 51273* mno-zdcbranch: SH Options. (line 474) 51274* mno-zero-extend: MMIX Options. (line 27) 51275* mnobitfield: M680x0 Options. (line 231) 51276* mnoliw: MN10300 Options. (line 59) 51277* mnomacsave: SH Options. (line 181) 51278* mnop-fun-dllimport: i386 and x86-64 Windows Options. 51279 (line 22) 51280* mnops: Adapteva Epiphany Options. 51281 (line 26) 51282* mnosetlb: MN10300 Options. (line 69) 51283* mnosplit-lohi: Adapteva Epiphany Options. 51284 (line 110) 51285* momit-leaf-frame-pointer <1>: i386 and x86-64 Options. 51286 (line 794) 51287* momit-leaf-frame-pointer <2>: Blackfin Options. (line 44) 51288* momit-leaf-frame-pointer: AArch64 Options. (line 43) 51289* mone-byte-bool: Darwin Options. (line 90) 51290* moptimize-membar: FRV Options. (line 201) 51291* MP: Preprocessor Options. 51292 (line 239) 51293* mpa-risc-1-0: HPPA Options. (line 19) 51294* mpa-risc-1-1: HPPA Options. (line 19) 51295* mpa-risc-2-0: HPPA Options. (line 19) 51296* mpack: FRV Options. (line 119) 51297* mpacked-stack: S/390 and zSeries Options. 51298 (line 54) 51299* mpadstruct: SH Options. (line 210) 51300* mpaired: RS/6000 and PowerPC Options. 51301 (line 209) 51302* mpaired-single: MIPS Options. (line 284) 51303* mpc32: i386 and x86-64 Options. 51304 (line 441) 51305* mpc64: i386 and x86-64 Options. 51306 (line 441) 51307* mpc80: i386 and x86-64 Options. 51308 (line 441) 51309* mpcrel: M680x0 Options. (line 279) 51310* mpdebug: CRIS Options. (line 35) 51311* mpe: RS/6000 and PowerPC Options. 51312 (line 344) 51313* mpe-aligned-commons: i386 and x86-64 Windows Options. 51314 (line 59) 51315* mpic-register: ARM Options. (line 219) 51316* mpid: RX Options. (line 117) 51317* mplt: MIPS Options. (line 182) 51318* mpointers-to-nested-functions: RS/6000 and PowerPC Options. 51319 (line 876) 51320* mpoke-function-name: ARM Options. (line 226) 51321* mpopc: SPARC Options. (line 231) 51322* mpopcntb: RS/6000 and PowerPC Options. 51323 (line 27) 51324* mpopcntd: RS/6000 and PowerPC Options. 51325 (line 27) 51326* mportable-runtime: HPPA Options. (line 70) 51327* mpower8-fusion: RS/6000 and PowerPC Options. 51328 (line 236) 51329* mpower8-vector: RS/6000 and PowerPC Options. 51330 (line 242) 51331* mpowerpc-gfxopt: RS/6000 and PowerPC Options. 51332 (line 27) 51333* mpowerpc-gpopt: RS/6000 and PowerPC Options. 51334 (line 27) 51335* mpowerpc64: RS/6000 and PowerPC Options. 51336 (line 27) 51337* mprefer-avx128: i386 and x86-64 Options. 51338 (line 614) 51339* mprefer-short-insn-regs: Adapteva Epiphany Options. 51340 (line 13) 51341* mprefergot: SH Options. (line 292) 51342* mpreferred-stack-boundary: i386 and x86-64 Options. 51343 (line 471) 51344* mpretend-cmove: SH Options. (line 517) 51345* mprioritize-restricted-insns: RS/6000 and PowerPC Options. 51346 (line 522) 51347* mprolog-function: V850 Options. (line 23) 51348* mprologue-epilogue: CRIS Options. (line 71) 51349* mprototype: RS/6000 and PowerPC Options. 51350 (line 647) 51351* mpt-fixed: SH Options. (line 435) 51352* mpush-args: i386 and x86-64 Options. 51353 (line 737) 51354* MQ: Preprocessor Options. 51355 (line 265) 51356* mquad-memory: RS/6000 and PowerPC Options. 51357 (line 249) 51358* mquad-memory-atomic: RS/6000 and PowerPC Options. 51359 (line 255) 51360* mr10k-cache-barrier: MIPS Options. (line 564) 51361* mrecip <1>: RS/6000 and PowerPC Options. 51362 (line 804) 51363* mrecip: i386 and x86-64 Options. 51364 (line 647) 51365* mrecip-precision: RS/6000 and PowerPC Options. 51366 (line 840) 51367* mrecip=opt <1>: RS/6000 and PowerPC Options. 51368 (line 817) 51369* mrecip=opt: i386 and x86-64 Options. 51370 (line 669) 51371* mregister-names: IA-64 Options. (line 37) 51372* mregnames: RS/6000 and PowerPC Options. 51373 (line 753) 51374* mregparm: i386 and x86-64 Options. 51375 (line 408) 51376* mrelax <1>: V850 Options. (line 103) 51377* mrelax <2>: SH Options. (line 158) 51378* mrelax <3>: RX Options. (line 95) 51379* mrelax <4>: MN10300 Options. (line 46) 51380* mrelax <5>: H8/300 Options. (line 9) 51381* mrelax: AVR Options. (line 169) 51382* mrelax-immediate: MCore Options. (line 19) 51383* mrelax-pic-calls: MIPS Options. (line 689) 51384* mrelocatable: RS/6000 and PowerPC Options. 51385 (line 473) 51386* mrelocatable-lib: RS/6000 and PowerPC Options. 51387 (line 484) 51388* mrenesas: SH Options. (line 173) 51389* mrepeat: MeP Options. (line 96) 51390* mreturn-pointer-on-d0: MN10300 Options. (line 36) 51391* mrh850-abi: V850 Options. (line 127) 51392* mrtd <1>: Function Attributes. 51393 (line 177) 51394* mrtd <2>: M680x0 Options. (line 240) 51395* mrtd: i386 and x86-64 Options. 51396 (line 384) 51397* mrtp: VxWorks Options. (line 11) 51398* ms <1>: MeP Options. (line 100) 51399* ms: H8/300 Options. (line 17) 51400* ms2600: H8/300 Options. (line 24) 51401* msafe-dma: SPU Options. (line 17) 51402* msafe-hints: SPU Options. (line 107) 51403* msahf: i386 and x86-64 Options. 51404 (line 627) 51405* msatur: MeP Options. (line 105) 51406* msave-acc-in-interrupts: RX Options. (line 109) 51407* msave-toc-indirect: RS/6000 and PowerPC Options. 51408 (line 888) 51409* mscc: FRV Options. (line 140) 51410* msched-ar-data-spec: IA-64 Options. (line 134) 51411* msched-ar-in-data-spec: IA-64 Options. (line 155) 51412* msched-br-data-spec: IA-64 Options. (line 128) 51413* msched-br-in-data-spec: IA-64 Options. (line 148) 51414* msched-control-spec: IA-64 Options. (line 140) 51415* msched-costly-dep: RS/6000 and PowerPC Options. 51416 (line 529) 51417* msched-count-spec-in-critical-path: IA-64 Options. (line 182) 51418* msched-fp-mem-deps-zero-cost: IA-64 Options. (line 198) 51419* msched-in-control-spec: IA-64 Options. (line 162) 51420* msched-max-memory-insns: IA-64 Options. (line 207) 51421* msched-max-memory-insns-hard-limit: IA-64 Options. (line 213) 51422* msched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 51423* msched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 51424* msched-spec-ldc: IA-64 Options. (line 187) 51425* msched-stop-bits-after-every-cycle: IA-64 Options. (line 194) 51426* mschedule: HPPA Options. (line 77) 51427* mscore5: Score Options. (line 25) 51428* mscore5u: Score Options. (line 28) 51429* mscore7: Score Options. (line 31) 51430* mscore7d: Score Options. (line 34) 51431* msda: V850 Options. (line 40) 51432* msdata <1>: RS/6000 and PowerPC Options. 51433 (line 721) 51434* msdata: IA-64 Options. (line 42) 51435* msdata=all: C6X Options. (line 30) 51436* msdata=data: RS/6000 and PowerPC Options. 51437 (line 726) 51438* msdata=default <1>: RS/6000 and PowerPC Options. 51439 (line 721) 51440* msdata=default: C6X Options. (line 22) 51441* msdata=eabi: RS/6000 and PowerPC Options. 51442 (line 701) 51443* msdata=none <1>: RS/6000 and PowerPC Options. 51444 (line 734) 51445* msdata=none <2>: M32R/D Options. (line 40) 51446* msdata=none: C6X Options. (line 35) 51447* msdata=sdata: M32R/D Options. (line 49) 51448* msdata=sysv: RS/6000 and PowerPC Options. 51449 (line 712) 51450* msdata=use: M32R/D Options. (line 53) 51451* msdram <1>: MeP Options. (line 110) 51452* msdram: Blackfin Options. (line 172) 51453* msecure-plt: RS/6000 and PowerPC Options. 51454 (line 184) 51455* msel-sched-dont-check-control-spec: IA-64 Options. (line 203) 51456* msep-data: Blackfin Options. (line 110) 51457* mserialize-volatile: Xtensa Options. (line 35) 51458* msetlb: MN10300 Options. (line 64) 51459* mshared-library-id: Blackfin Options. (line 103) 51460* mshort: M680x0 Options. (line 220) 51461* msign-extend-enabled: LM32 Options. (line 18) 51462* msim <1>: Xstormy16 Options. (line 9) 51463* msim <2>: RX Options. (line 71) 51464* msim <3>: RS/6000 and PowerPC Options. 51465 (line 657) 51466* msim <4>: RL78 Options. (line 7) 51467* msim <5>: MeP Options. (line 114) 51468* msim <6>: M32C Options. (line 13) 51469* msim <7>: CR16 Options. (line 18) 51470* msim <8>: C6X Options. (line 19) 51471* msim: Blackfin Options. (line 37) 51472* msimnovec: MeP Options. (line 117) 51473* msimple-fpu: RS/6000 and PowerPC Options. 51474 (line 377) 51475* msingle-exit: MMIX Options. (line 66) 51476* msingle-float <1>: RS/6000 and PowerPC Options. 51477 (line 373) 51478* msingle-float: MIPS Options. (line 244) 51479* msingle-pic-base <1>: RS/6000 and PowerPC Options. 51480 (line 516) 51481* msingle-pic-base: ARM Options. (line 213) 51482* msio: HPPA Options. (line 104) 51483* mslow-bytes: MCore Options. (line 35) 51484* msmall-data: DEC Alpha Options. (line 187) 51485* msmall-data-limit: RX Options. (line 47) 51486* msmall-divides: MicroBlaze Options. (line 39) 51487* msmall-exec: S/390 and zSeries Options. 51488 (line 80) 51489* msmall-mem: SPU Options. (line 35) 51490* msmall-model: FR30 Options. (line 9) 51491* msmall-text: DEC Alpha Options. (line 205) 51492* msmall16: Adapteva Epiphany Options. 51493 (line 67) 51494* msmartmips: MIPS Options. (line 280) 51495* msoft-float <1>: V850 Options. (line 113) 51496* msoft-float <2>: SPARC Options. (line 40) 51497* msoft-float <3>: S/390 and zSeries Options. 51498 (line 11) 51499* msoft-float <4>: RS/6000 and PowerPC Options. 51500 (line 367) 51501* msoft-float <5>: PDP-11 Options. (line 13) 51502* msoft-float <6>: MIPS Options. (line 230) 51503* msoft-float <7>: MicroBlaze Options. (line 7) 51504* msoft-float <8>: M680x0 Options. (line 203) 51505* msoft-float <9>: i386 and x86-64 Options. 51506 (line 292) 51507* msoft-float <10>: HPPA Options. (line 90) 51508* msoft-float <11>: FRV Options. (line 22) 51509* msoft-float: DEC Alpha Options. (line 10) 51510* msoft-quad-float: SPARC Options. (line 60) 51511* msp8: AVR Options. (line 183) 51512* mspace: V850 Options. (line 30) 51513* mspe: RS/6000 and PowerPC Options. 51514 (line 204) 51515* mspecld-anomaly: Blackfin Options. (line 51) 51516* msplit-addresses: MIPS Options. (line 426) 51517* msplit-vecmove-early: Adapteva Epiphany Options. 51518 (line 127) 51519* msse: i386 and x86-64 Options. 51520 (line 571) 51521* msse2avx: i386 and x86-64 Options. 51522 (line 812) 51523* msseregparm: i386 and x86-64 Options. 51524 (line 419) 51525* mstack-align: CRIS Options. (line 55) 51526* mstack-bias: SPARC Options. (line 314) 51527* mstack-check-l1: Blackfin Options. (line 77) 51528* mstack-guard: S/390 and zSeries Options. 51529 (line 156) 51530* mstack-increment: MCore Options. (line 50) 51531* mstack-offset: Adapteva Epiphany Options. 51532 (line 37) 51533* mstack-size: S/390 and zSeries Options. 51534 (line 156) 51535* mstackrealign: i386 and x86-64 Options. 51536 (line 462) 51537* mstdmain: SPU Options. (line 40) 51538* mstrict-align <1>: RS/6000 and PowerPC Options. 51539 (line 468) 51540* mstrict-align <2>: M680x0 Options. (line 287) 51541* mstrict-align: AArch64 Options. (line 38) 51542* mstrict-X: AVR Options. (line 196) 51543* mstring: RS/6000 and PowerPC Options. 51544 (line 404) 51545* mstringop-strategy=ALG: i386 and x86-64 Options. 51546 (line 776) 51547* mstructure-size-boundary: ARM Options. (line 170) 51548* msvr4-struct-return: RS/6000 and PowerPC Options. 51549 (line 609) 51550* msym32: MIPS Options. (line 323) 51551* msynci: MIPS Options. (line 674) 51552* MT: Preprocessor Options. 51553 (line 251) 51554* mtarget-align: Xtensa Options. (line 59) 51555* mtas: SH Options. (line 283) 51556* mtda: V850 Options. (line 34) 51557* mtext-section-literals: Xtensa Options. (line 47) 51558* mtf: MeP Options. (line 121) 51559* mthread: i386 and x86-64 Windows Options. 51560 (line 26) 51561* mthreads: i386 and x86-64 Options. 51562 (line 752) 51563* mthumb: ARM Options. (line 248) 51564* mthumb-interwork: ARM Options. (line 25) 51565* mtiny-stack: AVR Options. (line 210) 51566* mtiny=: MeP Options. (line 125) 51567* mtls: FRV Options. (line 75) 51568* mTLS: FRV Options. (line 72) 51569* mtls-dialect <1>: i386 and x86-64 Options. 51570 (line 730) 51571* mtls-dialect: ARM Options. (line 289) 51572* mtls-dialect=desc: AArch64 Options. (line 47) 51573* mtls-dialect=traditional: AArch64 Options. (line 51) 51574* mtls-direct-seg-refs: i386 and x86-64 Options. 51575 (line 802) 51576* mtls-markers: RS/6000 and PowerPC Options. 51577 (line 792) 51578* mtls-size: IA-64 Options. (line 112) 51579* mtoc: RS/6000 and PowerPC Options. 51580 (line 493) 51581* mtomcat-stats: FRV Options. (line 209) 51582* mtoplevel-symbols: MMIX Options. (line 40) 51583* mtp: ARM Options. (line 281) 51584* mtpcs-frame: ARM Options. (line 254) 51585* mtpcs-leaf-frame: ARM Options. (line 260) 51586* mtpf-trace: S/390 and zSeries Options. 51587 (line 131) 51588* mtrap-precision: DEC Alpha Options. (line 109) 51589* mtune <1>: SPARC Options. (line 181) 51590* mtune <2>: S/390 and zSeries Options. 51591 (line 124) 51592* mtune <3>: RS/6000 and PowerPC Options. 51593 (line 114) 51594* mtune <4>: MN10300 Options. (line 30) 51595* mtune <5>: MIPS Options. (line 63) 51596* mtune <6>: M680x0 Options. (line 70) 51597* mtune <7>: IA-64 Options. (line 116) 51598* mtune <8>: i386 and x86-64 Options. 51599 (line 195) 51600* mtune <9>: DEC Alpha Options. (line 259) 51601* mtune <10>: CRIS Options. (line 16) 51602* mtune <11>: ARM Options. (line 90) 51603* mtune: AArch64 Options. (line 89) 51604* muclibc: GNU/Linux Options. (line 13) 51605* muls: Score Options. (line 18) 51606* multcost=NUMBER: SH Options. (line 306) 51607* multi_module: Darwin Options. (line 196) 51608* multilib-library-pic: FRV Options. (line 89) 51609* multiply-enabled: LM32 Options. (line 15) 51610* multiply_defined: Darwin Options. (line 196) 51611* multiply_defined_unused: Darwin Options. (line 196) 51612* munaligned-access: ARM Options. (line 313) 51613* munaligned-doubles: SPARC Options. (line 74) 51614* municode: i386 and x86-64 Windows Options. 51615 (line 30) 51616* muninit-const-in-rodata: MIPS Options. (line 396) 51617* munix: VAX Options. (line 9) 51618* munix-asm: PDP-11 Options. (line 68) 51619* munsafe-dma: SPU Options. (line 17) 51620* mupdate: RS/6000 and PowerPC Options. 51621 (line 415) 51622* muser-enabled: LM32 Options. (line 21) 51623* muser-mode: SPARC Options. (line 86) 51624* musermode: SH Options. (line 298) 51625* mv850: V850 Options. (line 49) 51626* mv850e: V850 Options. (line 79) 51627* mv850e1: V850 Options. (line 70) 51628* mv850e2: V850 Options. (line 66) 51629* mv850e2v3: V850 Options. (line 61) 51630* mv850e2v4: V850 Options. (line 57) 51631* mv850e3v5: V850 Options. (line 52) 51632* mv850es: V850 Options. (line 75) 51633* mv8plus: SPARC Options. (line 195) 51634* mveclibabi <1>: RS/6000 and PowerPC Options. 51635 (line 849) 51636* mveclibabi: i386 and x86-64 Options. 51637 (line 698) 51638* mvect8-ret-in-mem: i386 and x86-64 Options. 51639 (line 429) 51640* mvis: SPARC Options. (line 202) 51641* mvis2: SPARC Options. (line 208) 51642* mvis3: SPARC Options. (line 216) 51643* mvliw-branch: FRV Options. (line 164) 51644* mvms-return-codes: VMS Options. (line 9) 51645* mvolatile-asm-stop: IA-64 Options. (line 32) 51646* mvr4130-align: MIPS Options. (line 663) 51647* mvrsave: RS/6000 and PowerPC Options. 51648 (line 174) 51649* mvsx: RS/6000 and PowerPC Options. 51650 (line 218) 51651* mvxworks: RS/6000 and PowerPC Options. 51652 (line 678) 51653* mvzeroupper: i386 and x86-64 Options. 51654 (line 608) 51655* mwarn-cell-microcode: RS/6000 and PowerPC Options. 51656 (line 180) 51657* mwarn-dynamicstack: S/390 and zSeries Options. 51658 (line 150) 51659* mwarn-framesize: S/390 and zSeries Options. 51660 (line 142) 51661* mwarn-multiple-fast-interrupts: RX Options. (line 143) 51662* mwarn-reloc: SPU Options. (line 10) 51663* mwide-bitfields: MCore Options. (line 23) 51664* mwin32: i386 and x86-64 Windows Options. 51665 (line 35) 51666* mwindows: i386 and x86-64 Windows Options. 51667 (line 41) 51668* mword-relocations: ARM Options. (line 300) 51669* mwords-little-endian: ARM Options. (line 66) 51670* mx32: i386 and x86-64 Options. 51671 (line 841) 51672* mxgot <1>: MIPS Options. (line 192) 51673* mxgot: M680x0 Options. (line 319) 51674* mxilinx-fpu: RS/6000 and PowerPC Options. 51675 (line 388) 51676* mxl-barrel-shift: MicroBlaze Options. (line 33) 51677* mxl-compat: RS/6000 and PowerPC Options. 51678 (line 324) 51679* mxl-float-convert: MicroBlaze Options. (line 51) 51680* mxl-float-sqrt: MicroBlaze Options. (line 54) 51681* mxl-gp-opt: MicroBlaze Options. (line 45) 51682* mxl-multiply-high: MicroBlaze Options. (line 48) 51683* mxl-pattern-compare: MicroBlaze Options. (line 36) 51684* mxl-reorder: MicroBlaze Options. (line 63) 51685* mxl-soft-div: MicroBlaze Options. (line 30) 51686* mxl-soft-mul: MicroBlaze Options. (line 27) 51687* mxl-stack-check: MicroBlaze Options. (line 42) 51688* myellowknife: RS/6000 and PowerPC Options. 51689 (line 673) 51690* mzarch: S/390 and zSeries Options. 51691 (line 95) 51692* mzda: V850 Options. (line 45) 51693* mzdcbranch: SH Options. (line 474) 51694* mzero-extend: MMIX Options. (line 27) 51695* no-canonical-prefixes: Overall Options. (line 334) 51696* no-integrated-cpp: Preprocessor Options. 51697 (line 34) 51698* no-sysroot-suffix: Directory Options. (line 112) 51699* no_dead_strip_inits_and_terms: Darwin Options. (line 196) 51700* noall_load: Darwin Options. (line 196) 51701* nocpp: MIPS Options. (line 494) 51702* nodefaultlibs: Link Options. (line 62) 51703* nofixprebinding: Darwin Options. (line 196) 51704* nofpu: RX Options. (line 17) 51705* nolibdld: HPPA Options. (line 187) 51706* nomultidefs: Darwin Options. (line 196) 51707* non-static: VxWorks Options. (line 16) 51708* noprebind: Darwin Options. (line 196) 51709* noseglinkedit: Darwin Options. (line 196) 51710* nostartfiles: Link Options. (line 57) 51711* nostdinc: Preprocessor Options. 51712 (line 399) 51713* nostdinc++ <1>: Preprocessor Options. 51714 (line 404) 51715* nostdinc++: C++ Dialect Options. 51716 (line 348) 51717* nostdlib: Link Options. (line 74) 51718* o: Preprocessor Options. 51719 (line 87) 51720* O: Optimize Options. (line 39) 51721* o: Overall Options. (line 192) 51722* O0: Optimize Options. (line 128) 51723* O1: Optimize Options. (line 39) 51724* O2: Optimize Options. (line 83) 51725* O3: Optimize Options. (line 121) 51726* Ofast: Optimize Options. (line 142) 51727* Og: Optimize Options. (line 149) 51728* Os: Optimize Options. (line 132) 51729* P: Preprocessor Options. 51730 (line 649) 51731* p: Debugging Options. (line 328) 51732* pagezero_size: Darwin Options. (line 196) 51733* param: Optimize Options. (line 2240) 51734* pass-exit-codes: Overall Options. (line 150) 51735* pedantic <1>: Warnings and Errors. 51736 (line 25) 51737* pedantic <2>: Alternate Keywords. (line 30) 51738* pedantic <3>: C Extensions. (line 6) 51739* pedantic <4>: Preprocessor Options. 51740 (line 175) 51741* pedantic <5>: Warning Options. (line 73) 51742* pedantic: Standards. (line 16) 51743* pedantic-errors <1>: Warnings and Errors. 51744 (line 25) 51745* pedantic-errors <2>: Non-bugs. (line 216) 51746* pedantic-errors <3>: Preprocessor Options. 51747 (line 180) 51748* pedantic-errors <4>: Warning Options. (line 115) 51749* pedantic-errors: Standards. (line 16) 51750* pg: Debugging Options. (line 334) 51751* pie: Link Options. (line 99) 51752* pipe: Overall Options. (line 215) 51753* prebind: Darwin Options. (line 196) 51754* prebind_all_twolevel_modules: Darwin Options. (line 196) 51755* print-file-name: Debugging Options. (line 1313) 51756* print-libgcc-file-name: Debugging Options. (line 1347) 51757* print-multi-directory: Debugging Options. (line 1319) 51758* print-multi-lib: Debugging Options. (line 1324) 51759* print-multi-os-directory: Debugging Options. (line 1331) 51760* print-multiarch: Debugging Options. (line 1340) 51761* print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 51762 (line 203) 51763* print-prog-name: Debugging Options. (line 1344) 51764* print-search-dirs: Debugging Options. (line 1355) 51765* print-sysroot: Debugging Options. (line 1368) 51766* print-sysroot-headers-suffix: Debugging Options. (line 1375) 51767* private_bundle: Darwin Options. (line 196) 51768* pthread <1>: Solaris 2 Options. (line 31) 51769* pthread: RS/6000 and PowerPC Options. 51770 (line 799) 51771* pthreads: Solaris 2 Options. (line 25) 51772* Q: Debugging Options. (line 340) 51773* Qn: System V Options. (line 18) 51774* Qy: System V Options. (line 14) 51775* rdynamic: Link Options. (line 105) 51776* read_only_relocs: Darwin Options. (line 196) 51777* remap: Preprocessor Options. 51778 (line 697) 51779* s: Link Options. (line 112) 51780* S <1>: Link Options. (line 20) 51781* S: Overall Options. (line 175) 51782* save-temps: Debugging Options. (line 1222) 51783* save-temps=obj: Debugging Options. (line 1248) 51784* sectalign: Darwin Options. (line 196) 51785* sectcreate: Darwin Options. (line 196) 51786* sectobjectsymbols: Darwin Options. (line 196) 51787* sectorder: Darwin Options. (line 196) 51788* seg1addr: Darwin Options. (line 196) 51789* seg_addr_table: Darwin Options. (line 196) 51790* seg_addr_table_filename: Darwin Options. (line 196) 51791* segaddr: Darwin Options. (line 196) 51792* seglinkedit: Darwin Options. (line 196) 51793* segprot: Darwin Options. (line 196) 51794* segs_read_only_addr: Darwin Options. (line 196) 51795* segs_read_write_addr: Darwin Options. (line 196) 51796* shared: Link Options. (line 121) 51797* shared-libgcc: Link Options. (line 129) 51798* short-calls: Adapteva Epiphany Options. 51799 (line 61) 51800* sim: CRIS Options. (line 95) 51801* sim2: CRIS Options. (line 101) 51802* single_module: Darwin Options. (line 196) 51803* specs: Directory Options. (line 89) 51804* static <1>: HPPA Options. (line 191) 51805* static <2>: Darwin Options. (line 196) 51806* static: Link Options. (line 116) 51807* static-libgcc: Link Options. (line 129) 51808* std <1>: Non-bugs. (line 107) 51809* std <2>: Other Builtins. (line 22) 51810* std <3>: C Dialect Options. (line 47) 51811* std: Standards. (line 16) 51812* std=: Preprocessor Options. 51813 (line 338) 51814* sub_library: Darwin Options. (line 196) 51815* sub_umbrella: Darwin Options. (line 196) 51816* symbolic: Link Options. (line 193) 51817* sysroot: Directory Options. (line 97) 51818* T: Link Options. (line 199) 51819* target-help <1>: Preprocessor Options. 51820 (line 702) 51821* target-help: Overall Options. (line 230) 51822* threads: HPPA Options. (line 204) 51823* time: Debugging Options. (line 1263) 51824* tno-android-cc: GNU/Linux Options. (line 31) 51825* tno-android-ld: GNU/Linux Options. (line 35) 51826* traditional <1>: Incompatibilities. (line 6) 51827* traditional: C Dialect Options. (line 309) 51828* traditional-cpp <1>: Preprocessor Options. 51829 (line 680) 51830* traditional-cpp: C Dialect Options. (line 309) 51831* trigraphs <1>: Preprocessor Options. 51832 (line 684) 51833* trigraphs: C Dialect Options. (line 304) 51834* twolevel_namespace: Darwin Options. (line 196) 51835* u: Link Options. (line 231) 51836* U: Preprocessor Options. 51837 (line 69) 51838* umbrella: Darwin Options. (line 196) 51839* undef: Preprocessor Options. 51840 (line 73) 51841* undefined: Darwin Options. (line 196) 51842* unexported_symbols_list: Darwin Options. (line 196) 51843* v <1>: Preprocessor Options. 51844 (line 706) 51845* v: Overall Options. (line 203) 51846* version <1>: Preprocessor Options. 51847 (line 719) 51848* version: Overall Options. (line 338) 51849* W: Incompatibilities. (line 64) 51850* w: Preprocessor Options. 51851 (line 171) 51852* W: Warning Options. (line 168) 51853* w: Warning Options. (line 25) 51854* Wa: Assembler Options. (line 9) 51855* Wabi: C++ Dialect Options. 51856 (line 362) 51857* Waddr-space-convert: AVR Options. (line 213) 51858* Waddress: Warning Options. (line 1177) 51859* Waggregate-return: Warning Options. (line 1195) 51860* Waggressive-loop-optimizations: Warning Options. (line 1200) 51861* Wall <1>: Standard Libraries. (line 6) 51862* Wall <2>: Preprocessor Options. 51863 (line 93) 51864* Wall: Warning Options. (line 119) 51865* Warray-bounds: Warning Options. (line 833) 51866* Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 51867 (line 157) 51868* Wattributes: Warning Options. (line 1205) 51869* Wbad-function-cast: Warning Options. (line 1051) 51870* Wbuiltin-macro-redefined: Warning Options. (line 1211) 51871* Wcast-align: Warning Options. (line 1082) 51872* Wcast-qual: Warning Options. (line 1066) 51873* Wchar-subscripts: Warning Options. (line 207) 51874* Wclobbered: Warning Options. (line 1102) 51875* Wcomment <1>: Preprocessor Options. 51876 (line 101) 51877* Wcomment: Warning Options. (line 212) 51878* Wcomments: Preprocessor Options. 51879 (line 101) 51880* Wconversion: Warning Options. (line 1106) 51881* Wconversion-null: Warning Options. (line 1124) 51882* Wctor-dtor-privacy: C++ Dialect Options. 51883 (line 472) 51884* Wdeclaration-after-statement: Warning Options. (line 966) 51885* Wdelete-non-virtual-dtor: C++ Dialect Options. 51886 (line 479) 51887* Wdeprecated: Warning Options. (line 1326) 51888* Wdeprecated-declarations: Warning Options. (line 1330) 51889* Wdisabled-optimization: Warning Options. (line 1486) 51890* Wdiv-by-zero: Warning Options. (line 838) 51891* Wdouble-promotion: Warning Options. (line 236) 51892* weak_reference_mismatches: Darwin Options. (line 196) 51893* Weffc++: C++ Dialect Options. 51894 (line 558) 51895* Wempty-body: Warning Options. (line 1135) 51896* Wendif-labels <1>: Preprocessor Options. 51897 (line 148) 51898* Wendif-labels: Warning Options. (line 976) 51899* Wenum-compare: Warning Options. (line 1139) 51900* Werror <1>: Preprocessor Options. 51901 (line 161) 51902* Werror: Warning Options. (line 28) 51903* Werror=: Warning Options. (line 31) 51904* Wextra: Warning Options. (line 168) 51905* Wfatal-errors: Warning Options. (line 48) 51906* Wfloat-equal: Warning Options. (line 865) 51907* Wformat <1>: Function Attributes. 51908 (line 419) 51909* Wformat: Warning Options. (line 255) 51910* Wformat-contains-nul: Warning Options. (line 292) 51911* Wformat-extra-args: Warning Options. (line 296) 51912* Wformat-nonliteral <1>: Function Attributes. 51913 (line 485) 51914* Wformat-nonliteral: Warning Options. (line 320) 51915* Wformat-security: Warning Options. (line 325) 51916* Wformat-y2k: Warning Options. (line 337) 51917* Wformat-zero-length: Warning Options. (line 310) 51918* Wformat=: Warning Options. (line 255) 51919* Wframe-larger-than: Warning Options. (line 990) 51920* Wfree-nonheap-object: Warning Options. (line 999) 51921* whatsloaded: Darwin Options. (line 196) 51922* whyload: Darwin Options. (line 196) 51923* Wignored-qualifiers: Warning Options. (line 377) 51924* Wimplicit: Warning Options. (line 373) 51925* Wimplicit-function-declaration: Warning Options. (line 367) 51926* Wimplicit-int: Warning Options. (line 363) 51927* Winherited-variadic-ctor: Warning Options. (line 1396) 51928* Winit-self: Warning Options. (line 348) 51929* Winline <1>: Inline. (line 63) 51930* Winline: Warning Options. (line 1401) 51931* Wint-to-pointer-cast: Warning Options. (line 1428) 51932* Winvalid-offsetof: Warning Options. (line 1414) 51933* Winvalid-pch: Warning Options. (line 1437) 51934* Wjump-misses-init: Warning Options. (line 1145) 51935* Wl: Link Options. (line 223) 51936* Wlarger-than-LEN: Warning Options. (line 987) 51937* Wlarger-than=LEN: Warning Options. (line 987) 51938* Wliteral-suffix: C++ Dialect Options. 51939 (line 486) 51940* Wlogical-op: Warning Options. (line 1190) 51941* Wlong-long: Warning Options. (line 1441) 51942* Wmain: Warning Options. (line 388) 51943* Wmaybe-uninitialized: Warning Options. (line 648) 51944* Wmissing-braces: Warning Options. (line 395) 51945* Wmissing-declarations: Warning Options. (line 1250) 51946* Wmissing-field-initializers: Warning Options. (line 1260) 51947* Wmissing-format-attribute: Warning Options. (line 812) 51948* Wmissing-include-dirs: Warning Options. (line 406) 51949* Wmissing-parameter-type: Warning Options. (line 1232) 51950* Wmissing-prototypes: Warning Options. (line 1240) 51951* Wmultichar: Warning Options. (line 1278) 51952* Wnarrowing: C++ Dialect Options. 51953 (line 507) 51954* Wnested-externs: Warning Options. (line 1393) 51955* Wno-abi: C++ Dialect Options. 51956 (line 362) 51957* Wno-address: Warning Options. (line 1177) 51958* Wno-aggregate-return: Warning Options. (line 1195) 51959* Wno-aggressive-loop-optimizations: Warning Options. (line 1200) 51960* Wno-all: Warning Options. (line 119) 51961* Wno-array-bounds: Warning Options. (line 833) 51962* Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 51963 (line 157) 51964* Wno-attributes: Warning Options. (line 1205) 51965* Wno-bad-function-cast: Warning Options. (line 1051) 51966* Wno-builtin-macro-redefined: Warning Options. (line 1211) 51967* Wno-cast-align: Warning Options. (line 1082) 51968* Wno-cast-qual: Warning Options. (line 1066) 51969* Wno-char-subscripts: Warning Options. (line 207) 51970* Wno-clobbered: Warning Options. (line 1102) 51971* Wno-comment: Warning Options. (line 212) 51972* Wno-conversion: Warning Options. (line 1106) 51973* Wno-conversion-null: Warning Options. (line 1124) 51974* Wno-coverage-mismatch: Warning Options. (line 217) 51975* Wno-ctor-dtor-privacy: C++ Dialect Options. 51976 (line 472) 51977* Wno-declaration-after-statement: Warning Options. (line 966) 51978* Wno-delete-non-virtual-dtor: C++ Dialect Options. 51979 (line 479) 51980* Wno-deprecated: Warning Options. (line 1326) 51981* Wno-deprecated-declarations: Warning Options. (line 1330) 51982* Wno-disabled-optimization: Warning Options. (line 1486) 51983* Wno-div-by-zero: Warning Options. (line 838) 51984* Wno-double-promotion: Warning Options. (line 236) 51985* Wno-effc++: C++ Dialect Options. 51986 (line 558) 51987* Wno-empty-body: Warning Options. (line 1135) 51988* Wno-endif-labels: Warning Options. (line 976) 51989* Wno-enum-compare: Warning Options. (line 1139) 51990* Wno-error: Warning Options. (line 28) 51991* Wno-error=: Warning Options. (line 31) 51992* Wno-extra: Warning Options. (line 168) 51993* Wno-fatal-errors: Warning Options. (line 48) 51994* Wno-float-equal: Warning Options. (line 865) 51995* Wno-format: Warning Options. (line 255) 51996* Wno-format-contains-nul: Warning Options. (line 292) 51997* Wno-format-extra-args: Warning Options. (line 296) 51998* Wno-format-nonliteral: Warning Options. (line 320) 51999* Wno-format-security: Warning Options. (line 325) 52000* Wno-format-y2k: Warning Options. (line 337) 52001* Wno-format-zero-length: Warning Options. (line 310) 52002* Wno-free-nonheap-object: Warning Options. (line 999) 52003* Wno-ignored-qualifiers: Warning Options. (line 377) 52004* Wno-implicit: Warning Options. (line 373) 52005* Wno-implicit-function-declaration: Warning Options. (line 367) 52006* Wno-implicit-int: Warning Options. (line 363) 52007* Wno-inherited-variadic-ctor: Warning Options. (line 1396) 52008* Wno-init-self: Warning Options. (line 348) 52009* Wno-inline: Warning Options. (line 1401) 52010* Wno-int-to-pointer-cast: Warning Options. (line 1428) 52011* Wno-invalid-offsetof: Warning Options. (line 1414) 52012* Wno-invalid-pch: Warning Options. (line 1437) 52013* Wno-jump-misses-init: Warning Options. (line 1145) 52014* Wno-literal-suffix: C++ Dialect Options. 52015 (line 486) 52016* Wno-logical-op: Warning Options. (line 1190) 52017* Wno-long-long: Warning Options. (line 1441) 52018* Wno-main: Warning Options. (line 388) 52019* Wno-maybe-uninitialized: Warning Options. (line 648) 52020* Wno-missing-braces: Warning Options. (line 395) 52021* Wno-missing-declarations: Warning Options. (line 1250) 52022* Wno-missing-field-initializers: Warning Options. (line 1260) 52023* Wno-missing-format-attribute: Warning Options. (line 812) 52024* Wno-missing-include-dirs: Warning Options. (line 406) 52025* Wno-missing-parameter-type: Warning Options. (line 1232) 52026* Wno-missing-prototypes: Warning Options. (line 1240) 52027* Wno-mudflap: Warning Options. (line 1506) 52028* Wno-multichar: Warning Options. (line 1278) 52029* Wno-narrowing: C++ Dialect Options. 52030 (line 507) 52031* Wno-nested-externs: Warning Options. (line 1393) 52032* Wno-noexcept: C++ Dialect Options. 52033 (line 520) 52034* Wno-non-template-friend: C++ Dialect Options. 52035 (line 596) 52036* Wno-non-virtual-dtor: C++ Dialect Options. 52037 (line 526) 52038* Wno-nonnull: Warning Options. (line 341) 52039* Wno-old-style-cast: C++ Dialect Options. 52040 (line 612) 52041* Wno-old-style-declaration: Warning Options. (line 1222) 52042* Wno-old-style-definition: Warning Options. (line 1228) 52043* Wno-overflow: Warning Options. (line 1336) 52044* Wno-overlength-strings: Warning Options. (line 1510) 52045* Wno-overloaded-virtual: C++ Dialect Options. 52046 (line 618) 52047* Wno-override-init: Warning Options. (line 1339) 52048* Wno-packed: Warning Options. (line 1347) 52049* Wno-packed-bitfield-compat: Warning Options. (line 1364) 52050* Wno-padded: Warning Options. (line 1381) 52051* Wno-parentheses: Warning Options. (line 409) 52052* Wno-pedantic-ms-format: Warning Options. (line 1031) 52053* Wno-pmf-conversions <1>: Bound member functions. 52054 (line 35) 52055* Wno-pmf-conversions: C++ Dialect Options. 52056 (line 637) 52057* Wno-pointer-arith: Warning Options. (line 1037) 52058* Wno-pointer-sign: Warning Options. (line 1495) 52059* Wno-pointer-to-int-cast: Warning Options. (line 1433) 52060* Wno-pragmas: Warning Options. (line 698) 52061* Wno-protocol: Objective-C and Objective-C++ Dialect Options. 52062 (line 161) 52063* Wno-redundant-decls: Warning Options. (line 1388) 52064* Wno-reorder: C++ Dialect Options. 52065 (line 533) 52066* Wno-return-local-addr: Warning Options. (line 504) 52067* Wno-return-type: Warning Options. (line 508) 52068* Wno-selector: Objective-C and Objective-C++ Dialect Options. 52069 (line 171) 52070* Wno-sequence-point: Warning Options. (line 458) 52071* Wno-shadow: Warning Options. (line 980) 52072* Wno-sign-compare: Warning Options. (line 1156) 52073* Wno-sign-conversion: Warning Options. (line 1163) 52074* Wno-sign-promo: C++ Dialect Options. 52075 (line 641) 52076* Wno-sizeof-pointer-memaccess: Warning Options. (line 1169) 52077* Wno-stack-protector: Warning Options. (line 1501) 52078* Wno-strict-aliasing: Warning Options. (line 703) 52079* Wno-strict-null-sentinel: C++ Dialect Options. 52080 (line 588) 52081* Wno-strict-overflow: Warning Options. (line 743) 52082* Wno-strict-prototypes: Warning Options. (line 1216) 52083* Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 52084 (line 183) 52085* Wno-suggest-attribute=: Warning Options. (line 793) 52086* Wno-suggest-attribute=const: Warning Options. (line 799) 52087* Wno-suggest-attribute=format: Warning Options. (line 812) 52088* Wno-suggest-attribute=noreturn: Warning Options. (line 799) 52089* Wno-suggest-attribute=pure: Warning Options. (line 799) 52090* Wno-switch: Warning Options. (line 523) 52091* Wno-switch-default: Warning Options. (line 531) 52092* Wno-switch-enum: Warning Options. (line 534) 52093* Wno-sync-nand: Warning Options. (line 543) 52094* Wno-system-headers: Warning Options. (line 843) 52095* Wno-traditional: Warning Options. (line 880) 52096* Wno-traditional-conversion: Warning Options. (line 958) 52097* Wno-trampolines: Warning Options. (line 854) 52098* Wno-trigraphs: Warning Options. (line 548) 52099* Wno-type-limits: Warning Options. (line 1044) 52100* Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 52101 (line 191) 52102* Wno-undef: Warning Options. (line 973) 52103* Wno-uninitialized: Warning Options. (line 625) 52104* Wno-unknown-pragmas: Warning Options. (line 691) 52105* Wno-unsafe-loop-optimizations: Warning Options. (line 1025) 52106* Wno-unused: Warning Options. (line 618) 52107* Wno-unused-but-set-parameter: Warning Options. (line 553) 52108* Wno-unused-but-set-variable: Warning Options. (line 562) 52109* Wno-unused-function: Warning Options. (line 572) 52110* Wno-unused-label: Warning Options. (line 577) 52111* Wno-unused-parameter: Warning Options. (line 588) 52112* Wno-unused-result: Warning Options. (line 595) 52113* Wno-unused-value: Warning Options. (line 608) 52114* Wno-unused-variable: Warning Options. (line 600) 52115* Wno-useless-cast: Warning Options. (line 1132) 52116* Wno-varargs: Warning Options. (line 1452) 52117* Wno-variadic-macros: Warning Options. (line 1446) 52118* Wno-vector-operation-performance: Warning Options. (line 1457) 52119* Wno-virtual-move-assign: Warning Options. (line 1467) 52120* Wno-vla: Warning Options. (line 1476) 52121* Wno-volatile-register-var: Warning Options. (line 1480) 52122* Wno-write-strings: Warning Options. (line 1088) 52123* Wno-zero-as-null-pointer-constant: Warning Options. (line 1128) 52124* Wnoexcept: C++ Dialect Options. 52125 (line 520) 52126* Wnon-template-friend: C++ Dialect Options. 52127 (line 596) 52128* Wnon-virtual-dtor: C++ Dialect Options. 52129 (line 526) 52130* Wnonnull: Warning Options. (line 341) 52131* Wnormalized=: Warning Options. (line 1284) 52132* Wold-style-cast: C++ Dialect Options. 52133 (line 612) 52134* Wold-style-declaration: Warning Options. (line 1222) 52135* Wold-style-definition: Warning Options. (line 1228) 52136* Woverflow: Warning Options. (line 1336) 52137* Woverlength-strings: Warning Options. (line 1510) 52138* Woverloaded-virtual: C++ Dialect Options. 52139 (line 618) 52140* Woverride-init: Warning Options. (line 1339) 52141* Wp: Preprocessor Options. 52142 (line 14) 52143* Wpacked: Warning Options. (line 1347) 52144* Wpacked-bitfield-compat: Warning Options. (line 1364) 52145* Wpadded: Warning Options. (line 1381) 52146* Wparentheses: Warning Options. (line 409) 52147* Wpedantic: Warning Options. (line 73) 52148* Wpedantic-ms-format: Warning Options. (line 1031) 52149* Wpmf-conversions: C++ Dialect Options. 52150 (line 637) 52151* Wpointer-arith <1>: Pointer Arith. (line 13) 52152* Wpointer-arith: Warning Options. (line 1037) 52153* Wpointer-sign: Warning Options. (line 1495) 52154* Wpointer-to-int-cast: Warning Options. (line 1433) 52155* Wpragmas: Warning Options. (line 698) 52156* Wprotocol: Objective-C and Objective-C++ Dialect Options. 52157 (line 161) 52158* wrapper: Overall Options. (line 341) 52159* Wredundant-decls: Warning Options. (line 1388) 52160* Wreorder: C++ Dialect Options. 52161 (line 533) 52162* Wreturn-local-addr: Warning Options. (line 504) 52163* Wreturn-type: Warning Options. (line 508) 52164* Wselector: Objective-C and Objective-C++ Dialect Options. 52165 (line 171) 52166* Wsequence-point: Warning Options. (line 458) 52167* Wshadow: Warning Options. (line 980) 52168* Wsign-compare: Warning Options. (line 1156) 52169* Wsign-conversion: Warning Options. (line 1163) 52170* Wsign-promo: C++ Dialect Options. 52171 (line 641) 52172* Wsizeof-pointer-memaccess: Warning Options. (line 1169) 52173* Wstack-protector: Warning Options. (line 1501) 52174* Wstack-usage: Warning Options. (line 1003) 52175* Wstrict-aliasing: Warning Options. (line 703) 52176* Wstrict-aliasing=n: Warning Options. (line 711) 52177* Wstrict-null-sentinel: C++ Dialect Options. 52178 (line 588) 52179* Wstrict-overflow: Warning Options. (line 743) 52180* Wstrict-prototypes: Warning Options. (line 1216) 52181* Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 52182 (line 183) 52183* Wsuggest-attribute=: Warning Options. (line 793) 52184* Wsuggest-attribute=const: Warning Options. (line 799) 52185* Wsuggest-attribute=format: Warning Options. (line 812) 52186* Wsuggest-attribute=noreturn: Warning Options. (line 799) 52187* Wsuggest-attribute=pure: Warning Options. (line 799) 52188* Wswitch: Warning Options. (line 523) 52189* Wswitch-default: Warning Options. (line 531) 52190* Wswitch-enum: Warning Options. (line 534) 52191* Wsync-nand: Warning Options. (line 543) 52192* Wsystem-headers <1>: Preprocessor Options. 52193 (line 165) 52194* Wsystem-headers: Warning Options. (line 843) 52195* Wtraditional <1>: Preprocessor Options. 52196 (line 118) 52197* Wtraditional: Warning Options. (line 880) 52198* Wtraditional-conversion: Warning Options. (line 958) 52199* Wtrampolines: Warning Options. (line 854) 52200* Wtrigraphs <1>: Preprocessor Options. 52201 (line 106) 52202* Wtrigraphs: Warning Options. (line 548) 52203* Wtype-limits: Warning Options. (line 1044) 52204* Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 52205 (line 191) 52206* Wundef <1>: Preprocessor Options. 52207 (line 124) 52208* Wundef: Warning Options. (line 973) 52209* Wuninitialized: Warning Options. (line 625) 52210* Wunknown-pragmas: Warning Options. (line 691) 52211* Wunsafe-loop-optimizations: Warning Options. (line 1025) 52212* Wunsuffixed-float-constants: Warning Options. (line 1525) 52213* Wunused: Warning Options. (line 618) 52214* Wunused-but-set-parameter: Warning Options. (line 553) 52215* Wunused-but-set-variable: Warning Options. (line 562) 52216* Wunused-function: Warning Options. (line 572) 52217* Wunused-label: Warning Options. (line 577) 52218* Wunused-local-typedefs: Warning Options. (line 584) 52219* Wunused-macros: Preprocessor Options. 52220 (line 129) 52221* Wunused-parameter: Warning Options. (line 588) 52222* Wunused-result: Warning Options. (line 595) 52223* Wunused-value: Warning Options. (line 608) 52224* Wunused-variable: Warning Options. (line 600) 52225* Wuseless-cast: Warning Options. (line 1132) 52226* Wvarargs: Warning Options. (line 1452) 52227* Wvariadic-macros: Warning Options. (line 1446) 52228* Wvector-operation-performance: Warning Options. (line 1457) 52229* Wvirtual-move-assign: Warning Options. (line 1467) 52230* Wvla: Warning Options. (line 1476) 52231* Wvolatile-register-var: Warning Options. (line 1480) 52232* Wwrite-strings: Warning Options. (line 1088) 52233* Wzero-as-null-pointer-constant: Warning Options. (line 1128) 52234* x <1>: Preprocessor Options. 52235 (line 322) 52236* x: Overall Options. (line 126) 52237* Xassembler: Assembler Options. (line 13) 52238* Xbind-lazy: VxWorks Options. (line 26) 52239* Xbind-now: VxWorks Options. (line 30) 52240* Xlinker: Link Options. (line 205) 52241* Xpreprocessor: Preprocessor Options. 52242 (line 25) 52243* Ym: System V Options. (line 26) 52244* YP: System V Options. (line 22) 52245 52246 52247File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 52248 52249Keyword Index 52250************* 52251 52252[index] 52253* Menu: 52254 52255* ! in constraint: Multi-Alternative. (line 33) 52256* # in constraint: Modifiers. (line 57) 52257* #pragma: Pragmas. (line 6) 52258* #pragma implementation: C++ Interface. (line 39) 52259* #pragma implementation, implied: C++ Interface. (line 46) 52260* #pragma interface: C++ Interface. (line 20) 52261* #pragma, reason for not using: Function Attributes. 52262 (line 1882) 52263* $: Dollar Signs. (line 6) 52264* % in constraint: Modifiers. (line 45) 52265* %include: Spec Files. (line 27) 52266* %include_noerr: Spec Files. (line 31) 52267* %rename: Spec Files. (line 35) 52268* & in constraint: Modifiers. (line 25) 52269* ': Incompatibilities. (line 116) 52270* * in constraint: Modifiers. (line 62) 52271* *__builtin_assume_aligned: Other Builtins. (line 339) 52272* + in constraint: Modifiers. (line 12) 52273* -lgcc, use with -nodefaultlibs: Link Options. (line 85) 52274* -lgcc, use with -nostdlib: Link Options. (line 85) 52275* -march feature modifiers: AArch64 Options. (line 99) 52276* -mcpu feature modifiers: AArch64 Options. (line 99) 52277* -nodefaultlibs and unresolved references: Link Options. (line 85) 52278* -nostdlib and unresolved references: Link Options. (line 85) 52279* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 52280 (line 745) 52281* //: C++ Comments. (line 6) 52282* 0 in constraint: Simple Constraints. (line 127) 52283* < in constraint: Simple Constraints. (line 48) 52284* = in constraint: Modifiers. (line 8) 52285* > in constraint: Simple Constraints. (line 61) 52286* ? in constraint: Multi-Alternative. (line 27) 52287* ?: extensions: Conditionals. (line 6) 52288* ?: side effect: Conditionals. (line 20) 52289* _ in variables in macros: Typeof. (line 46) 52290* __atomic_add_fetch: __atomic Builtins. (line 169) 52291* __atomic_always_lock_free: __atomic Builtins. (line 247) 52292* __atomic_and_fetch: __atomic Builtins. (line 173) 52293* __atomic_clear: __atomic Builtins. (line 221) 52294* __atomic_compare_exchange: __atomic Builtins. (line 161) 52295* __atomic_compare_exchange_n: __atomic Builtins. (line 138) 52296* __atomic_exchange: __atomic Builtins. (line 130) 52297* __atomic_exchange_n: __atomic Builtins. (line 119) 52298* __atomic_fetch_add: __atomic Builtins. (line 189) 52299* __atomic_fetch_and: __atomic Builtins. (line 193) 52300* __atomic_fetch_nand: __atomic Builtins. (line 199) 52301* __atomic_fetch_or: __atomic Builtins. (line 197) 52302* __atomic_fetch_sub: __atomic Builtins. (line 191) 52303* __atomic_fetch_xor: __atomic Builtins. (line 195) 52304* __atomic_is_lock_free: __atomic Builtins. (line 261) 52305* __atomic_load: __atomic Builtins. (line 98) 52306* __atomic_load_n: __atomic Builtins. (line 89) 52307* __atomic_nand_fetch: __atomic Builtins. (line 179) 52308* __atomic_or_fetch: __atomic Builtins. (line 177) 52309* __atomic_signal_fence: __atomic Builtins. (line 239) 52310* __atomic_store: __atomic Builtins. (line 113) 52311* __atomic_store_n: __atomic Builtins. (line 104) 52312* __atomic_sub_fetch: __atomic Builtins. (line 171) 52313* __atomic_test_and_set: __atomic Builtins. (line 210) 52314* __atomic_thread_fence: __atomic Builtins. (line 232) 52315* __atomic_xor_fetch: __atomic Builtins. (line 175) 52316* __builtin___clear_cache: Other Builtins. (line 372) 52317* __builtin___fprintf_chk: Object Size Checking. 52318 (line 6) 52319* __builtin___memcpy_chk: Object Size Checking. 52320 (line 6) 52321* __builtin___memmove_chk: Object Size Checking. 52322 (line 6) 52323* __builtin___mempcpy_chk: Object Size Checking. 52324 (line 6) 52325* __builtin___memset_chk: Object Size Checking. 52326 (line 6) 52327* __builtin___printf_chk: Object Size Checking. 52328 (line 6) 52329* __builtin___snprintf_chk: Object Size Checking. 52330 (line 6) 52331* __builtin___sprintf_chk: Object Size Checking. 52332 (line 6) 52333* __builtin___stpcpy_chk: Object Size Checking. 52334 (line 6) 52335* __builtin___strcat_chk: Object Size Checking. 52336 (line 6) 52337* __builtin___strcpy_chk: Object Size Checking. 52338 (line 6) 52339* __builtin___strncat_chk: Object Size Checking. 52340 (line 6) 52341* __builtin___strncpy_chk: Object Size Checking. 52342 (line 6) 52343* __builtin___vfprintf_chk: Object Size Checking. 52344 (line 6) 52345* __builtin___vprintf_chk: Object Size Checking. 52346 (line 6) 52347* __builtin___vsnprintf_chk: Object Size Checking. 52348 (line 6) 52349* __builtin___vsprintf_chk: Object Size Checking. 52350 (line 6) 52351* __builtin_apply: Constructing Calls. (line 31) 52352* __builtin_apply_args: Constructing Calls. (line 20) 52353* __builtin_bswap16: Other Builtins. (line 603) 52354* __builtin_bswap32: Other Builtins. (line 607) 52355* __builtin_bswap64: Other Builtins. (line 611) 52356* __builtin_choose_expr: Other Builtins. (line 157) 52357* __builtin_clrsb: Other Builtins. (line 532) 52358* __builtin_clrsbl: Other Builtins. (line 555) 52359* __builtin_clrsbll: Other Builtins. (line 578) 52360* __builtin_clz: Other Builtins. (line 524) 52361* __builtin_clzl: Other Builtins. (line 547) 52362* __builtin_clzll: Other Builtins. (line 570) 52363* __builtin_complex: Other Builtins. (line 197) 52364* __builtin_constant_p: Other Builtins. (line 207) 52365* __builtin_cpu_init: X86 Built-in Functions. 52366 (line 63) 52367* __builtin_cpu_is: X86 Built-in Functions. 52368 (line 92) 52369* __builtin_cpu_supports: X86 Built-in Functions. 52370 (line 161) 52371* __builtin_ctz: Other Builtins. (line 528) 52372* __builtin_ctzl: Other Builtins. (line 551) 52373* __builtin_ctzll: Other Builtins. (line 574) 52374* __builtin_expect: Other Builtins. (line 257) 52375* __builtin_extract_return_addr: Return Address. (line 36) 52376* __builtin_ffs: Other Builtins. (line 520) 52377* __builtin_ffsl: Other Builtins. (line 543) 52378* __builtin_ffsll: Other Builtins. (line 566) 52379* __builtin_FILE: Other Builtins. (line 366) 52380* __builtin_fpclassify: Other Builtins. (line 6) 52381* __builtin_frame_address: Return Address. (line 49) 52382* __builtin_frob_return_address: Return Address. (line 45) 52383* __builtin_FUNCTION: Other Builtins. (line 361) 52384* __builtin_huge_val: Other Builtins. (line 423) 52385* __builtin_huge_valf: Other Builtins. (line 428) 52386* __builtin_huge_vall: Other Builtins. (line 431) 52387* __builtin_huge_valq: X86 Built-in Functions. 52388 (line 57) 52389* __builtin_inf: Other Builtins. (line 446) 52390* __builtin_infd128: Other Builtins. (line 456) 52391* __builtin_infd32: Other Builtins. (line 450) 52392* __builtin_infd64: Other Builtins. (line 453) 52393* __builtin_inff: Other Builtins. (line 460) 52394* __builtin_infl: Other Builtins. (line 465) 52395* __builtin_infq: X86 Built-in Functions. 52396 (line 53) 52397* __builtin_isfinite: Other Builtins. (line 6) 52398* __builtin_isgreater: Other Builtins. (line 6) 52399* __builtin_isgreaterequal: Other Builtins. (line 6) 52400* __builtin_isinf_sign: Other Builtins. (line 6) 52401* __builtin_isless: Other Builtins. (line 6) 52402* __builtin_islessequal: Other Builtins. (line 6) 52403* __builtin_islessgreater: Other Builtins. (line 6) 52404* __builtin_isnormal: Other Builtins. (line 6) 52405* __builtin_isunordered: Other Builtins. (line 6) 52406* __builtin_LINE: Other Builtins. (line 356) 52407* __builtin_nan: Other Builtins. (line 476) 52408* __builtin_nand128: Other Builtins. (line 498) 52409* __builtin_nand32: Other Builtins. (line 492) 52410* __builtin_nand64: Other Builtins. (line 495) 52411* __builtin_nanf: Other Builtins. (line 502) 52412* __builtin_nanl: Other Builtins. (line 505) 52413* __builtin_nans: Other Builtins. (line 509) 52414* __builtin_nansf: Other Builtins. (line 513) 52415* __builtin_nansl: Other Builtins. (line 516) 52416* __builtin_non_tx_store: S/390 System z Built-in Functions. 52417 (line 104) 52418* __builtin_object_size: Object Size Checking. 52419 (line 6) 52420* __builtin_offsetof: Offsetof. (line 6) 52421* __builtin_parity: Other Builtins. (line 540) 52422* __builtin_parityl: Other Builtins. (line 562) 52423* __builtin_parityll: Other Builtins. (line 586) 52424* __builtin_popcount: Other Builtins. (line 537) 52425* __builtin_popcountl: Other Builtins. (line 558) 52426* __builtin_popcountll: Other Builtins. (line 582) 52427* __builtin_powi: Other Builtins. (line 6) 52428* __builtin_powif: Other Builtins. (line 6) 52429* __builtin_powil: Other Builtins. (line 6) 52430* __builtin_prefetch: Other Builtins. (line 384) 52431* __builtin_return: Constructing Calls. (line 48) 52432* __builtin_return_address: Return Address. (line 11) 52433* __builtin_rx_brk: RX Built-in Functions. 52434 (line 11) 52435* __builtin_rx_clrpsw: RX Built-in Functions. 52436 (line 14) 52437* __builtin_rx_int: RX Built-in Functions. 52438 (line 18) 52439* __builtin_rx_machi: RX Built-in Functions. 52440 (line 22) 52441* __builtin_rx_maclo: RX Built-in Functions. 52442 (line 27) 52443* __builtin_rx_mulhi: RX Built-in Functions. 52444 (line 32) 52445* __builtin_rx_mullo: RX Built-in Functions. 52446 (line 37) 52447* __builtin_rx_mvfachi: RX Built-in Functions. 52448 (line 42) 52449* __builtin_rx_mvfacmi: RX Built-in Functions. 52450 (line 46) 52451* __builtin_rx_mvfc: RX Built-in Functions. 52452 (line 50) 52453* __builtin_rx_mvtachi: RX Built-in Functions. 52454 (line 54) 52455* __builtin_rx_mvtaclo: RX Built-in Functions. 52456 (line 58) 52457* __builtin_rx_mvtc: RX Built-in Functions. 52458 (line 62) 52459* __builtin_rx_mvtipl: RX Built-in Functions. 52460 (line 66) 52461* __builtin_rx_racw: RX Built-in Functions. 52462 (line 70) 52463* __builtin_rx_revw: RX Built-in Functions. 52464 (line 74) 52465* __builtin_rx_rmpa: RX Built-in Functions. 52466 (line 79) 52467* __builtin_rx_round: RX Built-in Functions. 52468 (line 83) 52469* __builtin_rx_sat: RX Built-in Functions. 52470 (line 88) 52471* __builtin_rx_setpsw: RX Built-in Functions. 52472 (line 92) 52473* __builtin_rx_wait: RX Built-in Functions. 52474 (line 96) 52475* __builtin_set_thread_pointer: SH Built-in Functions. 52476 (line 10) 52477* __builtin_tabort: S/390 System z Built-in Functions. 52478 (line 87) 52479* __builtin_tbegin: S/390 System z Built-in Functions. 52480 (line 7) 52481* __builtin_tbegin_nofloat: S/390 System z Built-in Functions. 52482 (line 59) 52483* __builtin_tbegin_retry: S/390 System z Built-in Functions. 52484 (line 65) 52485* __builtin_tbegin_retry_nofloat: S/390 System z Built-in Functions. 52486 (line 72) 52487* __builtin_tbeginc: S/390 System z Built-in Functions. 52488 (line 78) 52489* __builtin_tend: S/390 System z Built-in Functions. 52490 (line 82) 52491* __builtin_thread_pointer: SH Built-in Functions. 52492 (line 20) 52493* __builtin_trap: Other Builtins. (line 281) 52494* __builtin_tx_assist: S/390 System z Built-in Functions. 52495 (line 92) 52496* __builtin_tx_nesting_depth: S/390 System z Built-in Functions. 52497 (line 98) 52498* __builtin_types_compatible_p: Other Builtins. (line 111) 52499* __builtin_unreachable: Other Builtins. (line 288) 52500* __builtin_va_arg_pack: Constructing Calls. (line 53) 52501* __builtin_va_arg_pack_len: Constructing Calls. (line 76) 52502* __complex__ keyword: Complex. (line 6) 52503* __declspec(dllexport): Function Attributes. 52504 (line 258) 52505* __declspec(dllimport): Function Attributes. 52506 (line 293) 52507* __ea SPU Named Address Spaces: Named Address Spaces. 52508 (line 155) 52509* __extension__: Alternate Keywords. (line 30) 52510* __far M32C Named Address Spaces: Named Address Spaces. 52511 (line 139) 52512* __far RL78 Named Address Spaces: Named Address Spaces. 52513 (line 147) 52514* __flash AVR Named Address Spaces: Named Address Spaces. 52515 (line 31) 52516* __flash1 AVR Named Address Spaces: Named Address Spaces. 52517 (line 40) 52518* __flash2 AVR Named Address Spaces: Named Address Spaces. 52519 (line 40) 52520* __flash3 AVR Named Address Spaces: Named Address Spaces. 52521 (line 40) 52522* __flash4 AVR Named Address Spaces: Named Address Spaces. 52523 (line 40) 52524* __flash5 AVR Named Address Spaces: Named Address Spaces. 52525 (line 40) 52526* __float128 data type: Floating Types. (line 6) 52527* __float80 data type: Floating Types. (line 6) 52528* __fp16 data type: Half-Precision. (line 6) 52529* __func__ identifier: Function Names. (line 6) 52530* __FUNCTION__ identifier: Function Names. (line 6) 52531* __imag__ keyword: Complex. (line 27) 52532* __int128 data types: __int128. (line 6) 52533* __memx AVR Named Address Spaces: Named Address Spaces. 52534 (line 46) 52535* __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 52536* __real__ keyword: Complex. (line 27) 52537* __STDC_HOSTED__: Standards. (line 13) 52538* __sync_add_and_fetch: __sync Builtins. (line 60) 52539* __sync_and_and_fetch: __sync Builtins. (line 60) 52540* __sync_bool_compare_and_swap: __sync Builtins. (line 71) 52541* __sync_fetch_and_add: __sync Builtins. (line 44) 52542* __sync_fetch_and_and: __sync Builtins. (line 44) 52543* __sync_fetch_and_nand: __sync Builtins. (line 44) 52544* __sync_fetch_and_or: __sync Builtins. (line 44) 52545* __sync_fetch_and_sub: __sync Builtins. (line 44) 52546* __sync_fetch_and_xor: __sync Builtins. (line 44) 52547* __sync_lock_release: __sync Builtins. (line 101) 52548* __sync_lock_test_and_set: __sync Builtins. (line 83) 52549* __sync_nand_and_fetch: __sync Builtins. (line 60) 52550* __sync_or_and_fetch: __sync Builtins. (line 60) 52551* __sync_sub_and_fetch: __sync Builtins. (line 60) 52552* __sync_synchronize: __sync Builtins. (line 80) 52553* __sync_val_compare_and_swap: __sync Builtins. (line 71) 52554* __sync_xor_and_fetch: __sync Builtins. (line 60) 52555* __thread: Thread-Local. (line 6) 52556* _Accum data type: Fixed-Point. (line 6) 52557* _Complex keyword: Complex. (line 6) 52558* _Decimal128 data type: Decimal Float. (line 6) 52559* _Decimal32 data type: Decimal Float. (line 6) 52560* _Decimal64 data type: Decimal Float. (line 6) 52561* _exit: Other Builtins. (line 6) 52562* _Exit: Other Builtins. (line 6) 52563* _Fract data type: Fixed-Point. (line 6) 52564* _HTM_FIRST_USER_ABORT_CODE: S/390 System z Built-in Functions. 52565 (line 48) 52566* _Sat data type: Fixed-Point. (line 6) 52567* _xabort: X86 transactional memory intrinsics. 52568 (line 68) 52569* _xbegin: X86 transactional memory intrinsics. 52570 (line 20) 52571* _xend: X86 transactional memory intrinsics. 52572 (line 59) 52573* _xtest: X86 transactional memory intrinsics. 52574 (line 64) 52575* AArch64 Options: AArch64 Options. (line 6) 52576* ABI: Compatibility. (line 6) 52577* abi_tag attribute: C++ Attributes. (line 9) 52578* abort: Other Builtins. (line 6) 52579* abs: Other Builtins. (line 6) 52580* accessing volatiles <1>: C++ Volatiles. (line 6) 52581* accessing volatiles: Volatiles. (line 6) 52582* acos: Other Builtins. (line 6) 52583* acosf: Other Builtins. (line 6) 52584* acosh: Other Builtins. (line 6) 52585* acoshf: Other Builtins. (line 6) 52586* acoshl: Other Builtins. (line 6) 52587* acosl: Other Builtins. (line 6) 52588* Ada: G++ and GCC. (line 6) 52589* additional floating types: Floating Types. (line 6) 52590* address constraints: Simple Constraints. (line 154) 52591* address of a label: Labels as Values. (line 6) 52592* address_operand: Simple Constraints. (line 158) 52593* alias attribute: Function Attributes. 52594 (line 37) 52595* aligned attribute <1>: Type Attributes. (line 31) 52596* aligned attribute <2>: Variable Attributes. 52597 (line 23) 52598* aligned attribute: Function Attributes. 52599 (line 50) 52600* alignment: Alignment. (line 6) 52601* alloc_size attribute: Function Attributes. 52602 (line 70) 52603* alloca: Other Builtins. (line 6) 52604* alloca vs variable-length arrays: Variable Length. (line 26) 52605* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 52606 (line 947) 52607* alternate keywords: Alternate Keywords. (line 6) 52608* always_inline function attribute: Function Attributes. 52609 (line 91) 52610* AMD x86-64 Options: i386 and x86-64 Options. 52611 (line 6) 52612* AMD1: Standards. (line 13) 52613* ANSI C: Standards. (line 13) 52614* ANSI C standard: Standards. (line 13) 52615* ANSI C89: Standards. (line 13) 52616* ANSI support: C Dialect Options. (line 10) 52617* ANSI X3.159-1989: Standards. (line 13) 52618* apostrophes: Incompatibilities. (line 116) 52619* application binary interface: Compatibility. (line 6) 52620* ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 52621 (line 6) 52622* ARM options: ARM Options. (line 6) 52623* arrays of length zero: Zero Length. (line 6) 52624* arrays of variable length: Variable Length. (line 6) 52625* arrays, non-lvalue: Subscripting. (line 6) 52626* artificial function attribute: Function Attributes. 52627 (line 134) 52628* asin: Other Builtins. (line 6) 52629* asinf: Other Builtins. (line 6) 52630* asinh: Other Builtins. (line 6) 52631* asinhf: Other Builtins. (line 6) 52632* asinhl: Other Builtins. (line 6) 52633* asinl: Other Builtins. (line 6) 52634* asm constraints: Constraints. (line 6) 52635* asm expressions: Extended Asm. (line 6) 52636* assembler instructions: Extended Asm. (line 6) 52637* assembler names for identifiers: Asm Labels. (line 6) 52638* assembly code, invalid: Bug Criteria. (line 12) 52639* atan: Other Builtins. (line 6) 52640* atan2: Other Builtins. (line 6) 52641* atan2f: Other Builtins. (line 6) 52642* atan2l: Other Builtins. (line 6) 52643* atanf: Other Builtins. (line 6) 52644* atanh: Other Builtins. (line 6) 52645* atanhf: Other Builtins. (line 6) 52646* atanhl: Other Builtins. (line 6) 52647* atanl: Other Builtins. (line 6) 52648* attribute of types: Type Attributes. (line 6) 52649* attribute of variables: Variable Attributes. 52650 (line 6) 52651* attribute syntax: Attribute Syntax. (line 6) 52652* autoincrement/decrement addressing: Simple Constraints. (line 30) 52653* automatic inline for C++ member fns: Inline. (line 71) 52654* AVR Options: AVR Options. (line 6) 52655* Backwards Compatibility: Backwards Compatibility. 52656 (line 6) 52657* base class members: Name lookup. (line 6) 52658* bcmp: Other Builtins. (line 6) 52659* below100 attribute: Variable Attributes. 52660 (line 584) 52661* binary compatibility: Compatibility. (line 6) 52662* Binary constants using the 0b prefix: Binary constants. (line 6) 52663* Blackfin Options: Blackfin Options. (line 6) 52664* bound pointer to member function: Bound member functions. 52665 (line 6) 52666* bounds checking: Optimize Options. (line 407) 52667* bug criteria: Bug Criteria. (line 6) 52668* bugs: Bugs. (line 6) 52669* bugs, known: Trouble. (line 6) 52670* built-in functions <1>: Other Builtins. (line 6) 52671* built-in functions: C Dialect Options. (line 205) 52672* bzero: Other Builtins. (line 6) 52673* C compilation options: Invoking GCC. (line 17) 52674* C intermediate output, nonexistent: G++ and GCC. (line 35) 52675* C language extensions: C Extensions. (line 6) 52676* C language, traditional: C Dialect Options. (line 307) 52677* C standard: Standards. (line 13) 52678* C standards: Standards. (line 13) 52679* c++: Invoking G++. (line 14) 52680* C++: G++ and GCC. (line 30) 52681* C++ comments: C++ Comments. (line 6) 52682* C++ compilation options: Invoking GCC. (line 23) 52683* C++ interface and implementation headers: C++ Interface. (line 6) 52684* C++ language extensions: C++ Extensions. (line 6) 52685* C++ member fns, automatically inline: Inline. (line 71) 52686* C++ misunderstandings: C++ Misunderstandings. 52687 (line 6) 52688* C++ options, command-line: C++ Dialect Options. 52689 (line 6) 52690* C++ pragmas, effect on inlining: C++ Interface. (line 66) 52691* C++ source file suffixes: Invoking G++. (line 6) 52692* C++ static data, declaring and defining: Static Definitions. 52693 (line 6) 52694* C11: Standards. (line 13) 52695* C1X: Standards. (line 13) 52696* C6X Options: C6X Options. (line 6) 52697* C89: Standards. (line 13) 52698* C90: Standards. (line 13) 52699* C94: Standards. (line 13) 52700* C95: Standards. (line 13) 52701* C99: Standards. (line 13) 52702* C9X: Standards. (line 13) 52703* C_INCLUDE_PATH: Environment Variables. 52704 (line 130) 52705* cabs: Other Builtins. (line 6) 52706* cabsf: Other Builtins. (line 6) 52707* cabsl: Other Builtins. (line 6) 52708* cacos: Other Builtins. (line 6) 52709* cacosf: Other Builtins. (line 6) 52710* cacosh: Other Builtins. (line 6) 52711* cacoshf: Other Builtins. (line 6) 52712* cacoshl: Other Builtins. (line 6) 52713* cacosl: Other Builtins. (line 6) 52714* callee_pop_aggregate_return attribute: Function Attributes. 52715 (line 893) 52716* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 52717 (line 532) 52718* calloc: Other Builtins. (line 6) 52719* carg: Other Builtins. (line 6) 52720* cargf: Other Builtins. (line 6) 52721* cargl: Other Builtins. (line 6) 52722* case labels in initializers: Designated Inits. (line 6) 52723* case ranges: Case Ranges. (line 6) 52724* casin: Other Builtins. (line 6) 52725* casinf: Other Builtins. (line 6) 52726* casinh: Other Builtins. (line 6) 52727* casinhf: Other Builtins. (line 6) 52728* casinhl: Other Builtins. (line 6) 52729* casinl: Other Builtins. (line 6) 52730* cast to a union: Cast to Union. (line 6) 52731* catan: Other Builtins. (line 6) 52732* catanf: Other Builtins. (line 6) 52733* catanh: Other Builtins. (line 6) 52734* catanhf: Other Builtins. (line 6) 52735* catanhl: Other Builtins. (line 6) 52736* catanl: Other Builtins. (line 6) 52737* cbrt: Other Builtins. (line 6) 52738* cbrtf: Other Builtins. (line 6) 52739* cbrtl: Other Builtins. (line 6) 52740* ccos: Other Builtins. (line 6) 52741* ccosf: Other Builtins. (line 6) 52742* ccosh: Other Builtins. (line 6) 52743* ccoshf: Other Builtins. (line 6) 52744* ccoshl: Other Builtins. (line 6) 52745* ccosl: Other Builtins. (line 6) 52746* ceil: Other Builtins. (line 6) 52747* ceilf: Other Builtins. (line 6) 52748* ceill: Other Builtins. (line 6) 52749* cexp: Other Builtins. (line 6) 52750* cexpf: Other Builtins. (line 6) 52751* cexpl: Other Builtins. (line 6) 52752* character set, execution: Preprocessor Options. 52753 (line 554) 52754* character set, input: Preprocessor Options. 52755 (line 567) 52756* character set, input normalization: Warning Options. (line 1284) 52757* character set, wide execution: Preprocessor Options. 52758 (line 559) 52759* cimag: Other Builtins. (line 6) 52760* cimagf: Other Builtins. (line 6) 52761* cimagl: Other Builtins. (line 6) 52762* cleanup attribute: Variable Attributes. 52763 (line 89) 52764* clog: Other Builtins. (line 6) 52765* clogf: Other Builtins. (line 6) 52766* clogl: Other Builtins. (line 6) 52767* COBOL: G++ and GCC. (line 23) 52768* code generation conventions: Code Gen Options. (line 6) 52769* code, mixed with declarations: Mixed Declarations. (line 6) 52770* cold function attribute: Function Attributes. 52771 (line 1170) 52772* cold label attribute: Function Attributes. 52773 (line 1188) 52774* command options: Invoking GCC. (line 6) 52775* comments, C++ style: C++ Comments. (line 6) 52776* common attribute: Variable Attributes. 52777 (line 105) 52778* comparison of signed and unsigned values, warning: Warning Options. 52779 (line 1156) 52780* compiler bugs, reporting: Bug Reporting. (line 6) 52781* compiler compared to C++ preprocessor: G++ and GCC. (line 35) 52782* compiler options, C++: C++ Dialect Options. 52783 (line 6) 52784* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 52785 (line 6) 52786* compiler version, specifying: Target Options. (line 6) 52787* COMPILER_PATH: Environment Variables. 52788 (line 91) 52789* complex conjugation: Complex. (line 34) 52790* complex numbers: Complex. (line 6) 52791* compound literals: Compound Literals. (line 6) 52792* computed gotos: Labels as Values. (line 6) 52793* conditional expressions, extensions: Conditionals. (line 6) 52794* conflicting types: Disappointments. (line 21) 52795* conj: Other Builtins. (line 6) 52796* conjf: Other Builtins. (line 6) 52797* conjl: Other Builtins. (line 6) 52798* const applied to function: Function Attributes. 52799 (line 6) 52800* const function attribute: Function Attributes. 52801 (line 183) 52802* constants in constraints: Simple Constraints. (line 70) 52803* constraint modifier characters: Modifiers. (line 6) 52804* constraint, matching: Simple Constraints. (line 139) 52805* constraints, asm: Constraints. (line 6) 52806* constraints, machine specific: Machine Constraints. 52807 (line 6) 52808* constructing calls: Constructing Calls. (line 6) 52809* constructor expressions: Compound Literals. (line 6) 52810* constructor function attribute: Function Attributes. 52811 (line 211) 52812* contributors: Contributors. (line 6) 52813* copysign: Other Builtins. (line 6) 52814* copysignf: Other Builtins. (line 6) 52815* copysignl: Other Builtins. (line 6) 52816* core dump: Bug Criteria. (line 9) 52817* cos: Other Builtins. (line 6) 52818* cosf: Other Builtins. (line 6) 52819* cosh: Other Builtins. (line 6) 52820* coshf: Other Builtins. (line 6) 52821* coshl: Other Builtins. (line 6) 52822* cosl: Other Builtins. (line 6) 52823* CPATH: Environment Variables. 52824 (line 129) 52825* CPLUS_INCLUDE_PATH: Environment Variables. 52826 (line 131) 52827* cpow: Other Builtins. (line 6) 52828* cpowf: Other Builtins. (line 6) 52829* cpowl: Other Builtins. (line 6) 52830* cproj: Other Builtins. (line 6) 52831* cprojf: Other Builtins. (line 6) 52832* cprojl: Other Builtins. (line 6) 52833* CR16 Options: CR16 Options. (line 6) 52834* creal: Other Builtins. (line 6) 52835* crealf: Other Builtins. (line 6) 52836* creall: Other Builtins. (line 6) 52837* CRIS Options: CRIS Options. (line 6) 52838* cross compiling: Target Options. (line 6) 52839* csin: Other Builtins. (line 6) 52840* csinf: Other Builtins. (line 6) 52841* csinh: Other Builtins. (line 6) 52842* csinhf: Other Builtins. (line 6) 52843* csinhl: Other Builtins. (line 6) 52844* csinl: Other Builtins. (line 6) 52845* csqrt: Other Builtins. (line 6) 52846* csqrtf: Other Builtins. (line 6) 52847* csqrtl: Other Builtins. (line 6) 52848* ctan: Other Builtins. (line 6) 52849* ctanf: Other Builtins. (line 6) 52850* ctanh: Other Builtins. (line 6) 52851* ctanhf: Other Builtins. (line 6) 52852* ctanhl: Other Builtins. (line 6) 52853* ctanl: Other Builtins. (line 6) 52854* Darwin options: Darwin Options. (line 6) 52855* dcgettext: Other Builtins. (line 6) 52856* DD integer suffix: Decimal Float. (line 6) 52857* dd integer suffix: Decimal Float. (line 6) 52858* deallocating variable length arrays: Variable Length. (line 22) 52859* debugging information options: Debugging Options. (line 6) 52860* decimal floating types: Decimal Float. (line 6) 52861* declaration scope: Incompatibilities. (line 80) 52862* declarations inside expressions: Statement Exprs. (line 6) 52863* declarations, mixed with code: Mixed Declarations. (line 6) 52864* declaring attributes of functions: Function Attributes. 52865 (line 6) 52866* declaring static data in C++: Static Definitions. (line 6) 52867* defining static data in C++: Static Definitions. (line 6) 52868* dependencies for make as output: Environment Variables. 52869 (line 157) 52870* dependencies, make: Preprocessor Options. 52871 (line 185) 52872* DEPENDENCIES_OUTPUT: Environment Variables. 52873 (line 156) 52874* dependent name lookup: Name lookup. (line 6) 52875* deprecated attribute: Variable Attributes. 52876 (line 114) 52877* deprecated attribute.: Function Attributes. 52878 (line 233) 52879* designated initializers: Designated Inits. (line 6) 52880* designator lists: Designated Inits. (line 94) 52881* designators: Designated Inits. (line 61) 52882* destructor function attribute: Function Attributes. 52883 (line 211) 52884* DF integer suffix: Decimal Float. (line 6) 52885* df integer suffix: Decimal Float. (line 6) 52886* dgettext: Other Builtins. (line 6) 52887* diagnostic messages: Language Independent Options. 52888 (line 6) 52889* dialect options: C Dialect Options. (line 6) 52890* digits in constraint: Simple Constraints. (line 127) 52891* directory options: Directory Options. (line 6) 52892* disinterrupt attribute: Function Attributes. 52893 (line 253) 52894* DL integer suffix: Decimal Float. (line 6) 52895* dl integer suffix: Decimal Float. (line 6) 52896* dollar signs in identifier names: Dollar Signs. (line 6) 52897* double-word arithmetic: Long Long. (line 6) 52898* downward funargs: Nested Functions. (line 6) 52899* drem: Other Builtins. (line 6) 52900* dremf: Other Builtins. (line 6) 52901* dreml: Other Builtins. (line 6) 52902* E in constraint: Simple Constraints. (line 89) 52903* earlyclobber operand: Modifiers. (line 25) 52904* eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes. 52905 (line 346) 52906* EIND: AVR Options. (line 220) 52907* empty structures: Empty Structures. (line 6) 52908* environment variables: Environment Variables. 52909 (line 6) 52910* erf: Other Builtins. (line 6) 52911* erfc: Other Builtins. (line 6) 52912* erfcf: Other Builtins. (line 6) 52913* erfcl: Other Builtins. (line 6) 52914* erff: Other Builtins. (line 6) 52915* erfl: Other Builtins. (line 6) 52916* error function attribute: Function Attributes. 52917 (line 153) 52918* error messages: Warnings and Errors. 52919 (line 6) 52920* escaped newlines: Escaped Newlines. (line 6) 52921* exception handler functions on the Blackfin processor: Function Attributes. 52922 (line 356) 52923* exclamation point: Multi-Alternative. (line 33) 52924* exit: Other Builtins. (line 6) 52925* exp: Other Builtins. (line 6) 52926* exp10: Other Builtins. (line 6) 52927* exp10f: Other Builtins. (line 6) 52928* exp10l: Other Builtins. (line 6) 52929* exp2: Other Builtins. (line 6) 52930* exp2f: Other Builtins. (line 6) 52931* exp2l: Other Builtins. (line 6) 52932* expf: Other Builtins. (line 6) 52933* expl: Other Builtins. (line 6) 52934* explicit register variables: Explicit Reg Vars. (line 6) 52935* expm1: Other Builtins. (line 6) 52936* expm1f: Other Builtins. (line 6) 52937* expm1l: Other Builtins. (line 6) 52938* expressions containing statements: Statement Exprs. (line 6) 52939* expressions, constructor: Compound Literals. (line 6) 52940* extended asm: Extended Asm. (line 6) 52941* extensible constraints: Simple Constraints. (line 163) 52942* extensions, ?:: Conditionals. (line 6) 52943* extensions, C language: C Extensions. (line 6) 52944* extensions, C++ language: C++ Extensions. (line 6) 52945* external declaration scope: Incompatibilities. (line 80) 52946* externally_visible attribute.: Function Attributes. 52947 (line 362) 52948* F in constraint: Simple Constraints. (line 94) 52949* fabs: Other Builtins. (line 6) 52950* fabsf: Other Builtins. (line 6) 52951* fabsl: Other Builtins. (line 6) 52952* fatal signal: Bug Criteria. (line 9) 52953* fdim: Other Builtins. (line 6) 52954* fdimf: Other Builtins. (line 6) 52955* fdiml: Other Builtins. (line 6) 52956* FDL, GNU Free Documentation License: GNU Free Documentation License. 52957 (line 6) 52958* ffs: Other Builtins. (line 6) 52959* file name suffix: Overall Options. (line 14) 52960* file names: Link Options. (line 10) 52961* fixed-point types: Fixed-Point. (line 6) 52962* flatten function attribute: Function Attributes. 52963 (line 146) 52964* flexible array members: Zero Length. (line 6) 52965* float as function value type: Incompatibilities. (line 141) 52966* floating point precision: Disappointments. (line 68) 52967* floating-point precision: Optimize Options. (line 1873) 52968* floor: Other Builtins. (line 6) 52969* floorf: Other Builtins. (line 6) 52970* floorl: Other Builtins. (line 6) 52971* fma: Other Builtins. (line 6) 52972* fmaf: Other Builtins. (line 6) 52973* fmal: Other Builtins. (line 6) 52974* fmax: Other Builtins. (line 6) 52975* fmaxf: Other Builtins. (line 6) 52976* fmaxl: Other Builtins. (line 6) 52977* fmin: Other Builtins. (line 6) 52978* fminf: Other Builtins. (line 6) 52979* fminl: Other Builtins. (line 6) 52980* fmod: Other Builtins. (line 6) 52981* fmodf: Other Builtins. (line 6) 52982* fmodl: Other Builtins. (line 6) 52983* force_align_arg_pointer attribute: Function Attributes. 52984 (line 1230) 52985* format function attribute: Function Attributes. 52986 (line 419) 52987* format_arg function attribute: Function Attributes. 52988 (line 485) 52989* Fortran: G++ and GCC. (line 6) 52990* forwarder_section attribute: Function Attributes. 52991 (line 685) 52992* forwarding calls: Constructing Calls. (line 6) 52993* fprintf: Other Builtins. (line 6) 52994* fprintf_unlocked: Other Builtins. (line 6) 52995* fputs: Other Builtins. (line 6) 52996* fputs_unlocked: Other Builtins. (line 6) 52997* FR30 Options: FR30 Options. (line 6) 52998* freestanding environment: Standards. (line 13) 52999* freestanding implementation: Standards. (line 13) 53000* frexp: Other Builtins. (line 6) 53001* frexpf: Other Builtins. (line 6) 53002* frexpl: Other Builtins. (line 6) 53003* FRV Options: FRV Options. (line 6) 53004* fscanf: Other Builtins. (line 6) 53005* fscanf, and constant strings: Incompatibilities. (line 17) 53006* function addressability on the M32R/D: Function Attributes. 53007 (line 853) 53008* function attributes: Function Attributes. 53009 (line 6) 53010* function pointers, arithmetic: Pointer Arith. (line 6) 53011* function prototype declarations: Function Prototypes. 53012 (line 6) 53013* function versions: Function Multiversioning. 53014 (line 6) 53015* function without a prologue/epilogue code: Function Attributes. 53016 (line 924) 53017* function, size of pointer to: Pointer Arith. (line 6) 53018* functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 53019 (line 808) 53020* functions in arbitrary sections: Function Attributes. 53021 (line 6) 53022* functions that are dynamically resolved: Function Attributes. 53023 (line 6) 53024* functions that are passed arguments in registers on the 386: Function Attributes. 53025 (line 6) 53026* functions that behave like malloc: Function Attributes. 53027 (line 6) 53028* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 53029 (line 937) 53030* functions that do not pop the argument stack on the 386: Function Attributes. 53031 (line 6) 53032* functions that do pop the argument stack on the 386: Function Attributes. 53033 (line 177) 53034* functions that handle memory bank switching: Function Attributes. 53035 (line 375) 53036* functions that have different compilation options on the 386: Function Attributes. 53037 (line 6) 53038* functions that have different optimization options: Function Attributes. 53039 (line 6) 53040* functions that have no side effects: Function Attributes. 53041 (line 6) 53042* functions that never return: Function Attributes. 53043 (line 6) 53044* functions that pop the argument stack on the 386: Function Attributes. 53045 (line 6) 53046* functions that return more than once: Function Attributes. 53047 (line 6) 53048* functions with non-null pointer arguments: Function Attributes. 53049 (line 6) 53050* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 53051 (line 6) 53052* g in constraint: Simple Constraints. (line 120) 53053* G in constraint: Simple Constraints. (line 98) 53054* g++: Invoking G++. (line 14) 53055* G++: G++ and GCC. (line 30) 53056* gamma: Other Builtins. (line 6) 53057* gamma_r: Other Builtins. (line 6) 53058* gammaf: Other Builtins. (line 6) 53059* gammaf_r: Other Builtins. (line 6) 53060* gammal: Other Builtins. (line 6) 53061* gammal_r: Other Builtins. (line 6) 53062* GCC: G++ and GCC. (line 6) 53063* GCC command options: Invoking GCC. (line 6) 53064* GCC_COMPARE_DEBUG: Environment Variables. 53065 (line 52) 53066* GCC_EXEC_PREFIX: Environment Variables. 53067 (line 57) 53068* gcc_struct: Type Attributes. (line 324) 53069* gcc_struct attribute: Variable Attributes. 53070 (line 445) 53071* gcov: Debugging Options. (line 411) 53072* gettext: Other Builtins. (line 6) 53073* global offset table: Code Gen Options. (line 280) 53074* global register after longjmp: Global Reg Vars. (line 65) 53075* global register variables: Global Reg Vars. (line 6) 53076* GNAT: G++ and GCC. (line 30) 53077* GNU C Compiler: G++ and GCC. (line 6) 53078* GNU Compiler Collection: G++ and GCC. (line 6) 53079* gnu_inline function attribute: Function Attributes. 53080 (line 96) 53081* Go: G++ and GCC. (line 6) 53082* goto with computed label: Labels as Values. (line 6) 53083* gprof: Debugging Options. (line 333) 53084* grouping options: Invoking GCC. (line 26) 53085* H in constraint: Simple Constraints. (line 98) 53086* half-precision floating point: Half-Precision. (line 6) 53087* hardware models and configurations, specifying: Submodel Options. 53088 (line 6) 53089* hex floats: Hex Floats. (line 6) 53090* HK fixed-suffix: Fixed-Point. (line 6) 53091* hk fixed-suffix: Fixed-Point. (line 6) 53092* hosted environment <1>: C Dialect Options. (line 239) 53093* hosted environment: Standards. (line 13) 53094* hosted implementation: Standards. (line 13) 53095* hot function attribute: Function Attributes. 53096 (line 1148) 53097* hot label attribute: Function Attributes. 53098 (line 1160) 53099* hotpatch attribute: Function Attributes. 53100 (line 912) 53101* HPPA Options: HPPA Options. (line 6) 53102* HR fixed-suffix: Fixed-Point. (line 6) 53103* hr fixed-suffix: Fixed-Point. (line 6) 53104* hypot: Other Builtins. (line 6) 53105* hypotf: Other Builtins. (line 6) 53106* hypotl: Other Builtins. (line 6) 53107* I in constraint: Simple Constraints. (line 81) 53108* i in constraint: Simple Constraints. (line 70) 53109* i386 and x86-64 Windows Options: i386 and x86-64 Windows Options. 53110 (line 6) 53111* i386 Options: i386 and x86-64 Options. 53112 (line 6) 53113* IA-64 Options: IA-64 Options. (line 6) 53114* IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 53115 (line 6) 53116* identifier names, dollar signs in: Dollar Signs. (line 6) 53117* identifiers, names in assembler code: Asm Labels. (line 6) 53118* ifunc attribute: Function Attributes. 53119 (line 593) 53120* ilogb: Other Builtins. (line 6) 53121* ilogbf: Other Builtins. (line 6) 53122* ilogbl: Other Builtins. (line 6) 53123* imaxabs: Other Builtins. (line 6) 53124* implementation-defined behavior, C language: C Implementation. 53125 (line 6) 53126* implementation-defined behavior, C++ language: C++ Implementation. 53127 (line 6) 53128* implied #pragma implementation: C++ Interface. (line 46) 53129* incompatibilities of GCC: Incompatibilities. (line 6) 53130* increment operators: Bug Criteria. (line 17) 53131* index: Other Builtins. (line 6) 53132* indirect calls on ARM: Function Attributes. 53133 (line 798) 53134* indirect calls on MIPS: Function Attributes. 53135 (line 820) 53136* init_priority attribute: C++ Attributes. (line 30) 53137* initializations in expressions: Compound Literals. (line 6) 53138* initializers with labeled elements: Designated Inits. (line 6) 53139* initializers, non-constant: Initializers. (line 6) 53140* inline automatic for C++ member fns: Inline. (line 71) 53141* inline functions: Inline. (line 6) 53142* inline functions, omission of: Inline. (line 51) 53143* inlining and C++ pragmas: C++ Interface. (line 66) 53144* installation trouble: Trouble. (line 6) 53145* integrating function code: Inline. (line 6) 53146* Intel 386 Options: i386 and x86-64 Options. 53147 (line 6) 53148* interface and implementation headers, C++: C++ Interface. (line 6) 53149* intermediate C version, nonexistent: G++ and GCC. (line 35) 53150* interrupt handler functions: Function Attributes. 53151 (line 141) 53152* interrupt handler functions on the AVR processors: Function Attributes. 53153 (line 1325) 53154* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 53155 (line 735) 53156* interrupt service routines on ARM: Function Attributes. 53157 (line 750) 53158* interrupt thread functions on fido: Function Attributes. 53159 (line 742) 53160* introduction: Top. (line 6) 53161* invalid assembly code: Bug Criteria. (line 12) 53162* invalid input: Bug Criteria. (line 42) 53163* invoking g++: Invoking G++. (line 22) 53164* isalnum: Other Builtins. (line 6) 53165* isalpha: Other Builtins. (line 6) 53166* isascii: Other Builtins. (line 6) 53167* isblank: Other Builtins. (line 6) 53168* iscntrl: Other Builtins. (line 6) 53169* isdigit: Other Builtins. (line 6) 53170* isgraph: Other Builtins. (line 6) 53171* islower: Other Builtins. (line 6) 53172* ISO 9899: Standards. (line 13) 53173* ISO C: Standards. (line 13) 53174* ISO C standard: Standards. (line 13) 53175* ISO C11: Standards. (line 13) 53176* ISO C1X: Standards. (line 13) 53177* ISO C90: Standards. (line 13) 53178* ISO C94: Standards. (line 13) 53179* ISO C95: Standards. (line 13) 53180* ISO C99: Standards. (line 13) 53181* ISO C9X: Standards. (line 13) 53182* ISO support: C Dialect Options. (line 10) 53183* ISO/IEC 9899: Standards. (line 13) 53184* isprint: Other Builtins. (line 6) 53185* ispunct: Other Builtins. (line 6) 53186* isspace: Other Builtins. (line 6) 53187* isupper: Other Builtins. (line 6) 53188* iswalnum: Other Builtins. (line 6) 53189* iswalpha: Other Builtins. (line 6) 53190* iswblank: Other Builtins. (line 6) 53191* iswcntrl: Other Builtins. (line 6) 53192* iswdigit: Other Builtins. (line 6) 53193* iswgraph: Other Builtins. (line 6) 53194* iswlower: Other Builtins. (line 6) 53195* iswprint: Other Builtins. (line 6) 53196* iswpunct: Other Builtins. (line 6) 53197* iswspace: Other Builtins. (line 6) 53198* iswupper: Other Builtins. (line 6) 53199* iswxdigit: Other Builtins. (line 6) 53200* isxdigit: Other Builtins. (line 6) 53201* j0: Other Builtins. (line 6) 53202* j0f: Other Builtins. (line 6) 53203* j0l: Other Builtins. (line 6) 53204* j1: Other Builtins. (line 6) 53205* j1f: Other Builtins. (line 6) 53206* j1l: Other Builtins. (line 6) 53207* Java: G++ and GCC. (line 6) 53208* java_interface attribute: C++ Attributes. (line 50) 53209* jn: Other Builtins. (line 6) 53210* jnf: Other Builtins. (line 6) 53211* jnl: Other Builtins. (line 6) 53212* K fixed-suffix: Fixed-Point. (line 6) 53213* k fixed-suffix: Fixed-Point. (line 6) 53214* keep_interrupts_masked attribute: Function Attributes. 53215 (line 707) 53216* keywords, alternate: Alternate Keywords. (line 6) 53217* known causes of trouble: Trouble. (line 6) 53218* l1_data variable attribute: Variable Attributes. 53219 (line 356) 53220* l1_data_A variable attribute: Variable Attributes. 53221 (line 356) 53222* l1_data_B variable attribute: Variable Attributes. 53223 (line 356) 53224* l1_text function attribute: Function Attributes. 53225 (line 759) 53226* l2 function attribute: Function Attributes. 53227 (line 765) 53228* l2 variable attribute: Variable Attributes. 53229 (line 364) 53230* labeled elements in initializers: Designated Inits. (line 6) 53231* labels as values: Labels as Values. (line 6) 53232* labs: Other Builtins. (line 6) 53233* LANG: Environment Variables. 53234 (line 21) 53235* language dialect options: C Dialect Options. (line 6) 53236* LC_ALL: Environment Variables. 53237 (line 21) 53238* LC_CTYPE: Environment Variables. 53239 (line 21) 53240* LC_MESSAGES: Environment Variables. 53241 (line 21) 53242* ldexp: Other Builtins. (line 6) 53243* ldexpf: Other Builtins. (line 6) 53244* ldexpl: Other Builtins. (line 6) 53245* leaf function attribute: Function Attributes. 53246 (line 771) 53247* length-zero arrays: Zero Length. (line 6) 53248* lgamma: Other Builtins. (line 6) 53249* lgamma_r: Other Builtins. (line 6) 53250* lgammaf: Other Builtins. (line 6) 53251* lgammaf_r: Other Builtins. (line 6) 53252* lgammal: Other Builtins. (line 6) 53253* lgammal_r: Other Builtins. (line 6) 53254* Libraries: Link Options. (line 24) 53255* LIBRARY_PATH: Environment Variables. 53256 (line 97) 53257* link options: Link Options. (line 6) 53258* linker script: Link Options. (line 199) 53259* LK fixed-suffix: Fixed-Point. (line 6) 53260* lk fixed-suffix: Fixed-Point. (line 6) 53261* LL integer suffix: Long Long. (line 6) 53262* llabs: Other Builtins. (line 6) 53263* LLK fixed-suffix: Fixed-Point. (line 6) 53264* llk fixed-suffix: Fixed-Point. (line 6) 53265* LLR fixed-suffix: Fixed-Point. (line 6) 53266* llr fixed-suffix: Fixed-Point. (line 6) 53267* llrint: Other Builtins. (line 6) 53268* llrintf: Other Builtins. (line 6) 53269* llrintl: Other Builtins. (line 6) 53270* llround: Other Builtins. (line 6) 53271* llroundf: Other Builtins. (line 6) 53272* llroundl: Other Builtins. (line 6) 53273* LM32 options: LM32 Options. (line 6) 53274* load address instruction: Simple Constraints. (line 154) 53275* local labels: Local Labels. (line 6) 53276* local variables in macros: Typeof. (line 46) 53277* local variables, specifying registers: Local Reg Vars. (line 6) 53278* locale: Environment Variables. 53279 (line 21) 53280* locale definition: Environment Variables. 53281 (line 106) 53282* log: Other Builtins. (line 6) 53283* log10: Other Builtins. (line 6) 53284* log10f: Other Builtins. (line 6) 53285* log10l: Other Builtins. (line 6) 53286* log1p: Other Builtins. (line 6) 53287* log1pf: Other Builtins. (line 6) 53288* log1pl: Other Builtins. (line 6) 53289* log2: Other Builtins. (line 6) 53290* log2f: Other Builtins. (line 6) 53291* log2l: Other Builtins. (line 6) 53292* logb: Other Builtins. (line 6) 53293* logbf: Other Builtins. (line 6) 53294* logbl: Other Builtins. (line 6) 53295* logf: Other Builtins. (line 6) 53296* logl: Other Builtins. (line 6) 53297* long long data types: Long Long. (line 6) 53298* longjmp: Global Reg Vars. (line 65) 53299* longjmp incompatibilities: Incompatibilities. (line 39) 53300* longjmp warnings: Warning Options. (line 674) 53301* LR fixed-suffix: Fixed-Point. (line 6) 53302* lr fixed-suffix: Fixed-Point. (line 6) 53303* lrint: Other Builtins. (line 6) 53304* lrintf: Other Builtins. (line 6) 53305* lrintl: Other Builtins. (line 6) 53306* lround: Other Builtins. (line 6) 53307* lroundf: Other Builtins. (line 6) 53308* lroundl: Other Builtins. (line 6) 53309* m in constraint: Simple Constraints. (line 17) 53310* M32C options: M32C Options. (line 6) 53311* M32R/D options: M32R/D Options. (line 6) 53312* M680x0 options: M680x0 Options. (line 6) 53313* machine dependent options: Submodel Options. (line 6) 53314* machine specific constraints: Machine Constraints. 53315 (line 6) 53316* macro with variable arguments: Variadic Macros. (line 6) 53317* macros containing asm: Extended Asm. (line 238) 53318* macros, inline alternative: Inline. (line 6) 53319* macros, local labels: Local Labels. (line 6) 53320* macros, local variables in: Typeof. (line 46) 53321* macros, statements in expressions: Statement Exprs. (line 6) 53322* macros, types of arguments: Typeof. (line 6) 53323* make: Preprocessor Options. 53324 (line 185) 53325* malloc: Other Builtins. (line 6) 53326* malloc attribute: Function Attributes. 53327 (line 830) 53328* matching constraint: Simple Constraints. (line 139) 53329* MCore options: MCore Options. (line 6) 53330* member fns, automatically inline: Inline. (line 71) 53331* memchr: Other Builtins. (line 6) 53332* memcmp: Other Builtins. (line 6) 53333* memcpy: Other Builtins. (line 6) 53334* memory references in constraints: Simple Constraints. (line 17) 53335* mempcpy: Other Builtins. (line 6) 53336* memset: Other Builtins. (line 6) 53337* MeP options: MeP Options. (line 6) 53338* Mercury: G++ and GCC. (line 23) 53339* message formatting: Language Independent Options. 53340 (line 6) 53341* messages, warning: Warning Options. (line 6) 53342* messages, warning and error: Warnings and Errors. 53343 (line 6) 53344* MicroBlaze Options: MicroBlaze Options. (line 6) 53345* middle-operands, omitted: Conditionals. (line 6) 53346* MIPS options: MIPS Options. (line 6) 53347* mips16 attribute: Function Attributes. 53348 (line 839) 53349* misunderstandings in C++: C++ Misunderstandings. 53350 (line 6) 53351* mixed declarations and code: Mixed Declarations. (line 6) 53352* mktemp, and constant strings: Incompatibilities. (line 13) 53353* MMIX Options: MMIX Options. (line 6) 53354* MN10300 options: MN10300 Options. (line 6) 53355* mode attribute: Variable Attributes. 53356 (line 134) 53357* modf: Other Builtins. (line 6) 53358* modff: Other Builtins. (line 6) 53359* modfl: Other Builtins. (line 6) 53360* modifiers in constraints: Modifiers. (line 6) 53361* Moxie Options: Moxie Options. (line 6) 53362* ms_abi attribute: Function Attributes. 53363 (line 881) 53364* ms_hook_prologue attribute: Function Attributes. 53365 (line 906) 53366* ms_struct: Type Attributes. (line 324) 53367* ms_struct attribute: Variable Attributes. 53368 (line 445) 53369* mudflap: Optimize Options. (line 407) 53370* multiple alternative constraints: Multi-Alternative. (line 6) 53371* multiprecision arithmetic: Long Long. (line 6) 53372* n in constraint: Simple Constraints. (line 75) 53373* Named Address Spaces: Named Address Spaces. 53374 (line 6) 53375* names used in assembler code: Asm Labels. (line 6) 53376* naming convention, implementation headers: C++ Interface. (line 46) 53377* nearbyint: Other Builtins. (line 6) 53378* nearbyintf: Other Builtins. (line 6) 53379* nearbyintl: Other Builtins. (line 6) 53380* nested functions: Nested Functions. (line 6) 53381* newlines (escaped): Escaped Newlines. (line 6) 53382* nextafter: Other Builtins. (line 6) 53383* nextafterf: Other Builtins. (line 6) 53384* nextafterl: Other Builtins. (line 6) 53385* nexttoward: Other Builtins. (line 6) 53386* nexttowardf: Other Builtins. (line 6) 53387* nexttowardl: Other Builtins. (line 6) 53388* NFC: Warning Options. (line 1284) 53389* NFKC: Warning Options. (line 1284) 53390* NMI handler functions on the Blackfin processor: Function Attributes. 53391 (line 952) 53392* no_instrument_function function attribute: Function Attributes. 53393 (line 958) 53394* no_sanitize_address function attribute: Function Attributes. 53395 (line 1198) 53396* no_split_stack function attribute: Function Attributes. 53397 (line 963) 53398* noclone function attribute: Function Attributes. 53399 (line 980) 53400* nocommon attribute: Variable Attributes. 53401 (line 105) 53402* noinline function attribute: Function Attributes. 53403 (line 969) 53404* nomips16 attribute: Function Attributes. 53405 (line 839) 53406* non-constant initializers: Initializers. (line 6) 53407* non-static inline function: Inline. (line 85) 53408* nonnull function attribute: Function Attributes. 53409 (line 986) 53410* noreturn function attribute: Function Attributes. 53411 (line 1010) 53412* nosave_low_regs attribute: Function Attributes. 53413 (line 1060) 53414* nothrow function attribute: Function Attributes. 53415 (line 1052) 53416* o in constraint: Simple Constraints. (line 23) 53417* OBJC_INCLUDE_PATH: Environment Variables. 53418 (line 132) 53419* Objective-C <1>: Standards. (line 163) 53420* Objective-C: G++ and GCC. (line 6) 53421* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options. 53422 (line 6) 53423* Objective-C++ <1>: Standards. (line 163) 53424* Objective-C++: G++ and GCC. (line 6) 53425* offsettable address: Simple Constraints. (line 23) 53426* old-style function definitions: Function Prototypes. 53427 (line 6) 53428* omitted middle-operands: Conditionals. (line 6) 53429* open coding: Inline. (line 6) 53430* OpenMP parallel: C Dialect Options. (line 256) 53431* operand constraints, asm: Constraints. (line 6) 53432* optimize function attribute: Function Attributes. 53433 (line 1066) 53434* optimize options: Optimize Options. (line 6) 53435* options to control diagnostics formatting: Language Independent Options. 53436 (line 6) 53437* options to control warnings: Warning Options. (line 6) 53438* options, C++: C++ Dialect Options. 53439 (line 6) 53440* options, code generation: Code Gen Options. (line 6) 53441* options, debugging: Debugging Options. (line 6) 53442* options, dialect: C Dialect Options. (line 6) 53443* options, directory search: Directory Options. (line 6) 53444* options, GCC command: Invoking GCC. (line 6) 53445* options, grouping: Invoking GCC. (line 26) 53446* options, linking: Link Options. (line 6) 53447* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 53448 (line 6) 53449* options, optimization: Optimize Options. (line 6) 53450* options, order: Invoking GCC. (line 30) 53451* options, preprocessor: Preprocessor Options. 53452 (line 6) 53453* order of evaluation, side effects: Non-bugs. (line 196) 53454* order of options: Invoking GCC. (line 30) 53455* OS_main AVR function attribute: Function Attributes. 53456 (line 1083) 53457* OS_task AVR function attribute: Function Attributes. 53458 (line 1083) 53459* other register constraints: Simple Constraints. (line 163) 53460* output file option: Overall Options. (line 191) 53461* overloaded virtual function, warning: C++ Dialect Options. 53462 (line 618) 53463* p in constraint: Simple Constraints. (line 154) 53464* packed attribute: Variable Attributes. 53465 (line 145) 53466* parameter forward declaration: Variable Length. (line 59) 53467* Pascal: G++ and GCC. (line 23) 53468* pcs function attribute: Function Attributes. 53469 (line 1108) 53470* PDP-11 Options: PDP-11 Options. (line 6) 53471* PIC: Code Gen Options. (line 280) 53472* picoChip options: picoChip Options. (line 6) 53473* pmf: Bound member functions. 53474 (line 6) 53475* pointer arguments: Function Attributes. 53476 (line 188) 53477* pointer to member function: Bound member functions. 53478 (line 6) 53479* portions of temporary objects, pointers to: Temporaries. (line 6) 53480* pow: Other Builtins. (line 6) 53481* pow10: Other Builtins. (line 6) 53482* pow10f: Other Builtins. (line 6) 53483* pow10l: Other Builtins. (line 6) 53484* PowerPC options: PowerPC Options. (line 6) 53485* powf: Other Builtins. (line 6) 53486* powl: Other Builtins. (line 6) 53487* pragma GCC optimize: Function Specific Option Pragmas. 53488 (line 21) 53489* pragma GCC pop_options: Function Specific Option Pragmas. 53490 (line 34) 53491* pragma GCC push_options: Function Specific Option Pragmas. 53492 (line 34) 53493* pragma GCC reset_options: Function Specific Option Pragmas. 53494 (line 44) 53495* pragma GCC target: Function Specific Option Pragmas. 53496 (line 7) 53497* pragma, address: M32C Pragmas. (line 15) 53498* pragma, align: Solaris Pragmas. (line 11) 53499* pragma, call: MeP Pragmas. (line 48) 53500* pragma, coprocessor available: MeP Pragmas. (line 13) 53501* pragma, coprocessor call_saved: MeP Pragmas. (line 20) 53502* pragma, coprocessor subclass: MeP Pragmas. (line 28) 53503* pragma, custom io_volatile: MeP Pragmas. (line 7) 53504* pragma, diagnostic: Diagnostic Pragmas. (line 14) 53505* pragma, disinterrupt: MeP Pragmas. (line 38) 53506* pragma, fini: Solaris Pragmas. (line 19) 53507* pragma, init: Solaris Pragmas. (line 24) 53508* pragma, long_calls: ARM Pragmas. (line 11) 53509* pragma, long_calls_off: ARM Pragmas. (line 17) 53510* pragma, longcall: RS/6000 and PowerPC Pragmas. 53511 (line 14) 53512* pragma, mark: Darwin Pragmas. (line 11) 53513* pragma, memregs: M32C Pragmas. (line 7) 53514* pragma, no_long_calls: ARM Pragmas. (line 14) 53515* pragma, options align: Darwin Pragmas. (line 14) 53516* pragma, pop_macro: Push/Pop Macro Pragmas. 53517 (line 15) 53518* pragma, push_macro: Push/Pop Macro Pragmas. 53519 (line 11) 53520* pragma, reason for not using: Function Attributes. 53521 (line 1882) 53522* pragma, redefine_extname: Symbol-Renaming Pragmas. 53523 (line 12) 53524* pragma, segment: Darwin Pragmas. (line 21) 53525* pragma, unused: Darwin Pragmas. (line 24) 53526* pragma, visibility: Visibility Pragmas. (line 8) 53527* pragma, weak: Weak Pragmas. (line 10) 53528* pragmas: Pragmas. (line 6) 53529* pragmas in C++, effect on inlining: C++ Interface. (line 66) 53530* pragmas, interface and implementation: C++ Interface. (line 6) 53531* pragmas, warning of unknown: Warning Options. (line 691) 53532* precompiled headers: Precompiled Headers. 53533 (line 6) 53534* preprocessing numbers: Incompatibilities. (line 173) 53535* preprocessing tokens: Incompatibilities. (line 173) 53536* preprocessor options: Preprocessor Options. 53537 (line 6) 53538* printf: Other Builtins. (line 6) 53539* printf_unlocked: Other Builtins. (line 6) 53540* prof: Debugging Options. (line 327) 53541* progmem AVR variable attribute: Variable Attributes. 53542 (line 318) 53543* promotion of formal parameters: Function Prototypes. 53544 (line 6) 53545* pure function attribute: Function Attributes. 53546 (line 1126) 53547* push address instruction: Simple Constraints. (line 154) 53548* putchar: Other Builtins. (line 6) 53549* puts: Other Builtins. (line 6) 53550* Q floating point suffix: Floating Types. (line 6) 53551* q floating point suffix: Floating Types. (line 6) 53552* qsort, and global register variables: Global Reg Vars. (line 41) 53553* question mark: Multi-Alternative. (line 27) 53554* R fixed-suffix: Fixed-Point. (line 6) 53555* r fixed-suffix: Fixed-Point. (line 6) 53556* r in constraint: Simple Constraints. (line 66) 53557* RAMPD: AVR Options. (line 336) 53558* RAMPX: AVR Options. (line 336) 53559* RAMPY: AVR Options. (line 336) 53560* RAMPZ: AVR Options. (line 336) 53561* ranges in case statements: Case Ranges. (line 6) 53562* read-only strings: Incompatibilities. (line 9) 53563* register variable after longjmp: Global Reg Vars. (line 65) 53564* registers: Extended Asm. (line 6) 53565* registers for local variables: Local Reg Vars. (line 6) 53566* registers in constraints: Simple Constraints. (line 66) 53567* registers, global allocation: Explicit Reg Vars. (line 6) 53568* registers, global variables in: Global Reg Vars. (line 6) 53569* regparm attribute: Function Attributes. 53570 (line 1206) 53571* relocation truncated to fit (ColdFire): M680x0 Options. (line 329) 53572* relocation truncated to fit (MIPS): MIPS Options. (line 200) 53573* remainder: Other Builtins. (line 6) 53574* remainderf: Other Builtins. (line 6) 53575* remainderl: Other Builtins. (line 6) 53576* remquo: Other Builtins. (line 6) 53577* remquof: Other Builtins. (line 6) 53578* remquol: Other Builtins. (line 6) 53579* renesas attribute: Function Attributes. 53580 (line 1238) 53581* reordering, warning: C++ Dialect Options. 53582 (line 533) 53583* reporting bugs: Bugs. (line 6) 53584* resbank attribute: Function Attributes. 53585 (line 1242) 53586* rest argument (in macro): Variadic Macros. (line 6) 53587* restricted pointers: Restricted Pointers. 53588 (line 6) 53589* restricted references: Restricted Pointers. 53590 (line 6) 53591* restricted this pointer: Restricted Pointers. 53592 (line 6) 53593* returns_twice attribute: Function Attributes. 53594 (line 1256) 53595* rindex: Other Builtins. (line 6) 53596* rint: Other Builtins. (line 6) 53597* rintf: Other Builtins. (line 6) 53598* rintl: Other Builtins. (line 6) 53599* RL78 Options: RL78 Options. (line 6) 53600* round: Other Builtins. (line 6) 53601* roundf: Other Builtins. (line 6) 53602* roundl: Other Builtins. (line 6) 53603* RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 53604 (line 6) 53605* RTTI: Vague Linkage. (line 42) 53606* run-time options: Code Gen Options. (line 6) 53607* RX Options: RX Options. (line 6) 53608* s in constraint: Simple Constraints. (line 102) 53609* S/390 and zSeries Options: S/390 and zSeries Options. 53610 (line 6) 53611* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 53612 (line 1265) 53613* save volatile registers on the MicroBlaze: Function Attributes. 53614 (line 1270) 53615* scalb: Other Builtins. (line 6) 53616* scalbf: Other Builtins. (line 6) 53617* scalbl: Other Builtins. (line 6) 53618* scalbln: Other Builtins. (line 6) 53619* scalblnf: Other Builtins. (line 6) 53620* scalbn: Other Builtins. (line 6) 53621* scalbnf: Other Builtins. (line 6) 53622* scanf, and constant strings: Incompatibilities. (line 17) 53623* scanfnl: Other Builtins. (line 6) 53624* scope of a variable length array: Variable Length. (line 22) 53625* scope of declaration: Disappointments. (line 21) 53626* scope of external declarations: Incompatibilities. (line 80) 53627* Score Options: Score Options. (line 6) 53628* search path: Directory Options. (line 6) 53629* section function attribute: Function Attributes. 53630 (line 1278) 53631* section variable attribute: Variable Attributes. 53632 (line 166) 53633* sentinel function attribute: Function Attributes. 53634 (line 1294) 53635* setjmp: Global Reg Vars. (line 65) 53636* setjmp incompatibilities: Incompatibilities. (line 39) 53637* shared strings: Incompatibilities. (line 9) 53638* shared variable attribute: Variable Attributes. 53639 (line 211) 53640* side effect in ?:: Conditionals. (line 20) 53641* side effects, macro argument: Statement Exprs. (line 35) 53642* side effects, order of evaluation: Non-bugs. (line 196) 53643* signbit: Other Builtins. (line 6) 53644* signbitd128: Other Builtins. (line 6) 53645* signbitd32: Other Builtins. (line 6) 53646* signbitd64: Other Builtins. (line 6) 53647* signbitf: Other Builtins. (line 6) 53648* signbitl: Other Builtins. (line 6) 53649* signed and unsigned values, comparison warning: Warning Options. 53650 (line 1156) 53651* significand: Other Builtins. (line 6) 53652* significandf: Other Builtins. (line 6) 53653* significandl: Other Builtins. (line 6) 53654* simple constraints: Simple Constraints. (line 6) 53655* sin: Other Builtins. (line 6) 53656* sincos: Other Builtins. (line 6) 53657* sincosf: Other Builtins. (line 6) 53658* sincosl: Other Builtins. (line 6) 53659* sinf: Other Builtins. (line 6) 53660* sinh: Other Builtins. (line 6) 53661* sinhf: Other Builtins. (line 6) 53662* sinhl: Other Builtins. (line 6) 53663* sinl: Other Builtins. (line 6) 53664* sizeof: Typeof. (line 6) 53665* smaller data references: M32R/D Options. (line 57) 53666* smaller data references (PowerPC): RS/6000 and PowerPC Options. 53667 (line 745) 53668* snprintf: Other Builtins. (line 6) 53669* Solaris 2 options: Solaris 2 Options. (line 6) 53670* sp_switch attribute: Function Attributes. 53671 (line 1343) 53672* SPARC options: SPARC Options. (line 6) 53673* Spec Files: Spec Files. (line 6) 53674* specified registers: Explicit Reg Vars. (line 6) 53675* specifying compiler version and target machine: Target Options. 53676 (line 6) 53677* specifying hardware config: Submodel Options. (line 6) 53678* specifying machine version: Target Options. (line 6) 53679* specifying registers for local variables: Local Reg Vars. (line 6) 53680* speed of compilation: Precompiled Headers. 53681 (line 6) 53682* sprintf: Other Builtins. (line 6) 53683* SPU options: SPU Options. (line 6) 53684* sqrt: Other Builtins. (line 6) 53685* sqrtf: Other Builtins. (line 6) 53686* sqrtl: Other Builtins. (line 6) 53687* sscanf: Other Builtins. (line 6) 53688* sscanf, and constant strings: Incompatibilities. (line 17) 53689* sseregparm attribute: Function Attributes. 53690 (line 1223) 53691* statements inside expressions: Statement Exprs. (line 6) 53692* static data in C++, declaring and defining: Static Definitions. 53693 (line 6) 53694* stpcpy: Other Builtins. (line 6) 53695* stpncpy: Other Builtins. (line 6) 53696* strcasecmp: Other Builtins. (line 6) 53697* strcat: Other Builtins. (line 6) 53698* strchr: Other Builtins. (line 6) 53699* strcmp: Other Builtins. (line 6) 53700* strcpy: Other Builtins. (line 6) 53701* strcspn: Other Builtins. (line 6) 53702* strdup: Other Builtins. (line 6) 53703* strfmon: Other Builtins. (line 6) 53704* strftime: Other Builtins. (line 6) 53705* string constants: Incompatibilities. (line 9) 53706* strlen: Other Builtins. (line 6) 53707* strncasecmp: Other Builtins. (line 6) 53708* strncat: Other Builtins. (line 6) 53709* strncmp: Other Builtins. (line 6) 53710* strncpy: Other Builtins. (line 6) 53711* strndup: Other Builtins. (line 6) 53712* strpbrk: Other Builtins. (line 6) 53713* strrchr: Other Builtins. (line 6) 53714* strspn: Other Builtins. (line 6) 53715* strstr: Other Builtins. (line 6) 53716* struct: Unnamed Fields. (line 6) 53717* struct __htm_tdb: S/390 System z Built-in Functions. 53718 (line 54) 53719* structures: Incompatibilities. (line 146) 53720* structures, constructor expression: Compound Literals. (line 6) 53721* submodel options: Submodel Options. (line 6) 53722* subscripting: Subscripting. (line 6) 53723* subscripting and function values: Subscripting. (line 6) 53724* suffixes for C++ source: Invoking G++. (line 6) 53725* SUNPRO_DEPENDENCIES: Environment Variables. 53726 (line 172) 53727* suppressing warnings: Warning Options. (line 6) 53728* surprises in C++: C++ Misunderstandings. 53729 (line 6) 53730* syntax checking: Warning Options. (line 13) 53731* syscall_linkage attribute: Function Attributes. 53732 (line 1358) 53733* system headers, warnings from: Warning Options. (line 843) 53734* sysv_abi attribute: Function Attributes. 53735 (line 881) 53736* tan: Other Builtins. (line 6) 53737* tanf: Other Builtins. (line 6) 53738* tanh: Other Builtins. (line 6) 53739* tanhf: Other Builtins. (line 6) 53740* tanhl: Other Builtins. (line 6) 53741* tanl: Other Builtins. (line 6) 53742* target function attribute: Function Attributes. 53743 (line 1365) 53744* target machine, specifying: Target Options. (line 6) 53745* target options: Target Options. (line 6) 53746* target("abm") attribute: Function Attributes. 53747 (line 1391) 53748* target("aes") attribute: Function Attributes. 53749 (line 1396) 53750* target("align-stringops") attribute: Function Attributes. 53751 (line 1490) 53752* target("altivec") attribute: Function Attributes. 53753 (line 1516) 53754* target("arch=ARCH") attribute: Function Attributes. 53755 (line 1499) 53756* target("avoid-indexed-addresses") attribute: Function Attributes. 53757 (line 1637) 53758* target("cld") attribute: Function Attributes. 53759 (line 1461) 53760* target("cmpb") attribute: Function Attributes. 53761 (line 1522) 53762* target("cpu=CPU") attribute: Function Attributes. 53763 (line 1652) 53764* target("default") attribute: Function Attributes. 53765 (line 1399) 53766* target("dlmzb") attribute: Function Attributes. 53767 (line 1528) 53768* target("fancy-math-387") attribute: Function Attributes. 53769 (line 1465) 53770* target("fma4") attribute: Function Attributes. 53771 (line 1445) 53772* target("fpmath=FPMATH") attribute: Function Attributes. 53773 (line 1507) 53774* target("fprnd") attribute: Function Attributes. 53775 (line 1535) 53776* target("friz") attribute: Function Attributes. 53777 (line 1628) 53778* target("fused-madd") attribute: Function Attributes. 53779 (line 1470) 53780* target("hard-dfp") attribute: Function Attributes. 53781 (line 1541) 53782* target("ieee-fp") attribute: Function Attributes. 53783 (line 1475) 53784* target("inline-all-stringops") attribute: Function Attributes. 53785 (line 1480) 53786* target("inline-stringops-dynamically") attribute: Function Attributes. 53787 (line 1484) 53788* target("isel") attribute: Function Attributes. 53789 (line 1547) 53790* target("longcall") attribute: Function Attributes. 53791 (line 1647) 53792* target("lwp") attribute: Function Attributes. 53793 (line 1453) 53794* target("mfcrf") attribute: Function Attributes. 53795 (line 1551) 53796* target("mfpgpr") attribute: Function Attributes. 53797 (line 1558) 53798* target("mmx") attribute: Function Attributes. 53799 (line 1404) 53800* target("mulhw") attribute: Function Attributes. 53801 (line 1565) 53802* target("multiple") attribute: Function Attributes. 53803 (line 1572) 53804* target("paired") attribute: Function Attributes. 53805 (line 1642) 53806* target("pclmul") attribute: Function Attributes. 53807 (line 1408) 53808* target("popcnt") attribute: Function Attributes. 53809 (line 1412) 53810* target("popcntb") attribute: Function Attributes. 53811 (line 1583) 53812* target("popcntd") attribute: Function Attributes. 53813 (line 1590) 53814* target("powerpc-gfxopt") attribute: Function Attributes. 53815 (line 1596) 53816* target("powerpc-gpopt") attribute: Function Attributes. 53817 (line 1602) 53818* target("recip") attribute: Function Attributes. 53819 (line 1494) 53820* target("recip-precision") attribute: Function Attributes. 53821 (line 1608) 53822* target("sse") attribute: Function Attributes. 53823 (line 1416) 53824* target("sse2") attribute: Function Attributes. 53825 (line 1420) 53826* target("sse3") attribute: Function Attributes. 53827 (line 1424) 53828* target("sse4") attribute: Function Attributes. 53829 (line 1428) 53830* target("sse4.1") attribute: Function Attributes. 53831 (line 1433) 53832* target("sse4.2") attribute: Function Attributes. 53833 (line 1437) 53834* target("sse4a") attribute: Function Attributes. 53835 (line 1441) 53836* target("ssse3") attribute: Function Attributes. 53837 (line 1457) 53838* target("string") attribute: Function Attributes. 53839 (line 1614) 53840* target("tune=TUNE") attribute: Function Attributes. 53841 (line 1503) 53842* target("update") attribute: Function Attributes. 53843 (line 1577) 53844* target("vsx") attribute: Function Attributes. 53845 (line 1620) 53846* target("xop") attribute: Function Attributes. 53847 (line 1449) 53848* TC1: Standards. (line 13) 53849* TC2: Standards. (line 13) 53850* TC3: Standards. (line 13) 53851* Technical Corrigenda: Standards. (line 13) 53852* Technical Corrigendum 1: Standards. (line 13) 53853* Technical Corrigendum 2: Standards. (line 13) 53854* Technical Corrigendum 3: Standards. (line 13) 53855* template instantiation: Template Instantiation. 53856 (line 6) 53857* temporaries, lifetime of: Temporaries. (line 6) 53858* tgamma: Other Builtins. (line 6) 53859* tgammaf: Other Builtins. (line 6) 53860* tgammal: Other Builtins. (line 6) 53861* Thread-Local Storage: Thread-Local. (line 6) 53862* thunks: Nested Functions. (line 6) 53863* TILE-Gx options: TILE-Gx Options. (line 6) 53864* TILEPro options: TILEPro Options. (line 6) 53865* tiny data section on the H8/300H and H8S: Function Attributes. 53866 (line 1681) 53867* TLS: Thread-Local. (line 6) 53868* tls_model attribute: Variable Attributes. 53869 (line 235) 53870* TMPDIR: Environment Variables. 53871 (line 45) 53872* toascii: Other Builtins. (line 6) 53873* tolower: Other Builtins. (line 6) 53874* toupper: Other Builtins. (line 6) 53875* towlower: Other Builtins. (line 6) 53876* towupper: Other Builtins. (line 6) 53877* traditional C language: C Dialect Options. (line 307) 53878* trap_exit attribute: Function Attributes. 53879 (line 1688) 53880* trapa_handler attribute: Function Attributes. 53881 (line 1693) 53882* trunc: Other Builtins. (line 6) 53883* truncf: Other Builtins. (line 6) 53884* truncl: Other Builtins. (line 6) 53885* two-stage name lookup: Name lookup. (line 6) 53886* type alignment: Alignment. (line 6) 53887* type attributes: Type Attributes. (line 6) 53888* type_info: Vague Linkage. (line 42) 53889* typedef names as function parameters: Incompatibilities. (line 97) 53890* typeof: Typeof. (line 6) 53891* UHK fixed-suffix: Fixed-Point. (line 6) 53892* uhk fixed-suffix: Fixed-Point. (line 6) 53893* UHR fixed-suffix: Fixed-Point. (line 6) 53894* uhr fixed-suffix: Fixed-Point. (line 6) 53895* UK fixed-suffix: Fixed-Point. (line 6) 53896* uk fixed-suffix: Fixed-Point. (line 6) 53897* ULK fixed-suffix: Fixed-Point. (line 6) 53898* ulk fixed-suffix: Fixed-Point. (line 6) 53899* ULL integer suffix: Long Long. (line 6) 53900* ULLK fixed-suffix: Fixed-Point. (line 6) 53901* ullk fixed-suffix: Fixed-Point. (line 6) 53902* ULLR fixed-suffix: Fixed-Point. (line 6) 53903* ullr fixed-suffix: Fixed-Point. (line 6) 53904* ULR fixed-suffix: Fixed-Point. (line 6) 53905* ulr fixed-suffix: Fixed-Point. (line 6) 53906* undefined behavior: Bug Criteria. (line 17) 53907* undefined function value: Bug Criteria. (line 17) 53908* underscores in variables in macros: Typeof. (line 46) 53909* union: Unnamed Fields. (line 6) 53910* union, casting to a: Cast to Union. (line 6) 53911* unions: Incompatibilities. (line 146) 53912* unknown pragmas, warning: Warning Options. (line 691) 53913* unresolved references and -nodefaultlibs: Link Options. (line 85) 53914* unresolved references and -nostdlib: Link Options. (line 85) 53915* unused attribute.: Function Attributes. 53916 (line 1697) 53917* UR fixed-suffix: Fixed-Point. (line 6) 53918* ur fixed-suffix: Fixed-Point. (line 6) 53919* use_debug_exception_return attribute: Function Attributes. 53920 (line 712) 53921* use_shadow_register_set attribute: Function Attributes. 53922 (line 703) 53923* used attribute.: Function Attributes. 53924 (line 1702) 53925* User stack pointer in interrupts on the Blackfin: Function Attributes. 53926 (line 754) 53927* V in constraint: Simple Constraints. (line 43) 53928* V850 Options: V850 Options. (line 6) 53929* vague linkage: Vague Linkage. (line 6) 53930* value after longjmp: Global Reg Vars. (line 65) 53931* variable addressability on the IA-64: Function Attributes. 53932 (line 853) 53933* variable addressability on the M32R/D: Variable Attributes. 53934 (line 374) 53935* variable alignment: Alignment. (line 6) 53936* variable attributes: Variable Attributes. 53937 (line 6) 53938* variable number of arguments: Variadic Macros. (line 6) 53939* variable-length array scope: Variable Length. (line 22) 53940* variable-length arrays: Variable Length. (line 6) 53941* variables in specified registers: Explicit Reg Vars. (line 6) 53942* variables, local, in macros: Typeof. (line 46) 53943* variadic macros: Variadic Macros. (line 6) 53944* VAX options: VAX Options. (line 6) 53945* version_id attribute: Function Attributes. 53946 (line 1712) 53947* vfprintf: Other Builtins. (line 6) 53948* vfscanf: Other Builtins. (line 6) 53949* visibility attribute: Function Attributes. 53950 (line 1722) 53951* VLAs: Variable Length. (line 6) 53952* vliw attribute: Function Attributes. 53953 (line 1815) 53954* void pointers, arithmetic: Pointer Arith. (line 6) 53955* void, size of pointer to: Pointer Arith. (line 6) 53956* volatile access <1>: C++ Volatiles. (line 6) 53957* volatile access: Volatiles. (line 6) 53958* volatile applied to function: Function Attributes. 53959 (line 6) 53960* volatile read <1>: C++ Volatiles. (line 6) 53961* volatile read: Volatiles. (line 6) 53962* volatile write <1>: C++ Volatiles. (line 6) 53963* volatile write: Volatiles. (line 6) 53964* vprintf: Other Builtins. (line 6) 53965* vscanf: Other Builtins. (line 6) 53966* vsnprintf: Other Builtins. (line 6) 53967* vsprintf: Other Builtins. (line 6) 53968* vsscanf: Other Builtins. (line 6) 53969* vtable: Vague Linkage. (line 27) 53970* VxWorks Options: VxWorks Options. (line 6) 53971* W floating point suffix: Floating Types. (line 6) 53972* w floating point suffix: Floating Types. (line 6) 53973* warn_unused_result attribute: Function Attributes. 53974 (line 1821) 53975* warning for comparison of signed and unsigned values: Warning Options. 53976 (line 1156) 53977* warning for overloaded virtual function: C++ Dialect Options. 53978 (line 618) 53979* warning for reordering of member initializers: C++ Dialect Options. 53980 (line 533) 53981* warning for unknown pragmas: Warning Options. (line 691) 53982* warning function attribute: Function Attributes. 53983 (line 166) 53984* warning messages: Warning Options. (line 6) 53985* warnings from system headers: Warning Options. (line 843) 53986* warnings vs errors: Warnings and Errors. 53987 (line 6) 53988* weak attribute: Function Attributes. 53989 (line 1838) 53990* weakref attribute: Function Attributes. 53991 (line 1847) 53992* whitespace: Incompatibilities. (line 112) 53993* X in constraint: Simple Constraints. (line 124) 53994* X3.159-1989: Standards. (line 13) 53995* x86-64 options: x86-64 Options. (line 6) 53996* x86-64 Options: i386 and x86-64 Options. 53997 (line 6) 53998* Xstormy16 Options: Xstormy16 Options. (line 6) 53999* Xtensa Options: Xtensa Options. (line 6) 54000* y0: Other Builtins. (line 6) 54001* y0f: Other Builtins. (line 6) 54002* y0l: Other Builtins. (line 6) 54003* y1: Other Builtins. (line 6) 54004* y1f: Other Builtins. (line 6) 54005* y1l: Other Builtins. (line 6) 54006* yn: Other Builtins. (line 6) 54007* ynf: Other Builtins. (line 6) 54008* ynl: Other Builtins. (line 6) 54009* zero-length arrays: Zero Length. (line 6) 54010* zero-size structures: Empty Structures. (line 6) 54011* zSeries options: zSeries Options. (line 6) 54012 54013 54014 54015Tag Table: 54016Node: Top1934 54017Node: G++ and GCC3700 54018Node: Standards5769 54019Node: Invoking GCC17947 54020Node: Option Summary21692 54021Node: Overall Options61903 54022Node: Invoking G++76141 54023Node: C Dialect Options77664 54024Node: C++ Dialect Options93503 54025Node: Objective-C and Objective-C++ Dialect Options121605 54026Node: Language Independent Options132113 54027Node: Warning Options134312 54028Node: Debugging Options203513 54029Node: Optimize Options260904 54030Ref: Type-punning319573 54031Node: Preprocessor Options397782 54032Ref: Wtrigraphs402564 54033Ref: dashMF407312 54034Ref: fdollars-in-identifiers418176 54035Node: Assembler Options428443 54036Node: Link Options429135 54037Ref: Link Options-Footnote-1440379 54038Node: Directory Options440713 54039Node: Spec Files447272 54040Node: Target Options468670 54041Node: Submodel Options469069 54042Node: AArch64 Options470762 54043Node: Adapteva Epiphany Options474919 54044Node: ARM Options480870 54045Node: AVR Options496732 54046Node: Blackfin Options516850 54047Node: C6X Options524865 54048Node: CRIS Options526408 54049Node: CR16 Options530152 54050Node: Darwin Options531059 54051Node: DEC Alpha Options538496 54052Node: FR30 Options550084 54053Node: FRV Options550649 54054Node: GNU/Linux Options557368 54055Node: H8/300 Options558629 54056Node: HPPA Options560079 54057Node: i386 and x86-64 Options569563 54058Node: i386 and x86-64 Windows Options606649 54059Node: IA-64 Options609505 54060Node: LM32 Options617569 54061Node: M32C Options618093 54062Node: M32R/D Options619367 54063Node: M680x0 Options622913 54064Node: MCore Options636959 54065Node: MeP Options638462 54066Node: MicroBlaze Options642421 54067Node: MIPS Options645217 54068Node: MMIX Options674117 54069Node: MN10300 Options676599 54070Node: Moxie Options679142 54071Node: PDP-11 Options679513 54072Node: picoChip Options681205 54073Node: PowerPC Options683346 54074Node: RL78 Options683567 54075Node: RS/6000 and PowerPC Options684229 54076Node: RX Options723353 54077Node: S/390 and zSeries Options730687 54078Node: Score Options739237 54079Node: SH Options740079 54080Node: Solaris 2 Options760888 54081Node: SPARC Options762119 54082Node: SPU Options775400 54083Node: System V Options780337 54084Node: TILE-Gx Options781163 54085Node: TILEPro Options782087 54086Node: V850 Options782591 54087Node: VAX Options789304 54088Node: VMS Options789839 54089Node: VxWorks Options790650 54090Node: x86-64 Options791805 54091Node: Xstormy16 Options792023 54092Node: Xtensa Options792312 54093Node: zSeries Options796623 54094Node: Code Gen Options796819 54095Node: Environment Variables827372 54096Node: Precompiled Headers835373 54097Node: C Implementation841381 54098Node: Translation implementation843050 54099Node: Environment implementation843624 54100Node: Identifiers implementation844174 54101Node: Characters implementation845228 54102Node: Integers implementation848034 54103Node: Floating point implementation849859 54104Node: Arrays and pointers implementation852788 54105Ref: Arrays and pointers implementation-Footnote-1854223 54106Node: Hints implementation854347 54107Node: Structures unions enumerations and bit-fields implementation855813 54108Node: Qualifiers implementation857799 54109Node: Declarators implementation859571 54110Node: Statements implementation859913 54111Node: Preprocessing directives implementation860240 54112Node: Library functions implementation862345 54113Node: Architecture implementation862985 54114Node: Locale-specific behavior implementation863688 54115Node: C++ Implementation863993 54116Node: Conditionally-supported behavior865275 54117Node: Exception handling865785 54118Node: C Extensions866194 54119Node: Statement Exprs871188 54120Node: Local Labels875647 54121Node: Labels as Values878620 54122Ref: Labels as Values-Footnote-1881145 54123Node: Nested Functions881328 54124Node: Constructing Calls885286 54125Node: Typeof890004 54126Node: Conditionals893312 54127Node: __int128894202 54128Node: Long Long894726 54129Node: Complex896202 54130Node: Floating Types898791 54131Node: Half-Precision899919 54132Node: Decimal Float902101 54133Node: Hex Floats903956 54134Node: Fixed-Point904992 54135Node: Named Address Spaces908274 54136Ref: AVR Named Address Spaces908955 54137Node: Zero Length914161 54138Node: Empty Structures917448 54139Node: Variable Length917854 54140Node: Variadic Macros920530 54141Node: Escaped Newlines922908 54142Node: Subscripting923747 54143Node: Pointer Arith924473 54144Node: Initializers925041 54145Node: Compound Literals925537 54146Node: Designated Inits928898 54147Node: Case Ranges932530 54148Node: Cast to Union933211 54149Node: Mixed Declarations934302 54150Node: Function Attributes934812 54151Node: Attribute Syntax1021368 54152Node: Function Prototypes1031759 54153Node: C++ Comments1033540 54154Node: Dollar Signs1034059 54155Node: Character Escapes1034524 54156Node: Variable Attributes1034818 54157Ref: AVR Variable Attributes1048485 54158Ref: MeP Variable Attributes1051146 54159Ref: i386 Variable Attributes1053092 54160Node: Type Attributes1058756 54161Ref: MeP Type Attributes1072644 54162Ref: i386 Type Attributes1072918 54163Ref: PowerPC Type Attributes1073609 54164Ref: SPU Type Attributes1074471 54165Node: Alignment1074762 54166Node: Inline1076132 54167Node: Volatiles1081107 54168Node: Extended Asm1083989 54169Ref: Example of asm with clobbered asm reg1089893 54170Ref: Extended asm with goto1099600 54171Node: Constraints1107451 54172Node: Simple Constraints1108535 54173Node: Multi-Alternative1115856 54174Node: Modifiers1117573 54175Node: Machine Constraints1120587 54176Node: Asm Labels1171909 54177Node: Explicit Reg Vars1173585 54178Node: Global Reg Vars1175188 54179Node: Local Reg Vars1179684 54180Node: Alternate Keywords1182101 54181Node: Incomplete Enums1183587 54182Node: Function Names1184343 54183Node: Return Address1186504 54184Node: Vector Extensions1190011 54185Node: Offsetof1196186 54186Node: __sync Builtins1196999 54187Node: __atomic Builtins1202469 54188Node: x86 specific memory model extensions for transactional memory1214108 54189Node: Object Size Checking1215370 54190Node: Other Builtins1220859 54191Node: Target Builtins1250003 54192Node: Alpha Built-in Functions1251242 54193Node: ARM iWMMXt Built-in Functions1254251 54194Node: ARM NEON Intrinsics1261231 54195Node: AVR Built-in Functions1469650 54196Node: Blackfin Built-in Functions1472720 54197Node: FR-V Built-in Functions1473337 54198Node: Argument Types1474196 54199Node: Directly-mapped Integer Functions1475948 54200Node: Directly-mapped Media Functions1477030 54201Node: Raw read/write Functions1484062 54202Node: Other Built-in Functions1484974 54203Node: X86 Built-in Functions1486158 54204Node: X86 transactional memory intrinsics1545108 54205Node: MIPS DSP Built-in Functions1547782 54206Node: MIPS Paired-Single Support1560290 54207Node: MIPS Loongson Built-in Functions1561789 54208Node: Paired-Single Arithmetic1568309 54209Node: Paired-Single Built-in Functions1569257 54210Node: MIPS-3D Built-in Functions1571924 54211Node: Other MIPS Built-in Functions1577301 54212Node: picoChip Built-in Functions1577825 54213Node: PowerPC Built-in Functions1579174 54214Node: PowerPC AltiVec/VSX Built-in Functions1582882 54215Node: PowerPC Hardware Transactional Memory Built-in Functions1722673 54216Node: RX Built-in Functions1729646 54217Node: S/390 System z Built-in Functions1733679 54218Node: SH Built-in Functions1738916 54219Node: SPARC VIS Built-in Functions1740309 54220Node: SPU Built-in Functions1745913 54221Node: TI C6X Built-in Functions1747729 54222Node: TILE-Gx Built-in Functions1748753 54223Node: TILEPro Built-in Functions1749870 54224Node: Target Format Checks1750937 54225Node: Solaris Format Checks1751369 54226Node: Darwin Format Checks1751795 54227Node: Pragmas1752613 54228Node: ARM Pragmas1753323 54229Node: M32C Pragmas1753926 54230Node: MeP Pragmas1755000 54231Node: RS/6000 and PowerPC Pragmas1757069 54232Node: Darwin Pragmas1757810 54233Node: Solaris Pragmas1758877 54234Node: Symbol-Renaming Pragmas1760038 54235Node: Structure-Packing Pragmas1761592 54236Node: Weak Pragmas1763242 54237Node: Diagnostic Pragmas1763976 54238Node: Visibility Pragmas1767083 54239Node: Push/Pop Macro Pragmas1767835 54240Node: Function Specific Option Pragmas1768807 54241Node: Unnamed Fields1771064 54242Node: Thread-Local1773292 54243Node: C99 Thread-Local Edits1775397 54244Node: C++98 Thread-Local Edits1777409 54245Node: Binary constants1780853 54246Node: C++ Extensions1781524 54247Node: C++ Volatiles1783235 54248Node: Restricted Pointers1785583 54249Node: Vague Linkage1787174 54250Node: C++ Interface1790798 54251Ref: C++ Interface-Footnote-11795084 54252Node: Template Instantiation1795220 54253Node: Bound member functions1801807 54254Node: C++ Attributes1803339 54255Node: Function Multiversioning1805995 54256Node: Namespace Association1807810 54257Node: Type Traits1809190 54258Node: Java Exceptions1815678 54259Node: Deprecated Features1817068 54260Node: Backwards Compatibility1820033 54261Node: Objective-C1821385 54262Node: GNU Objective-C runtime API1821994 54263Node: Modern GNU Objective-C runtime API1823001 54264Node: Traditional GNU Objective-C runtime API1825438 54265Node: Executing code before main1826166 54266Node: What you can and what you cannot do in +load1828904 54267Node: Type encoding1831294 54268Node: Legacy type encoding1836370 54269Node: @encode1837461 54270Node: Method signatures1838002 54271Node: Garbage Collection1839997 54272Node: Constant string objects1842686 54273Node: compatibility_alias1845194 54274Node: Exceptions1845916 54275Node: Synchronization1848627 54276Node: Fast enumeration1849811 54277Node: Using fast enumeration1850123 54278Node: c99-like fast enumeration syntax1851334 54279Node: Fast enumeration details1852037 54280Node: Fast enumeration protocol1854378 54281Node: Messaging with the GNU Objective-C runtime1857530 54282Node: Dynamically registering methods1858901 54283Node: Forwarding hook1860592 54284Node: Compatibility1863632 54285Node: Gcov1870199 54286Node: Gcov Intro1870732 54287Node: Invoking Gcov1873450 54288Node: Gcov and Optimization1886361 54289Node: Gcov Data Files1889361 54290Node: Cross-profiling1890756 54291Node: Trouble1892607 54292Node: Actual Bugs1894019 54293Node: Interoperation1894466 54294Node: Incompatibilities1901358 54295Node: Fixed Headers1909509 54296Node: Standard Libraries1911172 54297Node: Disappointments1912544 54298Node: C++ Misunderstandings1916902 54299Node: Static Definitions1917713 54300Node: Name lookup1918766 54301Ref: Name lookup-Footnote-11923544 54302Node: Temporaries1923731 54303Node: Copy Assignment1925707 54304Node: Non-bugs1927514 54305Node: Warnings and Errors1938021 54306Node: Bugs1939783 54307Node: Bug Criteria1940347 54308Node: Bug Reporting1942557 54309Node: Service1942778 54310Node: Contributing1943597 54311Node: Funding1944337 54312Node: GNU Project1946826 54313Node: Copying1947472 54314Node: GNU Free Documentation License1985000 54315Node: Contributors2010137 54316Node: Option Index2047539 54317Node: Keyword Index2242297 54318 54319End Tag Table 54320