1This is doc/gcc.info, produced by makeinfo version 4.13 from 2/scratch/jwlemke/2011.09-arm-eabi-lite/src/gcc-4.6-2011.09/gcc/doc/gcc.texi. 3 4Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 51999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 6Free Software Foundation, Inc. 7 8 Permission is granted to copy, distribute and/or modify this document 9under the terms of the GNU Free Documentation License, Version 1.3 or 10any later version published by the Free Software Foundation; with the 11Invariant Sections being "Funding Free Software", the Front-Cover Texts 12being (a) (see below), and with the Back-Cover Texts being (b) (see 13below). A copy of the license is included in the section entitled "GNU 14Free Documentation License". 15 16 (a) The FSF's Front-Cover Text is: 17 18 A GNU Manual 19 20 (b) The FSF's Back-Cover Text is: 21 22 You have freedom to copy and modify this GNU Manual, like GNU 23software. Copies published by the Free Software Foundation raise 24funds for GNU development. 25 26INFO-DIR-SECTION Software development 27START-INFO-DIR-ENTRY 28* gcc: (gcc). The GNU Compiler Collection. 29* g++: (gcc). The GNU C++ compiler. 30END-INFO-DIR-ENTRY 31 This file documents the use of the GNU compilers. 32 33 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 341999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 35Free Software Foundation, Inc. 36 37 Permission is granted to copy, distribute and/or modify this document 38under the terms of the GNU Free Documentation License, Version 1.3 or 39any later version published by the Free Software Foundation; with the 40Invariant Sections being "Funding Free Software", the Front-Cover Texts 41being (a) (see below), and with the Back-Cover Texts being (b) (see 42below). A copy of the license is included in the section entitled "GNU 43Free Documentation License". 44 45 (a) The FSF's Front-Cover Text is: 46 47 A GNU Manual 48 49 (b) The FSF's Back-Cover Text is: 50 51 You have freedom to copy and modify this GNU Manual, like GNU 52software. Copies published by the Free Software Foundation raise 53funds for GNU development. 54 55 56 57File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 58 59Introduction 60************ 61 62This manual documents how to use the GNU compilers, as well as their 63features and incompatibilities, and how to report bugs. It corresponds 64to the compilers (Sourcery CodeBench Lite 2011.09-69) version 654.6.1. The internals of the GNU compilers, including how to port them 66to new targets and some information about how to write front ends for 67new languages, are documented in a separate manual. *Note 68Introduction: (gccint)Top. 69 70* Menu: 71 72* G++ and GCC:: You can compile C or C++ programs. 73* Standards:: Language standards supported by GCC. 74* Invoking GCC:: Command options supported by `gcc'. 75* C Implementation:: How GCC implements the ISO C specification. 76* C Extensions:: GNU extensions to the C language family. 77* C++ Implementation:: How GCC implements the ISO C++ specification. 78* C++ Extensions:: GNU extensions to the C++ language. 79* Objective-C:: GNU Objective-C runtime features. 80* Compatibility:: Binary Compatibility 81* Gcov:: `gcov'---a test coverage program. 82* Trouble:: If you have trouble using GCC. 83* Bugs:: How, why and where to report bugs. 84* Service:: How to find suppliers of support for GCC. 85* Contributing:: How to contribute to testing and developing GCC. 86 87* Funding:: How to help assure funding for free software. 88* GNU Project:: The GNU Project and GNU/Linux. 89 90* Copying:: GNU General Public License says 91 how you can copy and share GCC. 92* GNU Free Documentation License:: How you can copy and share this manual. 93* Contributors:: People who have contributed to GCC. 94 95* Option Index:: Index to command line options. 96* Keyword Index:: Index of concepts and symbol names. 97 98 99File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top 100 1011 Programming Languages Supported by GCC 102**************************************** 103 104GCC stands for "GNU Compiler Collection". GCC is an integrated 105distribution of compilers for several major programming languages. 106These languages currently include C, C++, Objective-C, Objective-C++, 107Java, Fortran, Ada, and Go. 108 109 The abbreviation "GCC" has multiple meanings in common use. The 110current official meaning is "GNU Compiler Collection", which refers 111generically to the complete suite of tools. The name historically stood 112for "GNU C Compiler", and this usage is still common when the emphasis 113is on compiling C programs. Finally, the name is also used when 114speaking of the "language-independent" component of GCC: code shared 115among the compilers for all supported languages. 116 117 The language-independent component of GCC includes the majority of the 118optimizers, as well as the "back ends" that generate machine code for 119various processors. 120 121 The part of a compiler that is specific to a particular language is 122called the "front end". In addition to the front ends that are 123integrated components of GCC, there are several other front ends that 124are maintained separately. These support languages such as Pascal, 125Mercury, and COBOL. To use these, they must be built together with GCC 126proper. 127 128 Most of the compilers for languages other than C have their own names. 129The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 130talk about compiling one of those languages, we might refer to that 131compiler by its own name, or as GCC. Either is correct. 132 133 Historically, compilers for many languages, including C++ and Fortran, 134have been implemented as "preprocessors" which emit another high level 135language such as C. None of the compilers included in GCC are 136implemented this way; they all generate machine code directly. This 137sort of preprocessor should not be confused with the "C preprocessor", 138which is an integral feature of the C, C++, Objective-C and 139Objective-C++ languages. 140 141 142File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 143 1442 Language Standards Supported by GCC 145************************************* 146 147For each language compiled by GCC for which there is a standard, GCC 148attempts to follow one or more versions of that standard, possibly with 149some exceptions, and possibly with some extensions. 150 1512.1 C language 152============== 153 154GCC supports three versions of the C standard, although support for the 155most recent version is not yet complete. 156 157 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 158published in 1990. This standard was ratified as an ISO standard 159(ISO/IEC 9899:1990) later in 1990. There were no technical differences 160between these publications, although the sections of the ANSI standard 161were renumbered and became clauses in the ISO standard. This standard, 162in both its forms, is commonly known as "C89", or occasionally as 163"C90", from the dates of ratification. The ANSI standard, but not the 164ISO standard, also came with a Rationale document. To select this 165standard in GCC, use one of the options `-ansi', `-std=c90' or 166`-std=iso9899:1990'; to obtain all the diagnostics required by the 167standard, you should also specify `-pedantic' (or `-pedantic-errors' if 168you want them to be errors rather than warnings). *Note Options 169Controlling C Dialect: C Dialect Options. 170 171 Errors in the 1990 ISO C standard were corrected in two Technical 172Corrigenda published in 1994 and 1996. GCC does not support the 173uncorrected version. 174 175 An amendment to the 1990 standard was published in 1995. This 176amendment added digraphs and `__STDC_VERSION__' to the language, but 177otherwise concerned the library. This amendment is commonly known as 178"AMD1"; the amended standard is sometimes known as "C94" or "C95". To 179select this standard in GCC, use the option `-std=iso9899:199409' 180(with, as for other standard versions, `-pedantic' to receive all 181required diagnostics). 182 183 A new edition of the ISO C standard was published in 1999 as ISO/IEC 1849899:1999, and is commonly known as "C99". GCC has incomplete support 185for this standard version; see 186`http://gcc.gnu.org/gcc-4.6/c99status.html' for details. To select this 187standard, use `-std=c99' or `-std=iso9899:1999'. (While in 188development, drafts of this standard version were referred to as "C9X".) 189 190 Errors in the 1999 ISO C standard were corrected in three Technical 191Corrigenda published in 2001, 2004 and 2007. GCC does not support the 192uncorrected version. 193 194 A fourth version of the C standard, known as "C1X", is under 195development; GCC has limited preliminary support for parts of this 196standard, enabled with `-std=c1x'. 197 198 By default, GCC provides some extensions to the C language that on 199rare occasions conflict with the C standard. *Note Extensions to the C 200Language Family: C Extensions. Use of the `-std' options listed above 201will disable these extensions where they conflict with the C standard 202version selected. You may also select an extended version of the C 203language explicitly with `-std=gnu90' (for C90 with GNU extensions), 204`-std=gnu99' (for C99 with GNU extensions) or `-std=gnu1x' (for C1X 205with GNU extensions). The default, if no C language dialect options 206are given, is `-std=gnu90'; this will change to `-std=gnu99' in some 207future release when the C99 support is complete. Some features that 208are part of the C99 standard are accepted as extensions in C90 mode. 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>'; and in C99, 216also those in `<stdbool.h>' and `<stdint.h>'. In addition, complex 217types, added in C99, are not required for freestanding implementations. 218The standard also defines two environments for programs, a 219"freestanding environment", required of all implementations and which 220may not have library facilities beyond those required of freestanding 221implementations, where the handling of program startup and termination 222are implementation-defined, and a "hosted environment", which is not 223required, in which all the library facilities are provided and startup 224is through a function `int main (void)' or `int main (int, char *[])'. 225An OS kernel would be a freestanding environment; a program using the 226facilities of an operating system would normally be in a hosted 227implementation. 228 229 GCC aims towards being usable as a conforming freestanding 230implementation, or as the compiler for a conforming hosted 231implementation. By default, it will act as the compiler for a hosted 232implementation, defining `__STDC_HOSTED__' as `1' and presuming that 233when the names of ISO C functions are used, they have the semantics 234defined in the standard. To make it act as a conforming freestanding 235implementation for a freestanding environment, use the option 236`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 237make assumptions about the meanings of function names from the standard 238library, with exceptions noted below. To build an OS kernel, you may 239well still need to make your own arrangements for linking and startup. 240*Note Options Controlling C Dialect: C Dialect Options. 241 242 GCC does not provide the library facilities required only of hosted 243implementations, nor yet all the facilities required by C99 of 244freestanding implementations; to use the facilities of a hosted 245environment, you will need to find them elsewhere (for example, in the 246GNU C library). *Note Standard Libraries: Standard Libraries. 247 248 Most of the compiler support routines used by GCC are present in 249`libgcc', but there are a few exceptions. GCC requires the 250freestanding environment provide `memcpy', `memmove', `memset' and 251`memcmp'. Finally, if `__builtin_trap' is used, and the target does 252not implement the `trap' pattern, then GCC will emit a call to `abort'. 253 254 For references to Technical Corrigenda, Rationale documents and 255information concerning the history of C that is available online, see 256`http://gcc.gnu.org/readings.html' 257 2582.2 C++ language 259================ 260 261GCC supports the ISO C++ standard (1998) and contains experimental 262support for the upcoming ISO C++ standard (200x). 263 264 The original ISO C++ standard was published as the ISO standard 265(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 2662003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and 267C++03, respectively. GCC implements the majority of C++98 (`export' is 268a notable exception) and most of the changes in C++03. To select this 269standard in GCC, use one of the options `-ansi' or `-std=c++98'; to 270obtain all the diagnostics required by the standard, you should also 271specify `-pedantic' (or `-pedantic-errors' if you want them to be 272errors rather than warnings). 273 274 The ISO C++ committee is working on a new ISO C++ standard, dubbed 275C++0x, that is intended to be published by 2009. C++0x contains several 276changes to the C++ language, some of which have been implemented in an 277experimental C++0x mode in GCC. The C++0x mode in GCC tracks the draft 278working paper for the C++0x standard; the latest working paper is 279available on the ISO C++ committee's web site at 280`http://www.open-std.org/jtc1/sc22/wg21/'. For information regarding 281the C++0x features available in the experimental C++0x mode, see 282`http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in 283GCC, use the option `-std=c++0x'; to obtain all the diagnostics 284required by the standard, you should also specify `-pedantic' (or 285`-pedantic-errors' if you want them to be errors rather than warnings). 286 287 By default, GCC provides some extensions to the C++ language; *Note 288Options Controlling C++ Dialect: C++ Dialect Options. Use of the 289`-std' option listed above will disable these extensions. You may also 290select an extended version of the C++ language explicitly with 291`-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++0x' (for 292C++0x with GNU extensions). The default, if no C++ language dialect 293options are given, is `-std=gnu++98'. 294 2952.3 Objective-C and Objective-C++ languages 296=========================================== 297 298GCC supports "traditional" Objective-C (also known as "Objective-C 2991.0") and contains support for the Objective-C exception and 300synchronization syntax. It has also support for a number of 301"Objective-C 2.0" language extensions, including properties, fast 302enumeration (only for Objective-C), method attributes and the @optional 303and @required keywords in protocols. GCC supports Objective-C++ and 304features available in Objective-C are also available in Objective-C++. 305 306 GCC by default uses the GNU Objective-C runtime library, which is part 307of GCC and is not the same as the Apple/NeXT Objective-C runtime 308library used on Apple systems. There are a number of differences 309documented in this manual. The options `-fgnu-runtime' and 310`-fnext-runtime' allow you to switch between producing output that 311works with the GNU Objective-C runtime library and output that works 312with the Apple/NeXT Objective-C runtime library. 313 314 There is no formal written standard for Objective-C or Objective-C++. 315The authoritative manual on traditional Objective-C (1.0) is 316"Object-Oriented Programming and the Objective-C Language", available 317at a number of web sites: 318 * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf' 319 is the original NeXTstep document; 320 321 * `http://objc.toodarkpark.net' is the same document in another 322 format; 323 324 * 325 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 326 has an updated version but make sure you search for "Object 327 Oriented Programming and the Objective-C Programming Language 1.0", 328 not documentation on the newer "Objective-C 2.0" language 329 330 The Objective-C exception and synchronization syntax (that is, the 331keywords @try, @throw, @catch, @finally and @synchronized) is supported 332by GCC and is enabled with the option `-fobjc-exceptions'. The syntax 333is briefly documented in this manual and in the Objective-C 2.0 manuals 334from Apple. 335 336 The Objective-C 2.0 language extensions and features are automatically 337enabled; they include properties (via the @property, @synthesize and 338@dynamic keywords), fast enumeration (not available in Objective-C++), 339attributes for methods (such as deprecated, noreturn, sentinel, 340format), the unused attribute for method arguments, the @package 341keyword for instance variables and the @optional and @required keywords 342in protocols. You can disable all these Objective-C 2.0 language 343extensions with the option `-fobjc-std=objc1', which causes the 344compiler to recognize the same Objective-C language syntax recognized 345by GCC 4.0, and to produce an error if one of the new features is used. 346 347 GCC has currently no support for non-fragile instance variables. 348 349 The authoritative manual on Objective-C 2.0 is available from Apple: 350 * 351 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 352 353 For more information concerning the history of Objective-C that is 354available online, see `http://gcc.gnu.org/readings.html' 355 3562.4 Go language 357=============== 358 359The Go language continues to evolve as of this writing; see the current 360language specifications (http://golang.org/doc/go_spec.html). At 361present there are no specific versions of Go, and there is no way to 362describe the language supported by GCC in terms of a specific version. 363In general GCC tracks the evolving specification closely, and any given 364release will support the language as of the date that the release was 365frozen. 366 3672.5 References for other languages 368================================== 369 370*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 371conformance and compatibility of the Ada compiler. 372 373 *Note Standards: (gfortran)Standards, for details of standards 374supported by GNU Fortran. 375 376 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 377details of compatibility between `gcj' and the Java Platform. 378 379 380File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 381 3823 GCC Command Options 383********************* 384 385When you invoke GCC, it normally does preprocessing, compilation, 386assembly and linking. The "overall options" allow you to stop this 387process at an intermediate stage. For example, the `-c' option says 388not to run the linker. Then the output consists of object files output 389by the assembler. 390 391 Other options are passed on to one stage of processing. Some options 392control the preprocessor and others the compiler itself. Yet other 393options control the assembler and linker; most of these are not 394documented here, since you rarely need to use any of them. 395 396 Most of the command line options that you can use with GCC are useful 397for C programs; when an option is only useful with another language 398(usually C++), the explanation says so explicitly. If the description 399for a particular option does not mention a source language, you can use 400that option with all supported languages. 401 402 *Note Compiling C++ Programs: Invoking G++, for a summary of special 403options for compiling C++ programs. 404 405 The `gcc' program accepts options and file names as operands. Many 406options have multi-letter names; therefore multiple single-letter 407options may _not_ be grouped: `-dv' is very different from `-d -v'. 408 409 You can mix options and other arguments. For the most part, the order 410you use doesn't matter. Order does matter when you use several options 411of the same kind; for example, if you specify `-L' more than once, the 412directories are searched in the order specified. Also, the placement 413of the `-l' option is significant. 414 415 Many options have long names starting with `-f' or with `-W'--for 416example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 417have both positive and negative forms; the negative form of `-ffoo' 418would be `-fno-foo'. This manual documents only one of these two 419forms, whichever one is not the default. 420 421 *Note Option Index::, for an index to GCC's options. 422 423* Menu: 424 425* Option Summary:: Brief list of all options, without explanations. 426* Overall Options:: Controlling the kind of output: 427 an executable, object files, assembler files, 428 or preprocessed source. 429* Invoking G++:: Compiling C++ programs. 430* C Dialect Options:: Controlling the variant of C language compiled. 431* C++ Dialect Options:: Variations on C++. 432* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 433 and Objective-C++. 434* Language Independent Options:: Controlling how diagnostics should be 435 formatted. 436* Warning Options:: How picky should the compiler be? 437* Debugging Options:: Symbol tables, measurements, and debugging dumps. 438* Optimize Options:: How much optimization? 439* Preprocessor Options:: Controlling header files and macro definitions. 440 Also, getting dependency information for Make. 441* Assembler Options:: Passing options to the assembler. 442* Link Options:: Specifying libraries and so on. 443* Directory Options:: Where to find header files and libraries. 444 Where to find the compiler executable files. 445* Spec Files:: How to pass switches to sub-processes. 446* Target Options:: Running a cross-compiler, or an old version of GCC. 447* Submodel Options:: Specifying minor hardware or convention variations, 448 such as 68010 vs 68020. 449* Code Gen Options:: Specifying conventions for function calls, data layout 450 and register usage. 451* Environment Variables:: Env vars that affect GCC. 452* Precompiled Headers:: Compiling a header once, and using it many times. 453 454 455File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 456 4573.1 Option Summary 458================== 459 460Here is a summary of all the options, grouped by type. Explanations are 461in the following sections. 462 463_Overall Options_ 464 *Note Options Controlling the Kind of Output: Overall Options. 465 -c -S -E -o FILE -no-canonical-prefixes 466 -pipe -pass-exit-codes 467 -x LANGUAGE -v -### --help[=CLASS[,...]] --target-help 468 --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG 469 -fdump-ada-spec[-slim] 470 -fdump-go-spec=FILE 471 472_C Language Options_ 473 *Note Options Controlling C Dialect: C Dialect Options. 474 -ansi -std=STANDARD -fgnu89-inline 475 -aux-info FILENAME 476 -fno-asm -fno-builtin -fno-builtin-FUNCTION 477 -fhosted -ffreestanding -fopenmp -fms-extensions -fplan9-extensions 478 -trigraphs -no-integrated-cpp -traditional -traditional-cpp 479 -fallow-single-precision -fcond-mismatch -flax-vector-conversions 480 -fsigned-bitfields -fsigned-char 481 -funsigned-bitfields -funsigned-char 482 483_C++ Language Options_ 484 *Note Options Controlling C++ Dialect: C++ Dialect Options. 485 -fabi-version=N -fno-access-control -fcheck-new 486 -fconserve-space -fconstexpr-depth=N -ffriend-injection 487 -fno-elide-constructors 488 -fno-enforce-eh-specs 489 -ffor-scope -fno-for-scope -fno-gnu-keywords 490 -fno-implicit-templates 491 -fno-implicit-inline-templates 492 -fno-implement-inlines -fms-extensions 493 -fno-nonansi-builtins -fnothrow-opt -fno-operator-names 494 -fno-optional-diags -fpermissive 495 -fno-pretty-templates 496 -frepo -fno-rtti -fstats -ftemplate-depth=N 497 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 498 -fno-default-inline -fvisibility-inlines-hidden 499 -fvisibility-ms-compat 500 -Wabi -Wconversion-null -Wctor-dtor-privacy 501 -Wnoexcept -Wnon-virtual-dtor -Wreorder 502 -Weffc++ -Wstrict-null-sentinel 503 -Wno-non-template-friend -Wold-style-cast 504 -Woverloaded-virtual -Wno-pmf-conversions 505 -Wsign-promo 506 507_Objective-C and Objective-C++ Language Options_ 508 *Note Options Controlling Objective-C and Objective-C++ Dialects: 509 Objective-C and Objective-C++ Dialect Options. 510 -fconstant-string-class=CLASS-NAME 511 -fgnu-runtime -fnext-runtime 512 -fno-nil-receivers 513 -fobjc-abi-version=N 514 -fobjc-call-cxx-cdtors 515 -fobjc-direct-dispatch 516 -fobjc-exceptions 517 -fobjc-gc 518 -fobjc-nilcheck 519 -fobjc-std=objc1 520 -freplace-objc-classes 521 -fzero-link 522 -gen-decls 523 -Wassign-intercept 524 -Wno-protocol -Wselector 525 -Wstrict-selector-match 526 -Wundeclared-selector 527 528_Language Independent Options_ 529 *Note Options to Control Diagnostic Messages Formatting: Language 530 Independent Options. 531 -fmessage-length=N 532 -fdiagnostics-show-location=[once|every-line] 533 -fno-diagnostics-show-option 534 535_Warning Options_ 536 *Note Options to Request or Suppress Warnings: Warning Options. 537 -fsyntax-only -fmax-errors=N -pedantic 538 -pedantic-errors 539 -w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds 540 -Wno-attributes -Wno-builtin-macro-redefined 541 -Wc++-compat -Wc++0x-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 -Wjump-misses-init -Wignored-qualifiers 551 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 552 -Winit-self -Winline 553 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 554 -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations 555 -Wlogical-op -Wlong-long 556 -Wmain -Wmissing-braces -Wmissing-field-initializers 557 -Wmissing-format-attribute -Wmissing-include-dirs 558 -Wno-mudflap 559 -Wno-multichar -Wnonnull -Wno-overflow 560 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded 561 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format 562 -Wpointer-arith -Wno-pointer-to-int-cast 563 -Wno-poison-system-directories 564 -Wredundant-decls 565 -Wreturn-type -Wsequence-point -Wshadow 566 -Wsign-compare -Wsign-conversion -Wstack-protector 567 -Wstrict-aliasing -Wstrict-aliasing=n 568 -Wstrict-overflow -Wstrict-overflow=N 569 -Wsuggest-attribute=[pure|const|noreturn] 570 -Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand 571 -Wsystem-headers -Wtrampolines -Wtrigraphs -Wtype-limits -Wundef 572 -Wuninitialized -Wunknown-pragmas -Wno-pragmas 573 -Wunsuffixed-float-constants -Wunused -Wunused-function 574 -Wunused-label -Wunused-parameter -Wno-unused-result -Wunused-value 575 -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable 576 -Wvariadic-macros -Wvla -Wvolatile-register-var -Wwrite-strings 577 578_C and Objective-C-only Warning Options_ 579 -Wbad-function-cast -Wmissing-declarations 580 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs 581 -Wold-style-declaration -Wold-style-definition 582 -Wstrict-prototypes -Wtraditional -Wtraditional-conversion 583 -Wdeclaration-after-statement -Wpointer-sign 584 585_Debugging Options_ 586 *Note Options for Debugging Your Program or GCC: Debugging Options. 587 -dLETTERS -dumpspecs -dumpmachine -dumpversion 588 -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST 589 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links 590 -fdump-translation-unit[-N] 591 -fdump-class-hierarchy[-N] 592 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline 593 -fdump-statistics 594 -fdump-tree-all 595 -fdump-tree-original[-N] 596 -fdump-tree-optimized[-N] 597 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias 598 -fdump-tree-ch 599 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 600 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 601 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N] 602 -fdump-tree-dom[-N] 603 -fdump-tree-dse[-N] 604 -fdump-tree-phiprop[-N] 605 -fdump-tree-phiopt[-N] 606 -fdump-tree-forwprop[-N] 607 -fdump-tree-copyrename[-N] 608 -fdump-tree-nrv -fdump-tree-vect 609 -fdump-tree-sink 610 -fdump-tree-sra[-N] 611 -fdump-tree-forwprop[-N] 612 -fdump-tree-fre[-N] 613 -fdump-tree-vrp[-N] 614 -ftree-vectorizer-verbose=N 615 -fdump-tree-storeccp[-N] 616 -fdump-final-insns=FILE 617 -fcompare-debug[=OPTS] -fcompare-debug-second 618 -feliminate-dwarf2-dups -feliminate-unused-debug-types 619 -feliminate-unused-debug-symbols -femit-class-debug-always 620 -fenable-icf-debug 621 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 622 -frandom-seed=STRING -fsched-verbose=N 623 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose 624 -fstack-usage -ftest-coverage -ftime-report -fvar-tracking 625 -fvar-tracking-assignments -fvar-tracking-assignments-toggle 626 -g -gLEVEL -gtoggle -gcoff -gdwarf-VERSION 627 -ggdb -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf 628 -gvms -gxcoff -gxcoff+ 629 -fno-merge-debug-strings -fno-dwarf2-cfi-asm 630 -fdebug-prefix-map=OLD=NEW 631 -femit-struct-debug-baseonly -femit-struct-debug-reduced 632 -femit-struct-debug-detailed[=SPEC-LIST] 633 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 634 -print-multi-directory -print-multi-lib -print-multi-os-directory 635 -print-prog-name=PROGRAM -print-search-dirs -Q 636 -print-sysroot -print-sysroot-headers-suffix 637 -save-temps -save-temps=cwd -save-temps=obj -time[=FILE] 638 639_Optimization Options_ 640 *Note Options that Control Optimization: Optimize Options. 641 -falign-arrays 642 -falign-functions[=N] -falign-jumps[=N] 643 -falign-labels[=N] -falign-loops[=N] -fassociative-math 644 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize 645 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves 646 -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack 647 -fcompare-elim -fcprop-registers -fcrossjumping 648 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules 649 -fcx-limited-range 650 -fdata-sections -fdce -fdce -fdelayed-branch 651 -fdelete-null-pointer-checks -fdse -fdevirtualize -fdse 652 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffast-math 653 -ffinite-math-only -ffloat-store -fexcess-precision=STYLE 654 -fforward-propagate -ffp-contract=STYLE -ffunction-sections 655 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity 656 -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining 657 -finline-functions -finline-functions-called-once -finline-limit=N 658 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg 659 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference 660 -fipa-struct-reorg -fira-algorithm=ALGORITHM 661 -fira-region=REGION 662 -fira-loop-pressure -fno-ira-share-save-slots 663 -fno-ira-share-spill-slots -fira-verbose=N 664 -fivopts -fkeep-inline-functions -fkeep-static-consts 665 -floop-block -floop-flatten -floop-interchange -floop-strip-mine 666 -floop-parallelize-all -flto -flto-compression-level 667 -flto-partition=ALG -flto-report -fmerge-all-constants 668 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves 669 -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg 670 -fno-default-inline 671 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 672 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 673 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 674 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 675 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls 676 -fpartial-inlining -fpeel-loops -fpredictive-commoning 677 -fprefetch-loop-arrays 678 -fprofile-correction -fprofile-dir=PATH -fprofile-generate 679 -fprofile-generate=PATH 680 -fprofile-use -fprofile-use=PATH -fprofile-values 681 -freciprocal-math -fregmove -frename-registers -freorder-blocks 682 -freorder-blocks-and-partition -freorder-functions 683 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 684 -frounding-math -fsched2-use-superblocks -fsched-pressure 685 -fsched-spec-load -fsched-spec-load-dangerous 686 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 687 -fsched-group-heuristic -fsched-critical-path-heuristic 688 -fsched-spec-insn-heuristic -fsched-rank-heuristic 689 -fsched-last-insn-heuristic -fsched-dep-count-heuristic 690 -fschedule-insns -fschedule-insns2 -fsection-anchors 691 -fselective-scheduling -fselective-scheduling2 692 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops 693 -fshrink-wrap -fsignaling-nans -fsingle-precision-constant 694 -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector 695 -fstack-protector-all -fstrict-aliasing -fstrict-overflow 696 -fthread-jumps -ftracer -ftree-bit-ccp 697 -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop 698 -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse 699 -ftree-forwprop -ftree-fre -ftree-if-to-switch-conversion 700 -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im 701 -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns 702 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize 703 -ftree-parallelize-loops=N -ftree-pre -ftree-pta -ftree-reassoc 704 -ftree-sink -ftree-sra -ftree-switch-conversion 705 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp 706 -funit-at-a-time -funroll-all-loops -funroll-loops 707 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops 708 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb 709 -fwhole-program -fwpa -fuse-linker-plugin 710 --param NAME=VALUE 711 -O -O0 -O1 -O2 -O3 -Os -Ofast 712 713_Preprocessor Options_ 714 *Note Options Controlling the Preprocessor: Preprocessor Options. 715 -AQUESTION=ANSWER 716 -A-QUESTION[=ANSWER] 717 -C -dD -dI -dM -dN 718 -DMACRO[=DEFN] -E -H 719 -idirafter DIR 720 -include FILE -imacros FILE 721 -iprefix FILE -iwithprefix DIR 722 -iwithprefixbefore DIR -isystem DIR 723 -imultilib DIR -isysroot DIR 724 -M -MM -MF -MG -MP -MQ -MT -nostdinc 725 -P -fworking-directory -remap 726 -trigraphs -undef -UMACRO -Wp,OPTION 727 -Xpreprocessor OPTION 728 729_Assembler Option_ 730 *Note Passing Options to the Assembler: Assembler Options. 731 -Wa,OPTION -Xassembler OPTION 732 733_Linker Options_ 734 *Note Options for Linking: Link Options. 735 OBJECT-FILE-NAME -lLIBRARY 736 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 737 -s -static -static-libgcc -static-libstdc++ -shared 738 -shared-libgcc -symbolic 739 -T SCRIPT -Wl,OPTION -Xlinker OPTION 740 -u SYMBOL 741 742_Directory Options_ 743 *Note Options for Directory Search: Directory Options. 744 -BPREFIX -IDIR -iplugindir=DIR 745 746 -iquoteDIR -LDIR -specs=FILE -I- -sysroot=DIR 747 748_Machine Dependent Options_ 749 *Note Hardware Models and Configurations: Submodel Options. 750 751 _ARC Options_ 752 -EB -EL 753 -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION 754 -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION 755 756 _ARM Options_ 757 -mapcs-frame -mno-apcs-frame 758 -mabi=NAME 759 -mapcs-stack-check -mno-apcs-stack-check 760 -mapcs-float -mno-apcs-float 761 -mapcs-reentrant -mno-apcs-reentrant 762 -msched-prolog -mno-sched-prolog 763 -mlittle-endian -mbig-endian -mwords-little-endian 764 -mfloat-abi=NAME -msoft-float -mhard-float -mfpe 765 -mfp16-format=NAME 766 -mthumb-interwork -mno-thumb-interwork 767 -mcpu=NAME -march=NAME -mfpu=NAME 768 -mstructure-size-boundary=N 769 -mabort-on-noreturn 770 -mlong-calls -mno-long-calls 771 -msingle-pic-base -mno-single-pic-base 772 -mpic-register=REG 773 -mnop-fun-dllimport 774 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns 775 -mpoke-function-name 776 -mthumb -marm 777 -mtpcs-frame -mtpcs-leaf-frame 778 -mcaller-super-interworking -mcallee-super-interworking 779 -mtp=NAME -mtls-dialect=DIALECT 780 -mword-relocations 781 -mfix-cortex-m3-ldrd 782 783 _AVR Options_ 784 -mmcu=MCU -mno-interrupts 785 -mcall-prologues -mtiny-stack -mint8 786 787 _Blackfin Options_ 788 -mcpu=CPU[-SIREVISION] 789 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 790 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 791 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 792 -mno-id-shared-library -mshared-library-id=N 793 -mleaf-id-shared-library -mno-leaf-id-shared-library 794 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 795 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 796 -micplb 797 798 _CRIS Options_ 799 -mcpu=CPU -march=CPU -mtune=CPU 800 -mmax-stack-frame=N -melinux-stacksize=N 801 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 802 -mstack-align -mdata-align -mconst-align 803 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 804 -melf -maout -melinux -mlinux -sim -sim2 805 -mmul-bug-workaround -mno-mul-bug-workaround 806 807 _CRX Options_ 808 -mmac -mpush-args 809 810 _Darwin Options_ 811 -all_load -allowable_client -arch -arch_errors_fatal 812 -arch_only -bind_at_load -bundle -bundle_loader 813 -client_name -compatibility_version -current_version 814 -dead_strip 815 -dependency-file -dylib_file -dylinker_install_name 816 -dynamic -dynamiclib -exported_symbols_list 817 -filelist -flat_namespace -force_cpusubtype_ALL 818 -force_flat_namespace -headerpad_max_install_names 819 -iframework 820 -image_base -init -install_name -keep_private_externs 821 -multi_module -multiply_defined -multiply_defined_unused 822 -noall_load -no_dead_strip_inits_and_terms 823 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 824 -pagezero_size -prebind -prebind_all_twolevel_modules 825 -private_bundle -read_only_relocs -sectalign 826 -sectobjectsymbols -whyload -seg1addr 827 -sectcreate -sectobjectsymbols -sectorder 828 -segaddr -segs_read_only_addr -segs_read_write_addr 829 -seg_addr_table -seg_addr_table_filename -seglinkedit 830 -segprot -segs_read_only_addr -segs_read_write_addr 831 -single_module -static -sub_library -sub_umbrella 832 -twolevel_namespace -umbrella -undefined 833 -unexported_symbols_list -weak_reference_mismatches 834 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 835 -mkernel -mone-byte-bool 836 837 _DEC Alpha Options_ 838 -mno-fp-regs -msoft-float -malpha-as -mgas 839 -mieee -mieee-with-inexact -mieee-conformant 840 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 841 -mtrap-precision=MODE -mbuild-constants 842 -mcpu=CPU-TYPE -mtune=CPU-TYPE 843 -mbwx -mmax -mfix -mcix 844 -mfloat-vax -mfloat-ieee 845 -mexplicit-relocs -msmall-data -mlarge-data 846 -msmall-text -mlarge-text 847 -mmemory-latency=TIME 848 849 _DEC Alpha/VMS Options_ 850 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 851 852 _FR30 Options_ 853 -msmall-model -mno-lsim 854 855 _FRV Options_ 856 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 857 -mhard-float -msoft-float 858 -malloc-cc -mfixed-cc -mdword -mno-dword 859 -mdouble -mno-double 860 -mmedia -mno-media -mmuladd -mno-muladd 861 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 862 -mlinked-fp -mlong-calls -malign-labels 863 -mlibrary-pic -macc-4 -macc-8 864 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 865 -moptimize-membar -mno-optimize-membar 866 -mscc -mno-scc -mcond-exec -mno-cond-exec 867 -mvliw-branch -mno-vliw-branch 868 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 869 -mno-nested-cond-exec -mtomcat-stats 870 -mTLS -mtls 871 -mcpu=CPU 872 873 _GNU/Linux Options_ 874 -mglibc -muclibc -mbionic -mandroid 875 -tno-android-cc -tno-android-ld 876 877 _H8/300 Options_ 878 -mrelax -mh -ms -mn -mint32 -malign-300 879 880 _HPPA Options_ 881 -march=ARCHITECTURE-TYPE 882 -mbig-switch -mdisable-fpregs -mdisable-indexing 883 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 884 -mfixed-range=REGISTER-RANGE 885 -mjump-in-delay -mlinker-opt -mlong-calls 886 -mlong-load-store -mno-big-switch -mno-disable-fpregs 887 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 888 -mno-jump-in-delay -mno-long-load-store 889 -mno-portable-runtime -mno-soft-float 890 -mno-space-regs -msoft-float -mpa-risc-1-0 891 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 892 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 893 -munix=UNIX-STD -nolibdld -static -threads 894 895 _i386 and x86-64 Options_ 896 -mtune=CPU-TYPE -march=CPU-TYPE 897 -mfpmath=UNIT 898 -masm=DIALECT -mno-fancy-math-387 899 -mno-fp-ret-in-387 -msoft-float 900 -mno-wide-multiply -mrtd -malign-double 901 -mpreferred-stack-boundary=NUM 902 -mincoming-stack-boundary=NUM 903 -mcld -mcx16 -msahf -mmovbe -mcrc32 -mrecip -mvzeroupper 904 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 905 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfused-madd 906 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlwp 907 -mthreads -mno-align-stringops -minline-all-stringops 908 -minline-stringops-dynamically -mstringop-strategy=ALG 909 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 910 -m96bit-long-double -mregparm=NUM -msseregparm 911 -mveclibabi=TYPE -mvect8-ret-in-mem 912 -mpc32 -mpc64 -mpc80 -mstackrealign 913 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 914 -mcmodel=CODE-MODEL -mabi=NAME 915 -m32 -m64 -mlarge-data-threshold=NUM 916 -msse2avx -mfentry -m8bit-idiv 917 918 _i386 and x86-64 Windows Options_ 919 -mconsole -mcygwin -mno-cygwin -mdll 920 -mnop-fun-dllimport -mthread 921 -municode -mwin32 -mwindows -fno-set-stack-executable 922 923 _IA-64 Options_ 924 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 925 -mvolatile-asm-stop -mregister-names -msdata -mno-sdata 926 -mconstant-gp -mauto-pic -mfused-madd 927 -minline-float-divide-min-latency 928 -minline-float-divide-max-throughput 929 -mno-inline-float-divide 930 -minline-int-divide-min-latency 931 -minline-int-divide-max-throughput 932 -mno-inline-int-divide 933 -minline-sqrt-min-latency -minline-sqrt-max-throughput 934 -mno-inline-sqrt 935 -mdwarf2-asm -mearly-stop-bits 936 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 937 -mtune=CPU-TYPE -milp32 -mlp64 938 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec 939 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 940 -msched-spec-ldc -msched-spec-control-ldc 941 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns 942 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path 943 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost 944 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS 945 946 _IA-64/VMS Options_ 947 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 948 949 _LM32 Options_ 950 -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled 951 -msign-extend-enabled -muser-enabled 952 953 _M32R/D Options_ 954 -m32r2 -m32rx -m32r 955 -mdebug 956 -malign-loops -mno-align-loops 957 -missue-rate=NUMBER 958 -mbranch-cost=NUMBER 959 -mmodel=CODE-SIZE-MODEL-TYPE 960 -msdata=SDATA-TYPE 961 -mno-flush-func -mflush-func=NAME 962 -mno-flush-trap -mflush-trap=NUMBER 963 -G NUM 964 965 _M32C Options_ 966 -mcpu=CPU -msim -memregs=NUMBER 967 968 _M680x0 Options_ 969 -march=ARCH -mcpu=CPU -mtune=TUNE 970 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 971 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 972 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 973 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 974 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 975 -malign-int -mstrict-align -msep-data -mno-sep-data 976 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 977 -mxgot -mno-xgot 978 979 _M68hc1x Options_ 980 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 981 -mauto-incdec -minmax -mlong-calls -mshort 982 -msoft-reg-count=COUNT 983 984 _MCore Options_ 985 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 986 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 987 -m4byte-functions -mno-4byte-functions -mcallgraph-data 988 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 989 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 990 991 _MeP Options_ 992 -mabsdiff -mall-opts -maverage -mbased=N -mbitops 993 -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2 994 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax 995 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf 996 -mtiny=N 997 998 _MicroBlaze Options_ 999 -msoft-float -mhard-float -msmall-divides -mcpu=CPU 1000 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift 1001 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss 1002 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt 1003 -mxl-mode-APP-MODEL 1004 1005 _MIPS Options_ 1006 -EL -EB -march=ARCH -mtune=ARCH 1007 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 1008 -mips64 -mips64r2 1009 -mips16 -mips16e -mno-mips16 -mflip-mips16 1010 -minterlink-mips16 -mno-interlink-mips16 1011 -mabi=ABI -mabicalls -mno-abicalls 1012 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 1013 -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float 1014 -msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 1015 -mfpu=FPU-TYPE 1016 -msmartmips -mno-smartmips 1017 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 1018 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 1019 -mlong64 -mlong32 -msym32 -mno-sym32 1020 -GNUM -mlocal-sdata -mno-local-sdata 1021 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 1022 -membedded-data -mno-embedded-data 1023 -muninit-const-in-rodata -mno-uninit-const-in-rodata 1024 -mcode-readable=SETTING 1025 -msplit-addresses -mno-split-addresses 1026 -mexplicit-relocs -mno-explicit-relocs 1027 -mcheck-zero-division -mno-check-zero-division 1028 -mdivide-traps -mdivide-breaks 1029 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 1030 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 1031 -mfix-24k -mno-fix-24k 1032 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 1033 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 1034 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 1035 -mflush-func=FUNC -mno-flush-func 1036 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 1037 -mfp-exceptions -mno-fp-exceptions 1038 -mvr4130-align -mno-vr4130-align -msynci -mno-synci 1039 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address 1040 1041 _MMIX Options_ 1042 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 1043 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 1044 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 1045 -mno-base-addresses -msingle-exit -mno-single-exit 1046 1047 _MN10300 Options_ 1048 -mmult-bug -mno-mult-bug 1049 -mno-am33 -mam33 -mam33-2 -mam34 1050 -mtune=CPU-TYPE 1051 -mreturn-pointer-on-d0 1052 -mno-crt0 -mrelax -mliw 1053 1054 _PDP-11 Options_ 1055 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 1056 -mbcopy -mbcopy-builtin -mint32 -mno-int16 1057 -mint16 -mno-int32 -mfloat32 -mno-float64 1058 -mfloat64 -mno-float32 -mabshi -mno-abshi 1059 -mbranch-expensive -mbranch-cheap 1060 -munix-asm -mdec-asm 1061 1062 _picoChip Options_ 1063 -mae=AE_TYPE -mvliw-lookahead=N 1064 -msymbol-as-address -mno-inefficient-warnings 1065 1066 _PowerPC Options_ See RS/6000 and PowerPC Options. 1067 1068 _RS/6000 and PowerPC Options_ 1069 -mcpu=CPU-TYPE 1070 -mtune=CPU-TYPE 1071 -mcmodel=CODE-MODEL 1072 -mpower -mno-power -mpower2 -mno-power2 1073 -mpowerpc -mpowerpc64 -mno-powerpc 1074 -maltivec -mno-altivec 1075 -mpowerpc-gpopt -mno-powerpc-gpopt 1076 -mpowerpc-gfxopt -mno-powerpc-gfxopt 1077 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd 1078 -mfprnd -mno-fprnd 1079 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 1080 -mnew-mnemonics -mold-mnemonics 1081 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 1082 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 1083 -malign-power -malign-natural 1084 -msoft-float -mhard-float -mmultiple -mno-multiple 1085 -msingle-float -mdouble-float -msimple-fpu 1086 -mstring -mno-string -mupdate -mno-update 1087 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 1088 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 1089 -mstrict-align -mno-strict-align -mrelocatable 1090 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 1091 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 1092 -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base 1093 -mprioritize-restricted-insns=PRIORITY 1094 -msched-costly-dep=DEPENDENCE_TYPE 1095 -minsert-sched-nops=SCHEME 1096 -mcall-sysv -mcall-netbsd 1097 -maix-struct-return -msvr4-struct-return 1098 -mabi=ABI-TYPE -msecure-plt -mbss-plt 1099 -mblock-move-inline-limit=NUM 1100 -misel -mno-isel 1101 -misel=yes -misel=no 1102 -mspe -mno-spe 1103 -mspe=yes -mspe=no 1104 -mpaired 1105 -mgen-cell-microcode -mwarn-cell-microcode 1106 -mvrsave -mno-vrsave 1107 -mmulhw -mno-mulhw 1108 -mdlmzb -mno-dlmzb 1109 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 1110 -mprototype -mno-prototype 1111 -msim -mmvme -mads -myellowknife -memb -msdata 1112 -msdata=OPT -mvxworks -G NUM -pthread 1113 -mrecip -mrecip=OPT -mno-recip -mrecip-precision 1114 -mno-recip-precision 1115 -mveclibabi=TYPE -mfriz -mno-friz 1116 1117 _RX Options_ 1118 -m64bit-doubles -m32bit-doubles -fpu -nofpu 1119 -mcpu= 1120 -mbig-endian-data -mlittle-endian-data 1121 -msmall-data 1122 -msim -mno-sim 1123 -mas100-syntax -mno-as100-syntax 1124 -mrelax 1125 -mmax-constant-size= 1126 -mint-register= 1127 -msave-acc-in-interrupts 1128 1129 _S/390 and zSeries Options_ 1130 -mtune=CPU-TYPE -march=CPU-TYPE 1131 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 1132 -mlong-double-64 -mlong-double-128 1133 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 1134 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 1135 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 1136 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 1137 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 1138 1139 _Score Options_ 1140 -meb -mel 1141 -mnhwloop 1142 -muls 1143 -mmac 1144 -mscore5 -mscore5u -mscore7 -mscore7d 1145 1146 _SH Options_ 1147 -m1 -m2 -m2e 1148 -m2a-nofpu -m2a-single-only -m2a-single -m2a 1149 -m3 -m3e 1150 -m4-nofpu -m4-single-only -m4-single -m4 1151 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1152 -m5-64media -m5-64media-nofpu 1153 -m5-32media -m5-32media-nofpu 1154 -m5-compact -m5-compact-nofpu 1155 -mb -ml -mdalign -mrelax 1156 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1157 -mieee -mbitops -misize -minline-ic_invalidate -mpadstruct -mspace 1158 -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1159 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1160 -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1161 -maccumulate-outgoing-args -minvalid-symbols 1162 1163 _Solaris 2 Options_ 1164 -mimpure-text -mno-impure-text 1165 -threads -pthreads -pthread 1166 1167 _SPARC Options_ 1168 -mcpu=CPU-TYPE 1169 -mtune=CPU-TYPE 1170 -mcmodel=CODE-MODEL 1171 -m32 -m64 -mapp-regs -mno-app-regs 1172 -mfaster-structs -mno-faster-structs 1173 -mfpu -mno-fpu -mhard-float -msoft-float 1174 -mhard-quad-float -msoft-quad-float 1175 -mlittle-endian 1176 -mstack-bias -mno-stack-bias 1177 -munaligned-doubles -mno-unaligned-doubles 1178 -mv8plus -mno-v8plus -mvis -mno-vis 1179 1180 _SPU Options_ 1181 -mwarn-reloc -merror-reloc 1182 -msafe-dma -munsafe-dma 1183 -mbranch-hints 1184 -msmall-mem -mlarge-mem -mstdmain 1185 -mfixed-range=REGISTER-RANGE 1186 -mea32 -mea64 1187 -maddress-space-conversion -mno-address-space-conversion 1188 -mcache-size=CACHE-SIZE 1189 -matomic-updates -mno-atomic-updates 1190 1191 _System V Options_ 1192 -Qy -Qn -YP,PATHS -Ym,DIR 1193 1194 _V850 Options_ 1195 -mlong-calls -mno-long-calls -mep -mno-ep 1196 -mprolog-function -mno-prolog-function -mspace 1197 -mtda=N -msda=N -mzda=N 1198 -mapp-regs -mno-app-regs 1199 -mdisable-callt -mno-disable-callt 1200 -mv850e2v3 1201 -mv850e2 1202 -mv850e1 -mv850es 1203 -mv850e 1204 -mv850 -mbig-switch 1205 1206 _VAX Options_ 1207 -mg -mgnu -munix 1208 1209 _VxWorks Options_ 1210 -mrtp -non-static -Bstatic -Bdynamic 1211 -Xbind-lazy -Xbind-now 1212 1213 _x86-64 Options_ See i386 and x86-64 Options. 1214 1215 _Xstormy16 Options_ 1216 -msim 1217 1218 _Xtensa Options_ 1219 -mconst16 -mno-const16 1220 -mfused-madd -mno-fused-madd 1221 -mforce-no-pic 1222 -mserialize-volatile -mno-serialize-volatile 1223 -mtext-section-literals -mno-text-section-literals 1224 -mtarget-align -mno-target-align 1225 -mlongcalls -mno-longcalls 1226 1227 _zSeries Options_ See S/390 and zSeries Options. 1228 1229_Code Generation Options_ 1230 *Note Options for Code Generation Conventions: Code Gen Options. 1231 -fcall-saved-REG -fcall-used-REG 1232 -ffixed-REG -fexceptions 1233 -fnon-call-exceptions -funwind-tables 1234 -fasynchronous-unwind-tables 1235 -finhibit-size-directive -finstrument-functions 1236 -finstrument-functions-exclude-function-list=SYM,SYM,... 1237 -finstrument-functions-exclude-file-list=FILE,FILE,... 1238 -finstrument-function-calls 1239 -fno-common -fno-ident 1240 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1241 -fno-jump-tables 1242 -frecord-gcc-switches 1243 -freg-struct-return -fshort-enums 1244 -fshort-double -fshort-wchar 1245 -fverbose-asm -fpack-struct[=N] -fstack-check 1246 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1247 -fno-stack-limit -fsplit-stack 1248 -fleading-underscore -ftls-model=MODEL 1249 -ftrapv -fwrapv -fbounds-check 1250 -fvisibility -fstrict-volatile-bitfields 1251 1252 1253* Menu: 1254 1255* Overall Options:: Controlling the kind of output: 1256 an executable, object files, assembler files, 1257 or preprocessed source. 1258* C Dialect Options:: Controlling the variant of C language compiled. 1259* C++ Dialect Options:: Variations on C++. 1260* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 1261 and Objective-C++. 1262* Language Independent Options:: Controlling how diagnostics should be 1263 formatted. 1264* Warning Options:: How picky should the compiler be? 1265* Debugging Options:: Symbol tables, measurements, and debugging dumps. 1266* Optimize Options:: How much optimization? 1267* Preprocessor Options:: Controlling header files and macro definitions. 1268 Also, getting dependency information for Make. 1269* Assembler Options:: Passing options to the assembler. 1270* Link Options:: Specifying libraries and so on. 1271* Directory Options:: Where to find header files and libraries. 1272 Where to find the compiler executable files. 1273* Spec Files:: How to pass switches to sub-processes. 1274* Target Options:: Running a cross-compiler, or an old version of GCC. 1275 1276 1277File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1278 12793.2 Options Controlling the Kind of Output 1280========================================== 1281 1282Compilation can involve up to four stages: preprocessing, compilation 1283proper, assembly and linking, always in that order. GCC is capable of 1284preprocessing and compiling several files either into several assembler 1285input files, or into one assembler input file; then each assembler 1286input file produces an object file, and linking combines all the object 1287files (those newly compiled, and those specified as input) into an 1288executable file. 1289 1290 For any given input file, the file name suffix determines what kind of 1291compilation is done: 1292 1293`FILE.c' 1294 C source code which must be preprocessed. 1295 1296`FILE.i' 1297 C source code which should not be preprocessed. 1298 1299`FILE.ii' 1300 C++ source code which should not be preprocessed. 1301 1302`FILE.m' 1303 Objective-C source code. Note that you must link with the 1304 `libobjc' library to make an Objective-C program work. 1305 1306`FILE.mi' 1307 Objective-C source code which should not be preprocessed. 1308 1309`FILE.mm' 1310`FILE.M' 1311 Objective-C++ source code. Note that you must link with the 1312 `libobjc' library to make an Objective-C++ program work. Note 1313 that `.M' refers to a literal capital M. 1314 1315`FILE.mii' 1316 Objective-C++ source code which should not be preprocessed. 1317 1318`FILE.h' 1319 C, C++, Objective-C or Objective-C++ header file to be turned into 1320 a precompiled header (default), or C, C++ header file to be turned 1321 into an Ada spec (via the `-fdump-ada-spec' switch). 1322 1323`FILE.cc' 1324`FILE.cp' 1325`FILE.cxx' 1326`FILE.cpp' 1327`FILE.CPP' 1328`FILE.c++' 1329`FILE.C' 1330 C++ source code which must be preprocessed. Note that in `.cxx', 1331 the last two letters must both be literally `x'. Likewise, `.C' 1332 refers to a literal capital C. 1333 1334`FILE.mm' 1335`FILE.M' 1336 Objective-C++ source code which must be preprocessed. 1337 1338`FILE.mii' 1339 Objective-C++ source code which should not be preprocessed. 1340 1341`FILE.hh' 1342`FILE.H' 1343`FILE.hp' 1344`FILE.hxx' 1345`FILE.hpp' 1346`FILE.HPP' 1347`FILE.h++' 1348`FILE.tcc' 1349 C++ header file to be turned into a precompiled header or Ada spec. 1350 1351`FILE.f' 1352`FILE.for' 1353`FILE.ftn' 1354 Fixed form Fortran source code which should not be preprocessed. 1355 1356`FILE.F' 1357`FILE.FOR' 1358`FILE.fpp' 1359`FILE.FPP' 1360`FILE.FTN' 1361 Fixed form Fortran source code which must be preprocessed (with 1362 the traditional preprocessor). 1363 1364`FILE.f90' 1365`FILE.f95' 1366`FILE.f03' 1367`FILE.f08' 1368 Free form Fortran source code which should not be preprocessed. 1369 1370`FILE.F90' 1371`FILE.F95' 1372`FILE.F03' 1373`FILE.F08' 1374 Free form Fortran source code which must be preprocessed (with the 1375 traditional preprocessor). 1376 1377`FILE.go' 1378 Go source code. 1379 1380`FILE.ads' 1381 Ada source code file which contains a library unit declaration (a 1382 declaration of a package, subprogram, or generic, or a generic 1383 instantiation), or a library unit renaming declaration (a package, 1384 generic, or subprogram renaming declaration). Such files are also 1385 called "specs". 1386 1387`FILE.adb' 1388 Ada source code file containing a library unit body (a subprogram 1389 or package body). Such files are also called "bodies". 1390 1391`FILE.s' 1392 Assembler code. 1393 1394`FILE.S' 1395`FILE.sx' 1396 Assembler code which must be preprocessed. 1397 1398`OTHER' 1399 An object file to be fed straight into linking. Any file name 1400 with no recognized suffix is treated this way. 1401 1402 You can specify the input language explicitly with the `-x' option: 1403 1404`-x LANGUAGE' 1405 Specify explicitly the LANGUAGE for the following input files 1406 (rather than letting the compiler choose a default based on the 1407 file name suffix). This option applies to all following input 1408 files until the next `-x' option. Possible values for LANGUAGE 1409 are: 1410 c c-header cpp-output 1411 c++ c++-header c++-cpp-output 1412 objective-c objective-c-header objective-c-cpp-output 1413 objective-c++ objective-c++-header objective-c++-cpp-output 1414 assembler assembler-with-cpp 1415 ada 1416 f77 f77-cpp-input f95 f95-cpp-input 1417 go 1418 java 1419 1420`-x none' 1421 Turn off any specification of a language, so that subsequent files 1422 are handled according to their file name suffixes (as they are if 1423 `-x' has not been used at all). 1424 1425`-pass-exit-codes' 1426 Normally the `gcc' program will exit with the code of 1 if any 1427 phase of the compiler returns a non-success return code. If you 1428 specify `-pass-exit-codes', the `gcc' program will instead return 1429 with numerically highest error produced by any phase that returned 1430 an error indication. The C, C++, and Fortran frontends return 4, 1431 if an internal compiler error is encountered. 1432 1433 If you only want some of the stages of compilation, you can use `-x' 1434(or filename suffixes) to tell `gcc' where to start, and one of the 1435options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1436some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1437do nothing at all. 1438 1439`-c' 1440 Compile or assemble the source files, but do not link. The linking 1441 stage simply is not done. The ultimate output is in the form of an 1442 object file for each source file. 1443 1444 By default, the object file name for a source file is made by 1445 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1446 1447 Unrecognized input files, not requiring compilation or assembly, 1448 are ignored. 1449 1450`-S' 1451 Stop after the stage of compilation proper; do not assemble. The 1452 output is in the form of an assembler code file for each 1453 non-assembler input file specified. 1454 1455 By default, the assembler file name for a source file is made by 1456 replacing the suffix `.c', `.i', etc., with `.s'. 1457 1458 Input files that don't require compilation are ignored. 1459 1460`-E' 1461 Stop after the preprocessing stage; do not run the compiler 1462 proper. The output is in the form of preprocessed source code, 1463 which is sent to the standard output. 1464 1465 Input files which don't require preprocessing are ignored. 1466 1467`-o FILE' 1468 Place output in file FILE. This applies regardless to whatever 1469 sort of output is being produced, whether it be an executable file, 1470 an object file, an assembler file or preprocessed C code. 1471 1472 If `-o' is not specified, the default is to put an executable file 1473 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1474 assembler file in `SOURCE.s', a precompiled header file in 1475 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1476 output. 1477 1478`-v' 1479 Print (on standard error output) the commands executed to run the 1480 stages of compilation. Also print the version number of the 1481 compiler driver program and of the preprocessor and the compiler 1482 proper. 1483 1484`-###' 1485 Like `-v' except the commands are not executed and arguments are 1486 quoted unless they contain only alphanumeric characters or `./-_'. 1487 This is useful for shell scripts to capture the driver-generated 1488 command lines. 1489 1490`-pipe' 1491 Use pipes rather than temporary files for communication between the 1492 various stages of compilation. This fails to work on some systems 1493 where the assembler is unable to read from a pipe; but the GNU 1494 assembler has no trouble. 1495 1496`--help' 1497 Print (on the standard output) a description of the command line 1498 options understood by `gcc'. If the `-v' option is also specified 1499 then `--help' will also be passed on to the various processes 1500 invoked by `gcc', so that they can display the command line options 1501 they accept. If the `-Wextra' option has also been specified 1502 (prior to the `--help' option), then command line options which 1503 have no documentation associated with them will also be displayed. 1504 1505`--target-help' 1506 Print (on the standard output) a description of target-specific 1507 command line options for each tool. For some targets extra 1508 target-specific information may also be printed. 1509 1510`--help={CLASS|[^]QUALIFIER}[,...]' 1511 Print (on the standard output) a description of the command line 1512 options understood by the compiler that fit into all specified 1513 classes and qualifiers. These are the supported classes: 1514 1515 `optimizers' 1516 This will display all of the optimization options supported 1517 by the compiler. 1518 1519 `warnings' 1520 This will display all of the options controlling warning 1521 messages produced by the compiler. 1522 1523 `target' 1524 This will display target-specific options. Unlike the 1525 `--target-help' option however, target-specific options of the 1526 linker and assembler will not be displayed. This is because 1527 those tools do not currently support the extended `--help=' 1528 syntax. 1529 1530 `params' 1531 This will display the values recognized by the `--param' 1532 option. 1533 1534 LANGUAGE 1535 This will display the options supported for LANGUAGE, where 1536 LANGUAGE is the name of one of the languages supported in this 1537 version of GCC. 1538 1539 `common' 1540 This will display the options that are common to all 1541 languages. 1542 1543 These are the supported qualifiers: 1544 1545 `undocumented' 1546 Display only those options which are undocumented. 1547 1548 `joined' 1549 Display options which take an argument that appears after an 1550 equal sign in the same continuous piece of text, such as: 1551 `--help=target'. 1552 1553 `separate' 1554 Display options which take an argument that appears as a 1555 separate word following the original option, such as: `-o 1556 output-file'. 1557 1558 Thus for example to display all the undocumented target-specific 1559 switches supported by the compiler the following can be used: 1560 1561 --help=target,undocumented 1562 1563 The sense of a qualifier can be inverted by prefixing it with the 1564 `^' character, so for example to display all binary warning 1565 options (i.e., ones that are either on or off and that do not take 1566 an argument), which have a description the following can be used: 1567 1568 --help=warnings,^joined,^undocumented 1569 1570 The argument to `--help=' should not consist solely of inverted 1571 qualifiers. 1572 1573 Combining several classes is possible, although this usually 1574 restricts the output by so much that there is nothing to display. 1575 One case where it does work however is when one of the classes is 1576 TARGET. So for example to display all the target-specific 1577 optimization options the following can be used: 1578 1579 --help=target,optimizers 1580 1581 The `--help=' option can be repeated on the command line. Each 1582 successive use will display its requested class of options, 1583 skipping those that have already been displayed. 1584 1585 If the `-Q' option appears on the command line before the 1586 `--help=' option, then the descriptive text displayed by `--help=' 1587 is changed. Instead of describing the displayed options, an 1588 indication is given as to whether the option is enabled, disabled 1589 or set to a specific value (assuming that the compiler knows this 1590 at the point where the `--help=' option is used). 1591 1592 Here is a truncated example from the ARM port of `gcc': 1593 1594 % gcc -Q -mabi=2 --help=target -c 1595 The following options are target specific: 1596 -mabi= 2 1597 -mabort-on-noreturn [disabled] 1598 -mapcs [disabled] 1599 1600 The output is sensitive to the effects of previous command line 1601 options, so for example it is possible to find out which 1602 optimizations are enabled at `-O2' by using: 1603 1604 -Q -O2 --help=optimizers 1605 1606 Alternatively you can discover which binary optimizations are 1607 enabled by `-O3' by using: 1608 1609 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1610 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1611 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1612 1613`-no-canonical-prefixes' 1614 Do not expand any symbolic links, resolve references to `/../' or 1615 `/./', or make the path absolute when generating a relative prefix. 1616 1617`--version' 1618 Display the version number and copyrights of the invoked GCC. 1619 1620`-wrapper' 1621 Invoke all subcommands under a wrapper program. The name of the 1622 wrapper program and its parameters are passed as a comma separated 1623 list. 1624 1625 gcc -c t.c -wrapper gdb,--args 1626 1627 This will invoke all subprograms of `gcc' under `gdb --args', thus 1628 the invocation of `cc1' will be `gdb --args cc1 ...'. 1629 1630`-fplugin=NAME.so' 1631 Load the plugin code in file NAME.so, assumed to be a shared 1632 object to be dlopen'd by the compiler. The base name of the 1633 shared object file is used to identify the plugin for the purposes 1634 of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below). 1635 Each plugin should define the callback functions specified in the 1636 Plugins API. 1637 1638`-fplugin-arg-NAME-KEY=VALUE' 1639 Define an argument called KEY with a value of VALUE for the plugin 1640 called NAME. 1641 1642`-fdump-ada-spec[-slim]' 1643 For C and C++ source and include files, generate corresponding Ada 1644 specs. *Note Generating Ada Bindings for C and C++ headers: 1645 (gnat_ugn)Generating Ada Bindings for C and C++ headers, which 1646 provides detailed documentation on this feature. 1647 1648`-fdump-go-spec=FILE' 1649 For input files in any language, generate corresponding Go 1650 declarations in FILE. This generates Go `const', `type', `var', 1651 and `func' declarations which may be a useful way to start writing 1652 a Go interface to code written in some other language. 1653 1654`@FILE' 1655 Read command-line options from FILE. The options read are 1656 inserted in place of the original @FILE option. If FILE does not 1657 exist, or cannot be read, then the option will be treated 1658 literally, and not removed. 1659 1660 Options in FILE are separated by whitespace. A whitespace 1661 character may be included in an option by surrounding the entire 1662 option in either single or double quotes. Any character 1663 (including a backslash) may be included by prefixing the character 1664 to be included with a backslash. The FILE may itself contain 1665 additional @FILE options; any such options will be processed 1666 recursively. 1667 1668 1669File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1670 16713.3 Compiling C++ Programs 1672========================== 1673 1674C++ source files conventionally use one of the suffixes `.C', `.cc', 1675`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1676`.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and 1677preprocessed C++ files use the suffix `.ii'. GCC recognizes files with 1678these names and compiles them as C++ programs even if you call the 1679compiler the same way as for compiling C programs (usually with the 1680name `gcc'). 1681 1682 However, the use of `gcc' does not add the C++ library. `g++' is a 1683program that calls GCC and treats `.c', `.h' and `.i' files as C++ 1684source files instead of C source files unless `-x' is used, and 1685automatically specifies linking against the C++ library. This program 1686is also useful when precompiling a C header file with a `.h' extension 1687for use in C++ compilations. On many systems, `g++' is also installed 1688with the name `c++'. 1689 1690 When you compile C++ programs, you may specify many of the same 1691command-line options that you use for compiling programs in any 1692language; or command-line options meaningful for C and related 1693languages; or options that are meaningful only for C++ programs. *Note 1694Options Controlling C Dialect: C Dialect Options, for explanations of 1695options for languages related to C. *Note Options Controlling C++ 1696Dialect: C++ Dialect Options, for explanations of options that are 1697meaningful only for C++ programs. 1698 1699 1700File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1701 17023.4 Options Controlling C Dialect 1703================================= 1704 1705The following options control the dialect of C (or languages derived 1706from C, such as C++, Objective-C and Objective-C++) that the compiler 1707accepts: 1708 1709`-ansi' 1710 In C mode, this is equivalent to `-std=c90'. In C++ mode, it is 1711 equivalent to `-std=c++98'. 1712 1713 This turns off certain features of GCC that are incompatible with 1714 ISO C90 (when compiling C code), or of standard C++ (when 1715 compiling C++ code), such as the `asm' and `typeof' keywords, and 1716 predefined macros such as `unix' and `vax' that identify the type 1717 of system you are using. It also enables the undesirable and 1718 rarely used ISO trigraph feature. For the C compiler, it disables 1719 recognition of C++ style `//' comments as well as the `inline' 1720 keyword. 1721 1722 The alternate keywords `__asm__', `__extension__', `__inline__' 1723 and `__typeof__' continue to work despite `-ansi'. You would not 1724 want to use them in an ISO C program, of course, but it is useful 1725 to put them in header files that might be included in compilations 1726 done with `-ansi'. Alternate predefined macros such as `__unix__' 1727 and `__vax__' are also available, with or without `-ansi'. 1728 1729 The `-ansi' option does not cause non-ISO programs to be rejected 1730 gratuitously. For that, `-pedantic' is required in addition to 1731 `-ansi'. *Note Warning Options::. 1732 1733 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1734 is used. Some header files may notice this macro and refrain from 1735 declaring certain functions or defining certain macros that the 1736 ISO standard doesn't call for; this is to avoid interfering with 1737 any programs that might use these names for other things. 1738 1739 Functions that would normally be built in but do not have semantics 1740 defined by ISO C (such as `alloca' and `ffs') are not built-in 1741 functions when `-ansi' is used. *Note Other built-in functions 1742 provided by GCC: Other Builtins, for details of the functions 1743 affected. 1744 1745`-std=' 1746 Determine the language standard. *Note Language Standards 1747 Supported by GCC: Standards, for details of these standard 1748 versions. This option is currently only supported when compiling 1749 C or C++. 1750 1751 The compiler can accept several base standards, such as `c90' or 1752 `c++98', and GNU dialects of those standards, such as `gnu90' or 1753 `gnu++98'. By specifying a base standard, the compiler will 1754 accept all programs following that standard and those using GNU 1755 extensions that do not contradict it. For example, `-std=c90' 1756 turns off certain features of GCC that are incompatible with ISO 1757 C90, such as the `asm' and `typeof' keywords, but not other GNU 1758 extensions that do not have a meaning in ISO C90, such as omitting 1759 the middle term of a `?:' expression. On the other hand, by 1760 specifying a GNU dialect of a standard, all features the compiler 1761 support are enabled, even when those features change the meaning 1762 of the base standard and some strict-conforming programs may be 1763 rejected. The particular standard is used by `-pedantic' to 1764 identify which features are GNU extensions given that version of 1765 the standard. For example `-std=gnu90 -pedantic' would warn about 1766 C++ style `//' comments, while `-std=gnu99 -pedantic' would not. 1767 1768 A value for this option must be provided; possible values are 1769 1770 `c90' 1771 `c89' 1772 `iso9899:1990' 1773 Support all ISO C90 programs (certain GNU extensions that 1774 conflict with ISO C90 are disabled). Same as `-ansi' for C 1775 code. 1776 1777 `iso9899:199409' 1778 ISO C90 as modified in amendment 1. 1779 1780 `c99' 1781 `c9x' 1782 `iso9899:1999' 1783 `iso9899:199x' 1784 ISO C99. Note that this standard is not yet fully supported; 1785 see `http://gcc.gnu.org/gcc-4.6/c99status.html' for more 1786 information. The names `c9x' and `iso9899:199x' are 1787 deprecated. 1788 1789 `c1x' 1790 ISO C1X, the draft of the next revision of the ISO C standard. 1791 Support is limited and experimental and features enabled by 1792 this option may be changed or removed if changed in or 1793 removed from the standard draft. 1794 1795 `gnu90' 1796 `gnu89' 1797 GNU dialect of ISO C90 (including some C99 features). This is 1798 the default for C code. 1799 1800 `gnu99' 1801 `gnu9x' 1802 GNU dialect of ISO C99. When ISO C99 is fully implemented in 1803 GCC, this will become the default. The name `gnu9x' is 1804 deprecated. 1805 1806 `gnu1x' 1807 GNU dialect of ISO C1X. Support is limited and experimental 1808 and features enabled by this option may be changed or removed 1809 if changed in or removed from the standard draft. 1810 1811 `c++98' 1812 The 1998 ISO C++ standard plus amendments. Same as `-ansi' for 1813 C++ code. 1814 1815 `gnu++98' 1816 GNU dialect of `-std=c++98'. This is the default for C++ 1817 code. 1818 1819 `c++0x' 1820 The working draft of the upcoming ISO C++0x standard. This 1821 option enables experimental features that are likely to be 1822 included in C++0x. The working draft is constantly changing, 1823 and any feature that is enabled by this flag may be removed 1824 from future versions of GCC if it is not part of the C++0x 1825 standard. 1826 1827 `gnu++0x' 1828 GNU dialect of `-std=c++0x'. This option enables experimental 1829 features that may be removed in future versions of GCC. 1830 1831`-fgnu89-inline' 1832 The option `-fgnu89-inline' tells GCC to use the traditional GNU 1833 semantics for `inline' functions when in C99 mode. *Note An 1834 Inline Function is As Fast As a Macro: Inline. This option is 1835 accepted and ignored by GCC versions 4.1.3 up to but not including 1836 4.3. In GCC versions 4.3 and later it changes the behavior of GCC 1837 in C99 mode. Using this option is roughly equivalent to adding the 1838 `gnu_inline' function attribute to all inline functions (*note 1839 Function Attributes::). 1840 1841 The option `-fno-gnu89-inline' explicitly tells GCC to use the C99 1842 semantics for `inline' when in C99 or gnu99 mode (i.e., it 1843 specifies the default behavior). This option was first supported 1844 in GCC 4.3. This option is not supported in `-std=c90' or 1845 `-std=gnu90' mode. 1846 1847 The preprocessor macros `__GNUC_GNU_INLINE__' and 1848 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 1849 effect for `inline' functions. *Note Common Predefined Macros: 1850 (cpp)Common Predefined Macros. 1851 1852`-aux-info FILENAME' 1853 Output to the given filename prototyped declarations for all 1854 functions declared and/or defined in a translation unit, including 1855 those in header files. This option is silently ignored in any 1856 language other than C. 1857 1858 Besides declarations, the file indicates, in comments, the origin 1859 of each declaration (source file and line), whether the 1860 declaration was implicit, prototyped or unprototyped (`I', `N' for 1861 new or `O' for old, respectively, in the first character after the 1862 line number and the colon), and whether it came from a declaration 1863 or a definition (`C' or `F', respectively, in the following 1864 character). In the case of function definitions, a K&R-style list 1865 of arguments followed by their declarations is also provided, 1866 inside comments, after the declaration. 1867 1868`-fno-asm' 1869 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1870 code can use these words as identifiers. You can use the keywords 1871 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1872 `-fno-asm'. 1873 1874 In C++, this switch only affects the `typeof' keyword, since `asm' 1875 and `inline' are standard keywords. You may want to use the 1876 `-fno-gnu-keywords' flag instead, which has the same effect. In 1877 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1878 the `asm' and `typeof' keywords, since `inline' is a standard 1879 keyword in ISO C99. 1880 1881`-fno-builtin' 1882`-fno-builtin-FUNCTION' 1883 Don't recognize built-in functions that do not begin with 1884 `__builtin_' as prefix. *Note Other built-in functions provided 1885 by GCC: Other Builtins, for details of the functions affected, 1886 including those which are not built-in functions when `-ansi' or 1887 `-std' options for strict ISO C conformance are used because they 1888 do not have an ISO standard meaning. 1889 1890 GCC normally generates special code to handle certain built-in 1891 functions more efficiently; for instance, calls to `alloca' may 1892 become single instructions that adjust the stack directly, and 1893 calls to `memcpy' may become inline copy loops. The resulting 1894 code is often both smaller and faster, but since the function 1895 calls no longer appear as such, you cannot set a breakpoint on 1896 those calls, nor can you change the behavior of the functions by 1897 linking with a different library. In addition, when a function is 1898 recognized as a built-in function, GCC may use information about 1899 that function to warn about problems with calls to that function, 1900 or to generate more efficient code, even if the resulting code 1901 still contains calls to that function. For example, warnings are 1902 given with `-Wformat' for bad calls to `printf', when `printf' is 1903 built in, and `strlen' is known not to modify global memory. 1904 1905 With the `-fno-builtin-FUNCTION' option only the built-in function 1906 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 1907 If a function is named that is not built-in in this version of 1908 GCC, this option is ignored. There is no corresponding 1909 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 1910 functions selectively when using `-fno-builtin' or 1911 `-ffreestanding', you may define macros such as: 1912 1913 #define abs(n) __builtin_abs ((n)) 1914 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 1915 1916`-fhosted' 1917 Assert that compilation takes place in a hosted environment. This 1918 implies `-fbuiltin'. A hosted environment is one in which the 1919 entire standard library is available, and in which `main' has a 1920 return type of `int'. Examples are nearly everything except a 1921 kernel. This is equivalent to `-fno-freestanding'. 1922 1923`-ffreestanding' 1924 Assert that compilation takes place in a freestanding environment. 1925 This implies `-fno-builtin'. A freestanding environment is one in 1926 which the standard library may not exist, and program startup may 1927 not necessarily be at `main'. The most obvious example is an OS 1928 kernel. This is equivalent to `-fno-hosted'. 1929 1930 *Note Language Standards Supported by GCC: Standards, for details 1931 of freestanding and hosted environments. 1932 1933`-fopenmp' 1934 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 1935 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 1936 generates parallel code according to the OpenMP Application 1937 Program Interface v3.0 `http://www.openmp.org/'. This option 1938 implies `-pthread', and thus is only supported on targets that 1939 have support for `-pthread'. 1940 1941`-fms-extensions' 1942 Accept some non-standard constructs used in Microsoft header files. 1943 1944 In C++ code, this allows member names in structures to be similar 1945 to previous types declarations. 1946 1947 typedef int UOW; 1948 struct ABC { 1949 UOW UOW; 1950 }; 1951 1952 Some cases of unnamed fields in structures and unions are only 1953 accepted with this option. *Note Unnamed struct/union fields 1954 within structs/unions: Unnamed Fields, for details. 1955 1956`-fplan9-extensions' 1957 Accept some non-standard constructs used in Plan 9 code. 1958 1959 This enables `-fms-extensions', permits passing pointers to 1960 structures with anonymous fields to functions which expect 1961 pointers to elements of the type of the field, and permits 1962 referring to anonymous fields declared using a typedef. *Note 1963 Unnamed struct/union fields within structs/unions: Unnamed Fields, 1964 for details. This is only supported for C, not C++. 1965 1966`-trigraphs' 1967 Support ISO C trigraphs. The `-ansi' option (and `-std' options 1968 for strict ISO C conformance) implies `-trigraphs'. 1969 1970`-no-integrated-cpp' 1971 Performs a compilation in two passes: preprocessing and compiling. 1972 This option allows a user supplied "cc1", "cc1plus", or "cc1obj" 1973 via the `-B' option. The user supplied compilation step can then 1974 add in an additional preprocessing step after normal preprocessing 1975 but before compiling. The default is to use the integrated cpp 1976 (internal cpp) 1977 1978 The semantics of this option will change if "cc1", "cc1plus", and 1979 "cc1obj" are merged. 1980 1981`-traditional' 1982`-traditional-cpp' 1983 Formerly, these options caused GCC to attempt to emulate a 1984 pre-standard C compiler. They are now only supported with the 1985 `-E' switch. The preprocessor continues to support a pre-standard 1986 mode. See the GNU CPP manual for details. 1987 1988`-fcond-mismatch' 1989 Allow conditional expressions with mismatched types in the second 1990 and third arguments. The value of such an expression is void. 1991 This option is not supported for C++. 1992 1993`-flax-vector-conversions' 1994 Allow implicit conversions between vectors with differing numbers 1995 of elements and/or incompatible element types. This option should 1996 not be used for new code. 1997 1998`-funsigned-char' 1999 Let the type `char' be unsigned, like `unsigned char'. 2000 2001 Each kind of machine has a default for what `char' should be. It 2002 is either like `unsigned char' by default or like `signed char' by 2003 default. 2004 2005 Ideally, a portable program should always use `signed char' or 2006 `unsigned char' when it depends on the signedness of an object. 2007 But many programs have been written to use plain `char' and expect 2008 it to be signed, or expect it to be unsigned, depending on the 2009 machines they were written for. This option, and its inverse, let 2010 you make such a program work with the opposite default. 2011 2012 The type `char' is always a distinct type from each of `signed 2013 char' or `unsigned char', even though its behavior is always just 2014 like one of those two. 2015 2016`-fsigned-char' 2017 Let the type `char' be signed, like `signed char'. 2018 2019 Note that this is equivalent to `-fno-unsigned-char', which is the 2020 negative form of `-funsigned-char'. Likewise, the option 2021 `-fno-signed-char' is equivalent to `-funsigned-char'. 2022 2023`-fsigned-bitfields' 2024`-funsigned-bitfields' 2025`-fno-signed-bitfields' 2026`-fno-unsigned-bitfields' 2027 These options control whether a bit-field is signed or unsigned, 2028 when the declaration does not use either `signed' or `unsigned'. 2029 By default, such a bit-field is signed, because this is 2030 consistent: the basic integer types such as `int' are signed types. 2031 2032 2033File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 2034 20353.5 Options Controlling C++ Dialect 2036=================================== 2037 2038This section describes the command-line options that are only meaningful 2039for C++ programs; but you can also use most of the GNU compiler options 2040regardless of what language your program is in. For example, you might 2041compile a file `firstClass.C' like this: 2042 2043 g++ -g -frepo -O -c firstClass.C 2044 2045In this example, only `-frepo' is an option meant only for C++ 2046programs; you can use the other options with any language supported by 2047GCC. 2048 2049 Here is a list of options that are _only_ for compiling C++ programs: 2050 2051`-fabi-version=N' 2052 Use version N of the C++ ABI. Version 2 is the version of the C++ 2053 ABI that first appeared in G++ 3.4. Version 1 is the version of 2054 the C++ ABI that first appeared in G++ 3.2. Version 0 will always 2055 be the version that conforms most closely to the C++ ABI 2056 specification. Therefore, the ABI obtained using version 0 will 2057 change as ABI bugs are fixed. 2058 2059 The default is version 2. 2060 2061 Version 3 corrects an error in mangling a constant address as a 2062 template argument. 2063 2064 Version 4 implements a standard mangling for vector types. 2065 2066 Version 5 corrects the mangling of attribute const/volatile on 2067 function pointer types, decltype of a plain decl, and use of a 2068 function parameter in the declaration of another parameter. 2069 2070 See also `-Wabi'. 2071 2072`-fno-access-control' 2073 Turn off all access checking. This switch is mainly useful for 2074 working around bugs in the access control code. 2075 2076`-fcheck-new' 2077 Check that the pointer returned by `operator new' is non-null 2078 before attempting to modify the storage allocated. This check is 2079 normally unnecessary because the C++ standard specifies that 2080 `operator new' will only return `0' if it is declared `throw()', 2081 in which case the compiler will always check the return value even 2082 without this option. In all other cases, when `operator new' has 2083 a non-empty exception specification, memory exhaustion is 2084 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 2085 2086`-fconserve-space' 2087 Put uninitialized or runtime-initialized global variables into the 2088 common segment, as C does. This saves space in the executable at 2089 the cost of not diagnosing duplicate definitions. If you compile 2090 with this flag and your program mysteriously crashes after 2091 `main()' has completed, you may have an object that is being 2092 destroyed twice because two definitions were merged. 2093 2094 This option is no longer useful on most targets, now that support 2095 has been added for putting variables into BSS without making them 2096 common. 2097 2098`-fconstexpr-depth=N' 2099 Set the maximum nested evaluation depth for C++0x constexpr 2100 functions to N. A limit is needed to detect endless recursion 2101 during constant expression evaluation. The minimum specified by 2102 the standard is 512. 2103 2104`-fno-deduce-init-list' 2105 Disable deduction of a template type parameter as 2106 std::initializer_list from a brace-enclosed initializer list, i.e. 2107 2108 template <class T> auto forward(T t) -> decltype (realfn (t)) 2109 { 2110 return realfn (t); 2111 } 2112 2113 void f() 2114 { 2115 forward({1,2}); // call forward<std::initializer_list<int>> 2116 } 2117 2118 This option is present because this deduction is an extension to 2119 the current specification in the C++0x working draft, and there was 2120 some concern about potential overload resolution problems. 2121 2122`-ffriend-injection' 2123 Inject friend functions into the enclosing namespace, so that they 2124 are visible outside the scope of the class in which they are 2125 declared. Friend functions were documented to work this way in 2126 the old Annotated C++ Reference Manual, and versions of G++ before 2127 4.1 always worked that way. However, in ISO C++ a friend function 2128 which is not declared in an enclosing scope can only be found 2129 using argument dependent lookup. This option causes friends to be 2130 injected as they were in earlier releases. 2131 2132 This option is for compatibility, and may be removed in a future 2133 release of G++. 2134 2135`-fno-elide-constructors' 2136 The C++ standard allows an implementation to omit creating a 2137 temporary which is only used to initialize another object of the 2138 same type. Specifying this option disables that optimization, and 2139 forces G++ to call the copy constructor in all cases. 2140 2141`-fno-enforce-eh-specs' 2142 Don't generate code to check for violation of exception 2143 specifications at runtime. This option violates the C++ standard, 2144 but may be useful for reducing code size in production builds, 2145 much like defining `NDEBUG'. This does not give user code 2146 permission to throw exceptions in violation of the exception 2147 specifications; the compiler will still optimize based on the 2148 specifications, so throwing an unexpected exception will result in 2149 undefined behavior. 2150 2151`-ffor-scope' 2152`-fno-for-scope' 2153 If `-ffor-scope' is specified, the scope of variables declared in 2154 a for-init-statement is limited to the `for' loop itself, as 2155 specified by the C++ standard. If `-fno-for-scope' is specified, 2156 the scope of variables declared in a for-init-statement extends to 2157 the end of the enclosing scope, as was the case in old versions of 2158 G++, and other (traditional) implementations of C++. 2159 2160 The default if neither flag is given to follow the standard, but 2161 to allow and give a warning for old-style code that would 2162 otherwise be invalid, or have different behavior. 2163 2164`-fno-gnu-keywords' 2165 Do not recognize `typeof' as a keyword, so that code can use this 2166 word as an identifier. You can use the keyword `__typeof__' 2167 instead. `-ansi' implies `-fno-gnu-keywords'. 2168 2169`-fno-implicit-templates' 2170 Never emit code for non-inline templates which are instantiated 2171 implicitly (i.e. by use); only emit code for explicit 2172 instantiations. *Note Template Instantiation::, for more 2173 information. 2174 2175`-fno-implicit-inline-templates' 2176 Don't emit code for implicit instantiations of inline templates, 2177 either. The default is to handle inlines differently so that 2178 compiles with and without optimization will need the same set of 2179 explicit instantiations. 2180 2181`-fno-implement-inlines' 2182 To save space, do not emit out-of-line copies of inline functions 2183 controlled by `#pragma implementation'. This will cause linker 2184 errors if these functions are not inlined everywhere they are 2185 called. 2186 2187`-fms-extensions' 2188 Disable pedantic warnings about constructs used in MFC, such as 2189 implicit int and getting a pointer to member function via 2190 non-standard syntax. 2191 2192`-fno-nonansi-builtins' 2193 Disable built-in declarations of functions that are not mandated by 2194 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 2195 `bzero', `conjf', and other related functions. 2196 2197`-fnothrow-opt' 2198 Treat a `throw()' exception specification as though it were a 2199 `noexcept' specification to reduce or eliminate the text size 2200 overhead relative to a function with no exception specification. 2201 If the function has local variables of types with non-trivial 2202 destructors, the exception specification will actually make the 2203 function smaller because the EH cleanups for those variables can be 2204 optimized away. The semantic effect is that an exception thrown 2205 out of a function with such an exception specification will result 2206 in a call to `terminate' rather than `unexpected'. 2207 2208`-fno-operator-names' 2209 Do not treat the operator name keywords `and', `bitand', `bitor', 2210 `compl', `not', `or' and `xor' as synonyms as keywords. 2211 2212`-fno-optional-diags' 2213 Disable diagnostics that the standard says a compiler does not 2214 need to issue. Currently, the only such diagnostic issued by G++ 2215 is the one for a name having multiple meanings within a class. 2216 2217`-fpermissive' 2218 Downgrade some diagnostics about nonconformant code from errors to 2219 warnings. Thus, using `-fpermissive' will allow some 2220 nonconforming code to compile. 2221 2222`-fno-pretty-templates' 2223 When an error message refers to a specialization of a function 2224 template, the compiler will normally print the signature of the 2225 template followed by the template arguments and any typedefs or 2226 typenames in the signature (e.g. `void f(T) [with T = int]' rather 2227 than `void f(int)') so that it's clear which template is involved. 2228 When an error message refers to a specialization of a class 2229 template, the compiler will omit any template arguments which match 2230 the default template arguments for that template. If either of 2231 these behaviors make it harder to understand the error message 2232 rather than easier, using `-fno-pretty-templates' will disable 2233 them. 2234 2235`-frepo' 2236 Enable automatic template instantiation at link time. This option 2237 also implies `-fno-implicit-templates'. *Note Template 2238 Instantiation::, for more information. 2239 2240`-fno-rtti' 2241 Disable generation of information about every class with virtual 2242 functions for use by the C++ runtime type identification features 2243 (`dynamic_cast' and `typeid'). If you don't use those parts of 2244 the language, you can save some space by using this flag. Note 2245 that exception handling uses the same information, but it will 2246 generate it as needed. The `dynamic_cast' operator can still be 2247 used for casts that do not require runtime type information, i.e. 2248 casts to `void *' or to unambiguous base classes. 2249 2250`-fstats' 2251 Emit statistics about front-end processing at the end of the 2252 compilation. This information is generally only useful to the G++ 2253 development team. 2254 2255`-fstrict-enums' 2256 Allow the compiler to optimize using the assumption that a value of 2257 enumeration type can only be one of the values of the enumeration 2258 (as defined in the C++ standard; basically, a value which can be 2259 represented in the minimum number of bits needed to represent all 2260 the enumerators). This assumption may not be valid if the program 2261 uses a cast to convert an arbitrary integer value to the 2262 enumeration type. 2263 2264`-ftemplate-depth=N' 2265 Set the maximum instantiation depth for template classes to N. A 2266 limit on the template instantiation depth is needed to detect 2267 endless recursions during template class instantiation. ANSI/ISO 2268 C++ conforming programs must not rely on a maximum depth greater 2269 than 17 (changed to 1024 in C++0x). 2270 2271`-fno-threadsafe-statics' 2272 Do not emit the extra code to use the routines specified in the C++ 2273 ABI for thread-safe initialization of local statics. You can use 2274 this option to reduce code size slightly in code that doesn't need 2275 to be thread-safe. 2276 2277`-fuse-cxa-atexit' 2278 Register destructors for objects with static storage duration with 2279 the `__cxa_atexit' function rather than the `atexit' function. 2280 This option is required for fully standards-compliant handling of 2281 static destructors, but will only work if your C library supports 2282 `__cxa_atexit'. 2283 2284`-fno-use-cxa-get-exception-ptr' 2285 Don't use the `__cxa_get_exception_ptr' runtime routine. This 2286 will cause `std::uncaught_exception' to be incorrect, but is 2287 necessary if the runtime routine is not available. 2288 2289`-fvisibility-inlines-hidden' 2290 This switch declares that the user does not attempt to compare 2291 pointers to inline methods where the addresses of the two functions 2292 were taken in different shared objects. 2293 2294 The effect of this is that GCC may, effectively, mark inline 2295 methods with `__attribute__ ((visibility ("hidden")))' so that 2296 they do not appear in the export table of a DSO and do not require 2297 a PLT indirection when used within the DSO. Enabling this option 2298 can have a dramatic effect on load and link times of a DSO as it 2299 massively reduces the size of the dynamic export table when the 2300 library makes heavy use of templates. 2301 2302 The behavior of this switch is not quite the same as marking the 2303 methods as hidden directly, because it does not affect static 2304 variables local to the function or cause the compiler to deduce 2305 that the function is defined in only one shared object. 2306 2307 You may mark a method as having a visibility explicitly to negate 2308 the effect of the switch for that method. For example, if you do 2309 want to compare pointers to a particular inline method, you might 2310 mark it as having default visibility. Marking the enclosing class 2311 with explicit visibility will have no effect. 2312 2313 Explicitly instantiated inline methods are unaffected by this 2314 option as their linkage might otherwise cross a shared library 2315 boundary. *Note Template Instantiation::. 2316 2317`-fvisibility-ms-compat' 2318 This flag attempts to use visibility settings to make GCC's C++ 2319 linkage model compatible with that of Microsoft Visual Studio. 2320 2321 The flag makes these changes to GCC's linkage model: 2322 2323 1. It sets the default visibility to `hidden', like 2324 `-fvisibility=hidden'. 2325 2326 2. Types, but not their members, are not hidden by default. 2327 2328 3. The One Definition Rule is relaxed for types without explicit 2329 visibility specifications which are defined in more than one 2330 different shared object: those declarations are permitted if 2331 they would have been permitted when this option was not used. 2332 2333 In new code it is better to use `-fvisibility=hidden' and export 2334 those classes which are intended to be externally visible. 2335 Unfortunately it is possible for code to rely, perhaps 2336 accidentally, on the Visual Studio behavior. 2337 2338 Among the consequences of these changes are that static data 2339 members of the same type with the same name but defined in 2340 different shared objects will be different, so changing one will 2341 not change the other; and that pointers to function members 2342 defined in different shared objects may not compare equal. When 2343 this flag is given, it is a violation of the ODR to define types 2344 with the same name differently. 2345 2346`-fno-weak' 2347 Do not use weak symbol support, even if it is provided by the 2348 linker. By default, G++ will use weak symbols if they are 2349 available. This option exists only for testing, and should not be 2350 used by end-users; it will result in inferior code and has no 2351 benefits. This option may be removed in a future release of G++. 2352 2353`-nostdinc++' 2354 Do not search for header files in the standard directories 2355 specific to C++, but do still search the other standard 2356 directories. (This option is used when building the C++ library.) 2357 2358 In addition, these optimization, warning, and code generation options 2359have meanings only for C++ programs: 2360 2361`-fno-default-inline' 2362 Do not assume `inline' for functions defined inside a class scope. 2363 *Note Options That Control Optimization: Optimize Options. Note 2364 that these functions will have linkage like inline functions; they 2365 just won't be inlined by default. 2366 2367`-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2368 Warn when G++ generates code that is probably not compatible with 2369 the vendor-neutral C++ ABI. Although an effort has been made to 2370 warn about all such cases, there are probably some cases that are 2371 not warned about, even though G++ is generating incompatible code. 2372 There may also be cases where warnings are emitted even though the 2373 code that is generated will be compatible. 2374 2375 You should rewrite your code to avoid these warnings if you are 2376 concerned about the fact that code generated by G++ may not be 2377 binary compatible with code generated by other compilers. 2378 2379 The known incompatibilities in `-fabi-version=2' (the default) 2380 include: 2381 2382 * A template with a non-type template parameter of reference 2383 type is mangled incorrectly: 2384 extern int N; 2385 template <int &> struct S {}; 2386 void n (S<N>) {2} 2387 2388 This is fixed in `-fabi-version=3'. 2389 2390 * SIMD vector types declared using `__attribute 2391 ((vector_size))' are mangled in a non-standard way that does 2392 not allow for overloading of functions taking vectors of 2393 different sizes. 2394 2395 The mangling is changed in `-fabi-version=4'. 2396 2397 The known incompatibilities in `-fabi-version=1' include: 2398 2399 * Incorrect handling of tail-padding for bit-fields. G++ may 2400 attempt to pack data into the same byte as a base class. For 2401 example: 2402 2403 struct A { virtual void f(); int f1 : 1; }; 2404 struct B : public A { int f2 : 1; }; 2405 2406 In this case, G++ will place `B::f2' into the same byte 2407 as`A::f1'; other compilers will not. You can avoid this 2408 problem by explicitly padding `A' so that its size is a 2409 multiple of the byte size on your platform; that will cause 2410 G++ and other compilers to layout `B' identically. 2411 2412 * Incorrect handling of tail-padding for virtual bases. G++ 2413 does not use tail padding when laying out virtual bases. For 2414 example: 2415 2416 struct A { virtual void f(); char c1; }; 2417 struct B { B(); char c2; }; 2418 struct C : public A, public virtual B {}; 2419 2420 In this case, G++ will not place `B' into the tail-padding for 2421 `A'; other compilers will. You can avoid this problem by 2422 explicitly padding `A' so that its size is a multiple of its 2423 alignment (ignoring virtual base classes); that will cause 2424 G++ and other compilers to layout `C' identically. 2425 2426 * Incorrect handling of bit-fields with declared widths greater 2427 than that of their underlying types, when the bit-fields 2428 appear in a union. For example: 2429 2430 union U { int i : 4096; }; 2431 2432 Assuming that an `int' does not have 4096 bits, G++ will make 2433 the union too small by the number of bits in an `int'. 2434 2435 * Empty classes can be placed at incorrect offsets. For 2436 example: 2437 2438 struct A {}; 2439 2440 struct B { 2441 A a; 2442 virtual void f (); 2443 }; 2444 2445 struct C : public B, public A {}; 2446 2447 G++ will place the `A' base class of `C' at a nonzero offset; 2448 it should be placed at offset zero. G++ mistakenly believes 2449 that the `A' data member of `B' is already at offset zero. 2450 2451 * Names of template functions whose types involve `typename' or 2452 template template parameters can be mangled incorrectly. 2453 2454 template <typename Q> 2455 void f(typename Q::X) {} 2456 2457 template <template <typename> class Q> 2458 void f(typename Q<int>::X) {} 2459 2460 Instantiations of these templates may be mangled incorrectly. 2461 2462 2463 It also warns psABI related changes. The known psABI changes at 2464 this point include: 2465 2466 * For SYSV/x86-64, when passing union with long double, it is 2467 changed to pass in memory as specified in psABI. For example: 2468 2469 union U { 2470 long double ld; 2471 int i; 2472 }; 2473 2474 `union U' will always be passed in memory. 2475 2476 2477`-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2478 Warn when a class seems unusable because all the constructors or 2479 destructors in that class are private, and it has neither friends 2480 nor public static member functions. 2481 2482`-Wnoexcept (C++ and Objective-C++ only)' 2483 Warn when a noexcept-expression evaluates to false because of a 2484 call to a function that does not have a non-throwing exception 2485 specification (i.e. `throw()' or `noexcept') but is known by the 2486 compiler to never throw an exception. 2487 2488`-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2489 Warn when a class has virtual functions and accessible non-virtual 2490 destructor, in which case it would be possible but unsafe to delete 2491 an instance of a derived class through a pointer to the base class. 2492 This warning is also enabled if -Weffc++ is specified. 2493 2494`-Wreorder (C++ and Objective-C++ only)' 2495 Warn when the order of member initializers given in the code does 2496 not match the order in which they must be executed. For instance: 2497 2498 struct A { 2499 int i; 2500 int j; 2501 A(): j (0), i (1) { } 2502 }; 2503 2504 The compiler will rearrange the member initializers for `i' and 2505 `j' to match the declaration order of the members, emitting a 2506 warning to that effect. This warning is enabled by `-Wall'. 2507 2508 The following `-W...' options are not affected by `-Wall'. 2509 2510`-Weffc++ (C++ and Objective-C++ only)' 2511 Warn about violations of the following style guidelines from Scott 2512 Meyers' `Effective C++' book: 2513 2514 * Item 11: Define a copy constructor and an assignment 2515 operator for classes with dynamically allocated memory. 2516 2517 * Item 12: Prefer initialization to assignment in constructors. 2518 2519 * Item 14: Make destructors virtual in base classes. 2520 2521 * Item 15: Have `operator=' return a reference to `*this'. 2522 2523 * Item 23: Don't try to return a reference when you must 2524 return an object. 2525 2526 2527 Also warn about violations of the following style guidelines from 2528 Scott Meyers' `More Effective C++' book: 2529 2530 * Item 6: Distinguish between prefix and postfix forms of 2531 increment and decrement operators. 2532 2533 * Item 7: Never overload `&&', `||', or `,'. 2534 2535 2536 When selecting this option, be aware that the standard library 2537 headers do not obey all of these guidelines; use `grep -v' to 2538 filter out those warnings. 2539 2540`-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2541 Warn also about the use of an uncasted `NULL' as sentinel. When 2542 compiling only with GCC this is a valid sentinel, as `NULL' is 2543 defined to `__null'. Although it is a null pointer constant not a 2544 null pointer, it is guaranteed to be of the same size as a 2545 pointer. But this use is not portable across different compilers. 2546 2547`-Wno-non-template-friend (C++ and Objective-C++ only)' 2548 Disable warnings when non-templatized friend functions are declared 2549 within a template. Since the advent of explicit template 2550 specification support in G++, if the name of the friend is an 2551 unqualified-id (i.e., `friend foo(int)'), the C++ language 2552 specification demands that the friend declare or define an 2553 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2554 implemented explicit specification, unqualified-ids could be 2555 interpreted as a particular specialization of a templatized 2556 function. Because this non-conforming behavior is no longer the 2557 default behavior for G++, `-Wnon-template-friend' allows the 2558 compiler to check existing code for potential trouble spots and is 2559 on by default. This new compiler behavior can be turned off with 2560 `-Wno-non-template-friend' which keeps the conformant compiler code 2561 but disables the helpful warning. 2562 2563`-Wold-style-cast (C++ and Objective-C++ only)' 2564 Warn if an old-style (C-style) cast to a non-void type is used 2565 within a C++ program. The new-style casts (`dynamic_cast', 2566 `static_cast', `reinterpret_cast', and `const_cast') are less 2567 vulnerable to unintended effects and much easier to search for. 2568 2569`-Woverloaded-virtual (C++ and Objective-C++ only)' 2570 Warn when a function declaration hides virtual functions from a 2571 base class. For example, in: 2572 2573 struct A { 2574 virtual void f(); 2575 }; 2576 2577 struct B: public A { 2578 void f(int); 2579 }; 2580 2581 the `A' class version of `f' is hidden in `B', and code like: 2582 2583 B* b; 2584 b->f(); 2585 2586 will fail to compile. 2587 2588`-Wno-pmf-conversions (C++ and Objective-C++ only)' 2589 Disable the diagnostic for converting a bound pointer to member 2590 function to a plain pointer. 2591 2592`-Wsign-promo (C++ and Objective-C++ only)' 2593 Warn when overload resolution chooses a promotion from unsigned or 2594 enumerated type to a signed type, over a conversion to an unsigned 2595 type of the same size. Previous versions of G++ would try to 2596 preserve unsignedness, but the standard mandates the current 2597 behavior. 2598 2599 struct A { 2600 operator int (); 2601 A& operator = (int); 2602 }; 2603 2604 main () 2605 { 2606 A a,b; 2607 a = b; 2608 } 2609 2610 In this example, G++ will synthesize a default `A& operator = 2611 (const A&);', while cfront will use the user-defined `operator ='. 2612 2613 2614File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2615 26163.6 Options Controlling Objective-C and Objective-C++ Dialects 2617============================================================== 2618 2619(NOTE: This manual does not describe the Objective-C and Objective-C++ 2620languages themselves. *Note Language Standards Supported by GCC: 2621Standards, for references.) 2622 2623 This section describes the command-line options that are only 2624meaningful for Objective-C and Objective-C++ programs, but you can also 2625use most of the language-independent GNU compiler options. For 2626example, you might compile a file `some_class.m' like this: 2627 2628 gcc -g -fgnu-runtime -O -c some_class.m 2629 2630In this example, `-fgnu-runtime' is an option meant only for 2631Objective-C and Objective-C++ programs; you can use the other options 2632with any language supported by GCC. 2633 2634 Note that since Objective-C is an extension of the C language, 2635Objective-C compilations may also use options specific to the C 2636front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2637compilations may use C++-specific options (e.g., `-Wabi'). 2638 2639 Here is a list of options that are _only_ for compiling Objective-C 2640and Objective-C++ programs: 2641 2642`-fconstant-string-class=CLASS-NAME' 2643 Use CLASS-NAME as the name of the class to instantiate for each 2644 literal string specified with the syntax `@"..."'. The default 2645 class name is `NXConstantString' if the GNU runtime is being used, 2646 and `NSConstantString' if the NeXT runtime is being used (see 2647 below). The `-fconstant-cfstrings' option, if also present, will 2648 override the `-fconstant-string-class' setting and cause `@"..."' 2649 literals to be laid out as constant CoreFoundation strings. 2650 2651`-fgnu-runtime' 2652 Generate object code compatible with the standard GNU Objective-C 2653 runtime. This is the default for most types of systems. 2654 2655`-fnext-runtime' 2656 Generate output compatible with the NeXT runtime. This is the 2657 default for NeXT-based systems, including Darwin and Mac OS X. 2658 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 2659 option is used. 2660 2661`-fno-nil-receivers' 2662 Assume that all Objective-C message dispatches (`[receiver 2663 message:arg]') in this translation unit ensure that the receiver is 2664 not `nil'. This allows for more efficient entry points in the 2665 runtime to be used. This option is only available in conjunction 2666 with the NeXT runtime and ABI version 0 or 1. 2667 2668`-fobjc-abi-version=N' 2669 Use version N of the Objective-C ABI for the selected runtime. 2670 This option is currently supported only for the NeXT runtime. In 2671 that case, Version 0 is the traditional (32-bit) ABI without 2672 support for properties and other Objective-C 2.0 additions. 2673 Version 1 is the traditional (32-bit) ABI with support for 2674 properties and other Objective-C 2.0 additions. Version 2 is the 2675 modern (64-bit) ABI. If nothing is specified, the default is 2676 Version 0 on 32-bit target machines, and Version 2 on 64-bit 2677 target machines. 2678 2679`-fobjc-call-cxx-cdtors' 2680 For each Objective-C class, check if any of its instance variables 2681 is a C++ object with a non-trivial default constructor. If so, 2682 synthesize a special `- (id) .cxx_construct' instance method that 2683 will run non-trivial default constructors on any such instance 2684 variables, in order, and then return `self'. Similarly, check if 2685 any instance variable is a C++ object with a non-trivial 2686 destructor, and if so, synthesize a special `- (void) 2687 .cxx_destruct' method that will run all such default destructors, 2688 in reverse order. 2689 2690 The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods 2691 thusly generated will only operate on instance variables declared 2692 in the current Objective-C class, and not those inherited from 2693 superclasses. It is the responsibility of the Objective-C runtime 2694 to invoke all such methods in an object's inheritance hierarchy. 2695 The `- (id) .cxx_construct' methods will be invoked by the runtime 2696 immediately after a new object instance is allocated; the `- 2697 (void) .cxx_destruct' methods will be invoked immediately before 2698 the runtime deallocates an object instance. 2699 2700 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2701 later has support for invoking the `- (id) .cxx_construct' and `- 2702 (void) .cxx_destruct' methods. 2703 2704`-fobjc-direct-dispatch' 2705 Allow fast jumps to the message dispatcher. On Darwin this is 2706 accomplished via the comm page. 2707 2708`-fobjc-exceptions' 2709 Enable syntactic support for structured exception handling in 2710 Objective-C, similar to what is offered by C++ and Java. This 2711 option is required to use the Objective-C keywords `@try', 2712 `@throw', `@catch', `@finally' and `@synchronized'. This option 2713 is available with both the GNU runtime and the NeXT runtime (but 2714 not available in conjunction with the NeXT runtime on Mac OS X 2715 10.2 and earlier). 2716 2717`-fobjc-gc' 2718 Enable garbage collection (GC) in Objective-C and Objective-C++ 2719 programs. This option is only available with the NeXT runtime; the 2720 GNU runtime has a different garbage collection implementation that 2721 does not require special compiler flags. 2722 2723`-fobjc-nilcheck' 2724 For the NeXT runtime with version 2 of the ABI, check for a nil 2725 receiver in method invocations before doing the actual method call. 2726 This is the default and can be disabled using 2727 `-fno-objc-nilcheck'. Class methods and super calls are never 2728 checked for nil in this way no matter what this flag is set to. 2729 Currently this flag does nothing when the GNU runtime, or an older 2730 version of the NeXT runtime ABI, is used. 2731 2732`-fobjc-std=objc1' 2733 Conform to the language syntax of Objective-C 1.0, the language 2734 recognized by GCC 4.0. This only affects the Objective-C 2735 additions to the C/C++ language; it does not affect conformance to 2736 C/C++ standards, which is controlled by the separate C/C++ dialect 2737 option flags. When this option is used with the Objective-C or 2738 Objective-C++ compiler, any Objective-C syntax that is not 2739 recognized by GCC 4.0 is rejected. This is useful if you need to 2740 make sure that your Objective-C code can be compiled with older 2741 versions of GCC. 2742 2743`-freplace-objc-classes' 2744 Emit a special marker instructing `ld(1)' not to statically link in 2745 the resulting object file, and allow `dyld(1)' to load it in at 2746 run time instead. This is used in conjunction with the 2747 Fix-and-Continue debugging mode, where the object file in question 2748 may be recompiled and dynamically reloaded in the course of 2749 program execution, without the need to restart the program itself. 2750 Currently, Fix-and-Continue functionality is only available in 2751 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2752 2753`-fzero-link' 2754 When compiling for the NeXT runtime, the compiler ordinarily 2755 replaces calls to `objc_getClass("...")' (when the name of the 2756 class is known at compile time) with static class references that 2757 get initialized at load time, which improves run-time performance. 2758 Specifying the `-fzero-link' flag suppresses this behavior and 2759 causes calls to `objc_getClass("...")' to be retained. This is 2760 useful in Zero-Link debugging mode, since it allows for individual 2761 class implementations to be modified during program execution. 2762 The GNU runtime currently always retains calls to 2763 `objc_get_class("...")' regardless of command line options. 2764 2765`-gen-decls' 2766 Dump interface declarations for all classes seen in the source 2767 file to a file named `SOURCENAME.decl'. 2768 2769`-Wassign-intercept (Objective-C and Objective-C++ only)' 2770 Warn whenever an Objective-C assignment is being intercepted by the 2771 garbage collector. 2772 2773`-Wno-protocol (Objective-C and Objective-C++ only)' 2774 If a class is declared to implement a protocol, a warning is 2775 issued for every method in the protocol that is not implemented by 2776 the class. The default behavior is to issue a warning for every 2777 method not explicitly implemented in the class, even if a method 2778 implementation is inherited from the superclass. If you use the 2779 `-Wno-protocol' option, then methods inherited from the superclass 2780 are considered to be implemented, and no warning is issued for 2781 them. 2782 2783`-Wselector (Objective-C and Objective-C++ only)' 2784 Warn if multiple methods of different types for the same selector 2785 are found during compilation. The check is performed on the list 2786 of methods in the final stage of compilation. Additionally, a 2787 check is performed for each selector appearing in a 2788 `@selector(...)' expression, and a corresponding method for that 2789 selector has been found during compilation. Because these checks 2790 scan the method table only at the end of compilation, these 2791 warnings are not produced if the final stage of compilation is not 2792 reached, for example because an error is found during compilation, 2793 or because the `-fsyntax-only' option is being used. 2794 2795`-Wstrict-selector-match (Objective-C and Objective-C++ only)' 2796 Warn if multiple methods with differing argument and/or return 2797 types are found for a given selector when attempting to send a 2798 message using this selector to a receiver of type `id' or `Class'. 2799 When this flag is off (which is the default behavior), the 2800 compiler will omit such warnings if any differences found are 2801 confined to types which share the same size and alignment. 2802 2803`-Wundeclared-selector (Objective-C and Objective-C++ only)' 2804 Warn if a `@selector(...)' expression referring to an undeclared 2805 selector is found. A selector is considered undeclared if no 2806 method with that name has been declared before the 2807 `@selector(...)' expression, either explicitly in an `@interface' 2808 or `@protocol' declaration, or implicitly in an `@implementation' 2809 section. This option always performs its checks as soon as a 2810 `@selector(...)' expression is found, while `-Wselector' only 2811 performs its checks in the final stage of compilation. This also 2812 enforces the coding style convention that methods and selectors 2813 must be declared before being used. 2814 2815`-print-objc-runtime-info' 2816 Generate C header describing the largest structure that is passed 2817 by value, if any. 2818 2819 2820 2821File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2822 28233.7 Options to Control Diagnostic Messages Formatting 2824===================================================== 2825 2826Traditionally, diagnostic messages have been formatted irrespective of 2827the output device's aspect (e.g. its width, ...). The options described 2828below can be used to control the diagnostic messages formatting 2829algorithm, e.g. how many characters per line, how often source location 2830information should be reported. Right now, only the C++ front end can 2831honor these options. However it is expected, in the near future, that 2832the remaining front ends would be able to digest them correctly. 2833 2834`-fmessage-length=N' 2835 Try to format error messages so that they fit on lines of about N 2836 characters. The default is 72 characters for `g++' and 0 for the 2837 rest of the front ends supported by GCC. If N is zero, then no 2838 line-wrapping will be done; each error message will appear on a 2839 single line. 2840 2841`-fdiagnostics-show-location=once' 2842 Only meaningful in line-wrapping mode. Instructs the diagnostic 2843 messages reporter to emit _once_ source location information; that 2844 is, in case the message is too long to fit on a single physical 2845 line and has to be wrapped, the source location won't be emitted 2846 (as prefix) again, over and over, in subsequent continuation 2847 lines. This is the default behavior. 2848 2849`-fdiagnostics-show-location=every-line' 2850 Only meaningful in line-wrapping mode. Instructs the diagnostic 2851 messages reporter to emit the same source location information (as 2852 prefix) for physical lines that result from the process of breaking 2853 a message which is too long to fit on a single line. 2854 2855`-fno-diagnostics-show-option' 2856 By default, each diagnostic emitted includes text which indicates 2857 the command line option that directly controls the diagnostic (if 2858 such an option is known to the diagnostic machinery). Specifying 2859 the `-fno-diagnostics-show-option' flag suppresses that behavior. 2860 2861`-Wcoverage-mismatch' 2862 Warn if feedback profiles do not match when using the 2863 `-fprofile-use' option. If a source file was changed between 2864 `-fprofile-gen' and `-fprofile-use', the files with the profile 2865 feedback can fail to match the source file and GCC can not use the 2866 profile feedback information. By default, this warning is enabled 2867 and is treated as an error. `-Wno-coverage-mismatch' can be used 2868 to disable the warning or `-Wno-error=coverage-mismatch' can be 2869 used to disable the error. Disable the error for this warning can 2870 result in poorly optimized code, so disabling the error is useful 2871 only in the case of very minor changes such as bug fixes to an 2872 existing code-base. Completely disabling the warning is not 2873 recommended. 2874 2875 2876 2877File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 2878 28793.8 Options to Request or Suppress Warnings 2880=========================================== 2881 2882Warnings are diagnostic messages that report constructions which are 2883not inherently erroneous but which are risky or suggest there may have 2884been an error. 2885 2886 The following language-independent options do not enable specific 2887warnings but control the kinds of diagnostics produced by GCC. 2888 2889`-fsyntax-only' 2890 Check the code for syntax errors, but don't do anything beyond 2891 that. 2892 2893`-fmax-errors=N' 2894 Limits the maximum number of error messages to N, at which point 2895 GCC bails out rather than attempting to continue processing the 2896 source code. If N is 0 (the default), there is no limit on the 2897 number of error messages produced. If `-Wfatal-errors' is also 2898 specified, then `-Wfatal-errors' takes precedence over this option. 2899 2900`-w' 2901 Inhibit all warning messages. 2902 2903`-Werror' 2904 Make all warnings into errors. 2905 2906`-Werror=' 2907 Make the specified warning into an error. The specifier for a 2908 warning is appended, for example `-Werror=switch' turns the 2909 warnings controlled by `-Wswitch' into errors. This switch takes a 2910 negative form, to be used to negate `-Werror' for specific 2911 warnings, for example `-Wno-error=switch' makes `-Wswitch' 2912 warnings not be errors, even when `-Werror' is in effect. 2913 2914 The warning message for each controllable warning includes the 2915 option which controls the warning. That option can then be used 2916 with `-Werror=' and `-Wno-error=' as described above. (Printing 2917 of the option in the warning message can be disabled using the 2918 `-fno-diagnostics-show-option' flag.) 2919 2920 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 2921 However, `-Wno-error='FOO does not imply anything. 2922 2923`-Wfatal-errors' 2924 This option causes the compiler to abort compilation on the first 2925 error occurred rather than trying to keep going and printing 2926 further error messages. 2927 2928 2929 You can request many specific warnings with options beginning `-W', 2930for example `-Wimplicit' to request warnings on implicit declarations. 2931Each of these specific warning options also has a negative form 2932beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. 2933This manual lists only one of the two forms, whichever is not the 2934default. For further, language-specific options also refer to *note 2935C++ Dialect Options:: and *note Objective-C and Objective-C++ Dialect 2936Options::. 2937 2938 When an unrecognized warning option is requested (e.g., 2939`-Wunknown-warning'), GCC will emit a diagnostic stating that the 2940option is not recognized. However, if the `-Wno-' form is used, the 2941behavior is slightly different: No diagnostic will be produced for 2942`-Wno-unknown-warning' unless other diagnostics are being produced. 2943This allows the use of new `-Wno-' options with old compilers, but if 2944something goes wrong, the compiler will warn that an unrecognized 2945option was used. 2946 2947`-pedantic' 2948 Issue all the warnings demanded by strict ISO C and ISO C++; 2949 reject all programs that use forbidden extensions, and some other 2950 programs that do not follow ISO C and ISO C++. For ISO C, follows 2951 the version of the ISO C standard specified by any `-std' option 2952 used. 2953 2954 Valid ISO C and ISO C++ programs should compile properly with or 2955 without this option (though a rare few will require `-ansi' or a 2956 `-std' option specifying the required version of ISO C). However, 2957 without this option, certain GNU extensions and traditional C and 2958 C++ features are supported as well. With this option, they are 2959 rejected. 2960 2961 `-pedantic' does not cause warning messages for use of the 2962 alternate keywords whose names begin and end with `__'. Pedantic 2963 warnings are also disabled in the expression that follows 2964 `__extension__'. However, only system header files should use 2965 these escape routes; application programs should avoid them. 2966 *Note Alternate Keywords::. 2967 2968 Some users try to use `-pedantic' to check programs for strict ISO 2969 C conformance. They soon find that it does not do quite what they 2970 want: it finds some non-ISO practices, but not all--only those for 2971 which ISO C _requires_ a diagnostic, and some others for which 2972 diagnostics have been added. 2973 2974 A feature to report any failure to conform to ISO C might be 2975 useful in some instances, but would require considerable 2976 additional work and would be quite different from `-pedantic'. We 2977 don't have plans to support such a feature in the near future. 2978 2979 Where the standard specified with `-std' represents a GNU extended 2980 dialect of C, such as `gnu90' or `gnu99', there is a corresponding 2981 "base standard", the version of ISO C on which the GNU extended 2982 dialect is based. Warnings from `-pedantic' are given where they 2983 are required by the base standard. (It would not make sense for 2984 such warnings to be given only for features not in the specified 2985 GNU C dialect, since by definition the GNU dialects of C include 2986 all features the compiler supports with the given option, and 2987 there would be nothing to warn about.) 2988 2989`-pedantic-errors' 2990 Like `-pedantic', except that errors are produced rather than 2991 warnings. 2992 2993`-Wall' 2994 This enables all the warnings about constructions that some users 2995 consider questionable, and that are easy to avoid (or modify to 2996 prevent the warning), even in conjunction with macros. This also 2997 enables some language-specific warnings described in *note C++ 2998 Dialect Options:: and *note Objective-C and Objective-C++ Dialect 2999 Options::. 3000 3001 `-Wall' turns on the following warning flags: 3002 3003 -Waddress 3004 -Warray-bounds (only with `-O2') 3005 -Wc++0x-compat 3006 -Wchar-subscripts 3007 -Wenum-compare (in C/Objc; this is on by default in C++) 3008 -Wimplicit-int (C and Objective-C only) 3009 -Wimplicit-function-declaration (C and Objective-C only) 3010 -Wcomment 3011 -Wformat 3012 -Wmain (only for C/ObjC and unless `-ffreestanding') 3013 -Wmissing-braces 3014 -Wnonnull 3015 -Wparentheses 3016 -Wpointer-sign 3017 -Wreorder 3018 -Wreturn-type 3019 -Wsequence-point 3020 -Wsign-compare (only in C++) 3021 -Wstrict-aliasing 3022 -Wstrict-overflow=1 3023 -Wswitch 3024 -Wtrigraphs 3025 -Wuninitialized 3026 -Wunknown-pragmas 3027 -Wunused-function 3028 -Wunused-label 3029 -Wunused-value 3030 -Wunused-variable 3031 -Wvolatile-register-var 3032 3033 Note that some warning flags are not implied by `-Wall'. Some of 3034 them warn about constructions that users generally do not consider 3035 questionable, but which occasionally you might wish to check for; 3036 others warn about constructions that are necessary or hard to 3037 avoid in some cases, and there is no simple way to modify the code 3038 to suppress the warning. Some of them are enabled by `-Wextra' but 3039 many of them must be enabled individually. 3040 3041`-Wextra' 3042 This enables some extra warning flags that are not enabled by 3043 `-Wall'. (This option used to be called `-W'. The older name is 3044 still supported, but the newer name is more descriptive.) 3045 3046 -Wclobbered 3047 -Wempty-body 3048 -Wignored-qualifiers 3049 -Wmissing-field-initializers 3050 -Wmissing-parameter-type (C only) 3051 -Wold-style-declaration (C only) 3052 -Woverride-init 3053 -Wsign-compare 3054 -Wtype-limits 3055 -Wuninitialized 3056 -Wunused-parameter (only with `-Wunused' or `-Wall') 3057 -Wunused-but-set-parameter (only with `-Wunused' or `-Wall') 3058 3059 The option `-Wextra' also prints warning messages for the 3060 following cases: 3061 3062 * A pointer is compared against integer zero with `<', `<=', 3063 `>', or `>='. 3064 3065 * (C++ only) An enumerator and a non-enumerator both appear in a 3066 conditional expression. 3067 3068 * (C++ only) Ambiguous virtual bases. 3069 3070 * (C++ only) Subscripting an array which has been declared 3071 `register'. 3072 3073 * (C++ only) Taking the address of a variable which has been 3074 declared `register'. 3075 3076 * (C++ only) A base class is not initialized in a derived 3077 class' copy constructor. 3078 3079 3080`-Wchar-subscripts' 3081 Warn if an array subscript has type `char'. This is a common cause 3082 of error, as programmers often forget that this type is signed on 3083 some machines. This warning is enabled by `-Wall'. 3084 3085`-Wcomment' 3086 Warn whenever a comment-start sequence `/*' appears in a `/*' 3087 comment, or whenever a Backslash-Newline appears in a `//' comment. 3088 This warning is enabled by `-Wall'. 3089 3090`-Wno-cpp' 3091 (C, Objective-C, C++, Objective-C++ and Fortran only) 3092 3093 Suppress warning messages emitted by `#warning' directives. 3094 3095`-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)' 3096 Give a warning when a value of type `float' is implicitly promoted 3097 to `double'. CPUs with a 32-bit "single-precision" floating-point 3098 unit implement `float' in hardware, but emulate `double' in 3099 software. On such a machine, doing computations using `double' 3100 values is much more expensive because of the overhead required for 3101 software emulation. 3102 3103 It is easy to accidentally do computations with `double' because 3104 floating-point literals are implicitly of type `double'. For 3105 example, in: 3106 float area(float radius) 3107 { 3108 return 3.14159 * radius * radius; 3109 } 3110 the compiler will perform the entire computation with `double' 3111 because the floating-point literal is a `double'. 3112 3113`-Wformat' 3114 Check calls to `printf' and `scanf', etc., to make sure that the 3115 arguments supplied have types appropriate to the format string 3116 specified, and that the conversions specified in the format string 3117 make sense. This includes standard functions, and others 3118 specified by format attributes (*note Function Attributes::), in 3119 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 3120 extension, not in the C standard) families (or other 3121 target-specific families). Which functions are checked without 3122 format attributes having been specified depends on the standard 3123 version selected, and such checks of functions without the 3124 attribute specified are disabled by `-ffreestanding' or 3125 `-fno-builtin'. 3126 3127 The formats are checked against the format features supported by 3128 GNU libc version 2.2. These include all ISO C90 and C99 features, 3129 as well as features from the Single Unix Specification and some 3130 BSD and GNU extensions. Other library implementations may not 3131 support all these features; GCC does not support warning about 3132 features that go beyond a particular library's limitations. 3133 However, if `-pedantic' is used with `-Wformat', warnings will be 3134 given about format features not in the selected standard version 3135 (but not for `strfmon' formats, since those are not in any version 3136 of the C standard). *Note Options Controlling C Dialect: C 3137 Dialect Options. 3138 3139 Since `-Wformat' also checks for null format arguments for several 3140 functions, `-Wformat' also implies `-Wnonnull'. 3141 3142 `-Wformat' is included in `-Wall'. For more control over some 3143 aspects of format checking, the options `-Wformat-y2k', 3144 `-Wno-format-extra-args', `-Wno-format-zero-length', 3145 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are 3146 available, but are not included in `-Wall'. 3147 3148`-Wformat-y2k' 3149 If `-Wformat' is specified, also warn about `strftime' formats 3150 which may yield only a two-digit year. 3151 3152`-Wno-format-contains-nul' 3153 If `-Wformat' is specified, do not warn about format strings that 3154 contain NUL bytes. 3155 3156`-Wno-format-extra-args' 3157 If `-Wformat' is specified, do not warn about excess arguments to a 3158 `printf' or `scanf' format function. The C standard specifies 3159 that such arguments are ignored. 3160 3161 Where the unused arguments lie between used arguments that are 3162 specified with `$' operand number specifications, normally 3163 warnings are still given, since the implementation could not know 3164 what type to pass to `va_arg' to skip the unused arguments. 3165 However, in the case of `scanf' formats, this option will suppress 3166 the warning if the unused arguments are all pointers, since the 3167 Single Unix Specification says that such unused arguments are 3168 allowed. 3169 3170`-Wno-format-zero-length (C and Objective-C only)' 3171 If `-Wformat' is specified, do not warn about zero-length formats. 3172 The C standard specifies that zero-length formats are allowed. 3173 3174`-Wformat-nonliteral' 3175 If `-Wformat' is specified, also warn if the format string is not a 3176 string literal and so cannot be checked, unless the format function 3177 takes its format arguments as a `va_list'. 3178 3179`-Wformat-security' 3180 If `-Wformat' is specified, also warn about uses of format 3181 functions that represent possible security problems. At present, 3182 this warns about calls to `printf' and `scanf' functions where the 3183 format string is not a string literal and there are no format 3184 arguments, as in `printf (foo);'. This may be a security hole if 3185 the format string came from untrusted input and contains `%n'. 3186 (This is currently a subset of what `-Wformat-nonliteral' warns 3187 about, but in future warnings may be added to `-Wformat-security' 3188 that are not included in `-Wformat-nonliteral'.) 3189 3190`-Wformat=2' 3191 Enable `-Wformat' plus format checks not included in `-Wformat'. 3192 Currently equivalent to `-Wformat -Wformat-nonliteral 3193 -Wformat-security -Wformat-y2k'. 3194 3195`-Wnonnull (C and Objective-C only)' 3196 Warn about passing a null pointer for arguments marked as 3197 requiring a non-null value by the `nonnull' function attribute. 3198 3199 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 3200 disabled with the `-Wno-nonnull' option. 3201 3202`-Winit-self (C, C++, Objective-C and Objective-C++ only)' 3203 Warn about uninitialized variables which are initialized with 3204 themselves. Note this option can only be used with the 3205 `-Wuninitialized' option. 3206 3207 For example, GCC will warn about `i' being uninitialized in the 3208 following snippet only when `-Winit-self' has been specified: 3209 int f() 3210 { 3211 int i = i; 3212 return i; 3213 } 3214 3215`-Wimplicit-int (C and Objective-C only)' 3216 Warn when a declaration does not specify a type. This warning is 3217 enabled by `-Wall'. 3218 3219`-Wimplicit-function-declaration (C and Objective-C only)' 3220 Give a warning whenever a function is used before being declared. 3221 In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled 3222 by default and it is made into an error by `-pedantic-errors'. 3223 This warning is also enabled by `-Wall'. 3224 3225`-Wimplicit (C and Objective-C only)' 3226 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 3227 This warning is enabled by `-Wall'. 3228 3229`-Wignored-qualifiers (C and C++ only)' 3230 Warn if the return type of a function has a type qualifier such as 3231 `const'. For ISO C such a type qualifier has no effect, since the 3232 value returned by a function is not an lvalue. For C++, the 3233 warning is only emitted for scalar types or `void'. ISO C 3234 prohibits qualified `void' return types on function definitions, 3235 so such return types always receive a warning even without this 3236 option. 3237 3238 This warning is also enabled by `-Wextra'. 3239 3240`-Wmain' 3241 Warn if the type of `main' is suspicious. `main' should be a 3242 function with external linkage, returning int, taking either zero 3243 arguments, two, or three arguments of appropriate types. This 3244 warning is enabled by default in C++ and is enabled by either 3245 `-Wall' or `-pedantic'. 3246 3247`-Wmissing-braces' 3248 Warn if an aggregate or union initializer is not fully bracketed. 3249 In the following example, the initializer for `a' is not fully 3250 bracketed, but that for `b' is fully bracketed. 3251 3252 int a[2][2] = { 0, 1, 2, 3 }; 3253 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 3254 3255 This warning is enabled by `-Wall'. 3256 3257`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 3258 Warn if a user-supplied include directory does not exist. 3259 3260`-Wparentheses' 3261 Warn if parentheses are omitted in certain contexts, such as when 3262 there is an assignment in a context where a truth value is 3263 expected, or when operators are nested whose precedence people 3264 often get confused about. 3265 3266 Also warn if a comparison like `x<=y<=z' appears; this is 3267 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 3268 interpretation from that of ordinary mathematical notation. 3269 3270 Also warn about constructions where there may be confusion to which 3271 `if' statement an `else' branch belongs. Here is an example of 3272 such a case: 3273 3274 { 3275 if (a) 3276 if (b) 3277 foo (); 3278 else 3279 bar (); 3280 } 3281 3282 In C/C++, every `else' branch belongs to the innermost possible 3283 `if' statement, which in this example is `if (b)'. This is often 3284 not what the programmer expected, as illustrated in the above 3285 example by indentation the programmer chose. When there is the 3286 potential for this confusion, GCC will issue a warning when this 3287 flag is specified. To eliminate the warning, add explicit braces 3288 around the innermost `if' statement so there is no way the `else' 3289 could belong to the enclosing `if'. The resulting code would look 3290 like this: 3291 3292 { 3293 if (a) 3294 { 3295 if (b) 3296 foo (); 3297 else 3298 bar (); 3299 } 3300 } 3301 3302 Also warn for dangerous uses of the ?: with omitted middle operand 3303 GNU extension. When the condition in the ?: operator is a boolean 3304 expression the omitted value will be always 1. Often the user 3305 expects it to be a value computed inside the conditional 3306 expression instead. 3307 3308 This warning is enabled by `-Wall'. 3309 3310`-Wsequence-point' 3311 Warn about code that may have undefined semantics because of 3312 violations of sequence point rules in the C and C++ standards. 3313 3314 The C and C++ standards defines the order in which expressions in 3315 a C/C++ program are evaluated in terms of "sequence points", which 3316 represent a partial ordering between the execution of parts of the 3317 program: those executed before the sequence point, and those 3318 executed after it. These occur after the evaluation of a full 3319 expression (one which is not part of a larger expression), after 3320 the evaluation of the first operand of a `&&', `||', `? :' or `,' 3321 (comma) operator, before a function is called (but after the 3322 evaluation of its arguments and the expression denoting the called 3323 function), and in certain other places. Other than as expressed 3324 by the sequence point rules, the order of evaluation of 3325 subexpressions of an expression is not specified. All these rules 3326 describe only a partial order rather than a total order, since, 3327 for example, if two functions are called within one expression 3328 with no sequence point between them, the order in which the 3329 functions are called is not specified. However, the standards 3330 committee have ruled that function calls do not overlap. 3331 3332 It is not specified when between sequence points modifications to 3333 the values of objects take effect. Programs whose behavior 3334 depends on this have undefined behavior; the C and C++ standards 3335 specify that "Between the previous and next sequence point an 3336 object shall have its stored value modified at most once by the 3337 evaluation of an expression. Furthermore, the prior value shall 3338 be read only to determine the value to be stored.". If a program 3339 breaks these rules, the results on any particular implementation 3340 are entirely unpredictable. 3341 3342 Examples of code with undefined behavior are `a = a++;', `a[n] = 3343 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 3344 diagnosed by this option, and it may give an occasional false 3345 positive result, but in general it has been found fairly effective 3346 at detecting this sort of problem in programs. 3347 3348 The standard is worded confusingly, therefore there is some debate 3349 over the precise meaning of the sequence point rules in subtle 3350 cases. Links to discussions of the problem, including proposed 3351 formal definitions, may be found on the GCC readings page, at 3352 `http://gcc.gnu.org/readings.html'. 3353 3354 This warning is enabled by `-Wall' for C and C++. 3355 3356`-Wreturn-type' 3357 Warn whenever a function is defined with a return-type that 3358 defaults to `int'. Also warn about any `return' statement with no 3359 return-value in a function whose return-type is not `void' 3360 (falling off the end of the function body is considered returning 3361 without a value), and about a `return' statement with an 3362 expression in a function whose return-type is `void'. 3363 3364 For C++, a function without return type always produces a 3365 diagnostic message, even when `-Wno-return-type' is specified. 3366 The only exceptions are `main' and functions defined in system 3367 headers. 3368 3369 This warning is enabled by `-Wall'. 3370 3371`-Wswitch' 3372 Warn whenever a `switch' statement has an index of enumerated type 3373 and lacks a `case' for one or more of the named codes of that 3374 enumeration. (The presence of a `default' label prevents this 3375 warning.) `case' labels outside the enumeration range also 3376 provoke warnings when this option is used (even if there is a 3377 `default' label). This warning is enabled by `-Wall'. 3378 3379`-Wswitch-default' 3380 Warn whenever a `switch' statement does not have a `default' case. 3381 3382`-Wswitch-enum' 3383 Warn whenever a `switch' statement has an index of enumerated type 3384 and lacks a `case' for one or more of the named codes of that 3385 enumeration. `case' labels outside the enumeration range also 3386 provoke warnings when this option is used. The only difference 3387 between `-Wswitch' and this option is that this option gives a 3388 warning about an omitted enumeration code even if there is a 3389 `default' label. 3390 3391`-Wsync-nand (C and C++ only)' 3392 Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch' 3393 built-in functions are used. These functions changed semantics in 3394 GCC 4.4. 3395 3396`-Wtrigraphs' 3397 Warn if any trigraphs are encountered that might change the 3398 meaning of the program (trigraphs within comments are not warned 3399 about). This warning is enabled by `-Wall'. 3400 3401`-Wunused-but-set-parameter' 3402 Warn whenever a function parameter is assigned to, but otherwise 3403 unused (aside from its declaration). 3404 3405 To suppress this warning use the `unused' attribute (*note 3406 Variable Attributes::). 3407 3408 This warning is also enabled by `-Wunused' together with `-Wextra'. 3409 3410`-Wunused-but-set-variable' 3411 Warn whenever a local variable is assigned to, but otherwise unused 3412 (aside from its declaration). This warning is enabled by `-Wall'. 3413 3414 To suppress this warning use the `unused' attribute (*note 3415 Variable Attributes::). 3416 3417 This warning is also enabled by `-Wunused', which is enabled by 3418 `-Wall'. 3419 3420`-Wunused-function' 3421 Warn whenever a static function is declared but not defined or a 3422 non-inline static function is unused. This warning is enabled by 3423 `-Wall'. 3424 3425`-Wunused-label' 3426 Warn whenever a label is declared but not used. This warning is 3427 enabled by `-Wall'. 3428 3429 To suppress this warning use the `unused' attribute (*note 3430 Variable Attributes::). 3431 3432`-Wunused-parameter' 3433 Warn whenever a function parameter is unused aside from its 3434 declaration. 3435 3436 To suppress this warning use the `unused' attribute (*note 3437 Variable Attributes::). 3438 3439`-Wno-unused-result' 3440 Do not warn if a caller of a function marked with attribute 3441 `warn_unused_result' (*note Variable Attributes::) does not use 3442 its return value. The default is `-Wunused-result'. 3443 3444`-Wunused-variable' 3445 Warn whenever a local variable or non-constant static variable is 3446 unused aside from its declaration. This warning is enabled by 3447 `-Wall'. 3448 3449 To suppress this warning use the `unused' attribute (*note 3450 Variable Attributes::). 3451 3452`-Wunused-value' 3453 Warn whenever a statement computes a result that is explicitly not 3454 used. To suppress this warning cast the unused expression to 3455 `void'. This includes an expression-statement or the left-hand 3456 side of a comma expression that contains no side effects. For 3457 example, an expression such as `x[i,j]' will cause a warning, while 3458 `x[(void)i,j]' will not. 3459 3460 This warning is enabled by `-Wall'. 3461 3462`-Wunused' 3463 All the above `-Wunused' options combined. 3464 3465 In order to get a warning about an unused function parameter, you 3466 must either specify `-Wextra -Wunused' (note that `-Wall' implies 3467 `-Wunused'), or separately specify `-Wunused-parameter'. 3468 3469`-Wuninitialized' 3470 Warn if an automatic variable is used without first being 3471 initialized or if a variable may be clobbered by a `setjmp' call. 3472 In C++, warn if a non-static reference or non-static `const' member 3473 appears in a class without constructors. 3474 3475 If you want to warn about code which uses the uninitialized value 3476 of the variable in its own initializer, use the `-Winit-self' 3477 option. 3478 3479 These warnings occur for individual uninitialized or clobbered 3480 elements of structure, union or array variables as well as for 3481 variables which are uninitialized or clobbered as a whole. They do 3482 not occur for variables or elements declared `volatile'. Because 3483 these warnings depend on optimization, the exact variables or 3484 elements for which there are warnings will depend on the precise 3485 optimization options and version of GCC used. 3486 3487 Note that there may be no warning about a variable that is used 3488 only to compute a value that itself is never used, because such 3489 computations may be deleted by data flow analysis before the 3490 warnings are printed. 3491 3492 These warnings are made optional because GCC is not smart enough 3493 to see all the reasons why the code might be correct despite 3494 appearing to have an error. Here is one example of how this can 3495 happen: 3496 3497 { 3498 int x; 3499 switch (y) 3500 { 3501 case 1: x = 1; 3502 break; 3503 case 2: x = 4; 3504 break; 3505 case 3: x = 5; 3506 } 3507 foo (x); 3508 } 3509 3510 If the value of `y' is always 1, 2 or 3, then `x' is always 3511 initialized, but GCC doesn't know this. Here is another common 3512 case: 3513 3514 { 3515 int save_y; 3516 if (change_y) save_y = y, y = new_y; 3517 ... 3518 if (change_y) y = save_y; 3519 } 3520 3521 This has no bug because `save_y' is used only if it is set. 3522 3523 This option also warns when a non-volatile automatic variable 3524 might be changed by a call to `longjmp'. These warnings as well 3525 are possible only in optimizing compilation. 3526 3527 The compiler sees only the calls to `setjmp'. It cannot know 3528 where `longjmp' will be called; in fact, a signal handler could 3529 call it at any point in the code. As a result, you may get a 3530 warning even when there is in fact no problem because `longjmp' 3531 cannot in fact be called at the place which would cause a problem. 3532 3533 Some spurious warnings can be avoided if you declare all the 3534 functions you use that never return as `noreturn'. *Note Function 3535 Attributes::. 3536 3537 This warning is enabled by `-Wall' or `-Wextra'. 3538 3539`-Wunknown-pragmas' 3540 Warn when a #pragma directive is encountered which is not 3541 understood by GCC. If this command line option is used, warnings 3542 will even be issued for unknown pragmas in system header files. 3543 This is not the case if the warnings were only enabled by the 3544 `-Wall' command line option. 3545 3546`-Wno-pragmas' 3547 Do not warn about misuses of pragmas, such as incorrect parameters, 3548 invalid syntax, or conflicts between pragmas. See also 3549 `-Wunknown-pragmas'. 3550 3551`-Wstrict-aliasing' 3552 This option is only active when `-fstrict-aliasing' is active. It 3553 warns about code which might break the strict aliasing rules that 3554 the compiler is using for optimization. The warning does not 3555 catch all cases, but does attempt to catch the more common 3556 pitfalls. It is included in `-Wall'. It is equivalent to 3557 `-Wstrict-aliasing=3' 3558 3559`-Wstrict-aliasing=n' 3560 This option is only active when `-fstrict-aliasing' is active. It 3561 warns about code which might break the strict aliasing rules that 3562 the compiler is using for optimization. Higher levels correspond 3563 to higher accuracy (fewer false positives). Higher levels also 3564 correspond to more effort, similar to the way -O works. 3565 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with 3566 n=3. 3567 3568 Level 1: Most aggressive, quick, least accurate. Possibly useful 3569 when higher levels do not warn but -fstrict-aliasing still breaks 3570 the code, as it has very few false negatives. However, it has 3571 many false positives. Warns for all pointer conversions between 3572 possibly incompatible types, even if never dereferenced. Runs in 3573 the frontend only. 3574 3575 Level 2: Aggressive, quick, not too precise. May still have many 3576 false positives (not as many as level 1 though), and few false 3577 negatives (but possibly more than level 1). Unlike level 1, it 3578 only warns when an address is taken. Warns about incomplete 3579 types. Runs in the frontend only. 3580 3581 Level 3 (default for `-Wstrict-aliasing'): Should have very few 3582 false positives and few false negatives. Slightly slower than 3583 levels 1 or 2 when optimization is enabled. Takes care of the 3584 common pun+dereference pattern in the frontend: 3585 `*(int*)&some_float'. If optimization is enabled, it also runs in 3586 the backend, where it deals with multiple statement cases using 3587 flow-sensitive points-to information. Only warns when the 3588 converted pointer is dereferenced. Does not warn about incomplete 3589 types. 3590 3591`-Wstrict-overflow' 3592`-Wstrict-overflow=N' 3593 This option is only active when `-fstrict-overflow' is active. It 3594 warns about cases where the compiler optimizes based on the 3595 assumption that signed overflow does not occur. Note that it does 3596 not warn about all cases where the code might overflow: it only 3597 warns about cases where the compiler implements some optimization. 3598 Thus this warning depends on the optimization level. 3599 3600 An optimization which assumes that signed overflow does not occur 3601 is perfectly safe if the values of the variables involved are such 3602 that overflow never does, in fact, occur. Therefore this warning 3603 can easily give a false positive: a warning about code which is not 3604 actually a problem. To help focus on important issues, several 3605 warning levels are defined. No warnings are issued for the use of 3606 undefined signed overflow when estimating how many iterations a 3607 loop will require, in particular when determining whether a loop 3608 will be executed at all. 3609 3610 `-Wstrict-overflow=1' 3611 Warn about cases which are both questionable and easy to 3612 avoid. For example: `x + 1 > x'; with `-fstrict-overflow', 3613 the compiler will simplify this to `1'. This level of 3614 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 3615 not, and must be explicitly requested. 3616 3617 `-Wstrict-overflow=2' 3618 Also warn about other cases where a comparison is simplified 3619 to a constant. For example: `abs (x) >= 0'. This can only be 3620 simplified when `-fstrict-overflow' is in effect, because 3621 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 3622 zero. `-Wstrict-overflow' (with no level) is the same as 3623 `-Wstrict-overflow=2'. 3624 3625 `-Wstrict-overflow=3' 3626 Also warn about other cases where a comparison is simplified. 3627 For example: `x + 1 > 1' will be simplified to `x > 0'. 3628 3629 `-Wstrict-overflow=4' 3630 Also warn about other simplifications not covered by the 3631 above cases. For example: `(x * 10) / 5' will be simplified 3632 to `x * 2'. 3633 3634 `-Wstrict-overflow=5' 3635 Also warn about cases where the compiler reduces the 3636 magnitude of a constant involved in a comparison. For 3637 example: `x + 2 > y' will be simplified to `x + 1 >= y'. 3638 This is reported only at the highest warning level because 3639 this simplification applies to many comparisons, so this 3640 warning level will give a very large number of false 3641 positives. 3642 3643`-Wsuggest-attribute=[pure|const|noreturn]' 3644 Warn for cases where adding an attribute may be beneficial. The 3645 attributes currently supported are listed below. 3646 3647 `-Wsuggest-attribute=pure' 3648 `-Wsuggest-attribute=const' 3649 `-Wsuggest-attribute=noreturn' 3650 Warn about functions which might be candidates for attributes 3651 `pure', `const' or `noreturn'. The compiler only warns for 3652 functions visible in other compilation units or (in the case 3653 of `pure' and `const') if it cannot prove that the function 3654 returns normally. A function returns normally if it doesn't 3655 contain an infinite loop nor returns abnormally by throwing, 3656 calling `abort()' or trapping. This analysis requires option 3657 `-fipa-pure-const', which is enabled by default at `-O' and 3658 higher. Higher optimization levels improve the accuracy of 3659 the analysis. 3660 3661`-Warray-bounds' 3662 This option is only active when `-ftree-vrp' is active (default 3663 for `-O2' and above). It warns about subscripts to arrays that are 3664 always out of bounds. This warning is enabled by `-Wall'. 3665 3666`-Wno-div-by-zero' 3667 Do not warn about compile-time integer division by zero. Floating 3668 point division by zero is not warned about, as it can be a 3669 legitimate way of obtaining infinities and NaNs. 3670 3671`-Wsystem-headers' 3672 Print warning messages for constructs found in system header files. 3673 Warnings from system headers are normally suppressed, on the 3674 assumption that they usually do not indicate real problems and 3675 would only make the compiler output harder to read. Using this 3676 command line option tells GCC to emit warnings from system headers 3677 as if they occurred in user code. However, note that using 3678 `-Wall' in conjunction with this option will _not_ warn about 3679 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 3680 must also be used. 3681 3682`-Wtrampolines' 3683 Warn about trampolines generated for pointers to nested functions. 3684 3685 A trampoline is a small piece of data or code that is created at 3686 run time on the stack when the address of a nested function is 3687 taken, and is used to call the nested function indirectly. For 3688 some targets, it is made up of data only and thus requires no 3689 special treatment. But, for most targets, it is made up of code 3690 and thus requires the stack to be made executable in order for 3691 the program to work properly. 3692 3693`-Wno-poison-system-directories' 3694 Do not warn for `-I' or `-L' options using system directories such 3695 as `/usr/include' when cross compiling. This option is intended 3696 for use in chroot environments when such directories contain the 3697 correct headers and libraries for the target system rather than 3698 the host. 3699 3700`-Wfloat-equal' 3701 Warn if floating point values are used in equality comparisons. 3702 3703 The idea behind this is that sometimes it is convenient (for the 3704 programmer) to consider floating-point values as approximations to 3705 infinitely precise real numbers. If you are doing this, then you 3706 need to compute (by analyzing the code, or in some other way) the 3707 maximum or likely maximum error that the computation introduces, 3708 and allow for it when performing comparisons (and when producing 3709 output, but that's a different problem). In particular, instead 3710 of testing for equality, you would check to see whether the two 3711 values have ranges that overlap; and this is done with the 3712 relational operators, so equality comparisons are probably 3713 mistaken. 3714 3715`-Wtraditional (C and Objective-C only)' 3716 Warn about certain constructs that behave differently in 3717 traditional and ISO C. Also warn about ISO C constructs that have 3718 no traditional C equivalent, and/or problematic constructs which 3719 should be avoided. 3720 3721 * Macro parameters that appear within string literals in the 3722 macro body. In traditional C macro replacement takes place 3723 within string literals, but does not in ISO C. 3724 3725 * In traditional C, some preprocessor directives did not exist. 3726 Traditional preprocessors would only consider a line to be a 3727 directive if the `#' appeared in column 1 on the line. 3728 Therefore `-Wtraditional' warns about directives that 3729 traditional C understands but would ignore because the `#' 3730 does not appear as the first character on the line. It also 3731 suggests you hide directives like `#pragma' not understood by 3732 traditional C by indenting them. Some traditional 3733 implementations would not recognize `#elif', so it suggests 3734 avoiding it altogether. 3735 3736 * A function-like macro that appears without arguments. 3737 3738 * The unary plus operator. 3739 3740 * The `U' integer constant suffix, or the `F' or `L' floating 3741 point constant suffixes. (Traditional C does support the `L' 3742 suffix on integer constants.) Note, these suffixes appear in 3743 macros defined in the system headers of most modern systems, 3744 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these 3745 macros in user code might normally lead to spurious warnings, 3746 however GCC's integrated preprocessor has enough context to 3747 avoid warning in these cases. 3748 3749 * A function declared external in one block and then used after 3750 the end of the block. 3751 3752 * A `switch' statement has an operand of type `long'. 3753 3754 * A non-`static' function declaration follows a `static' one. 3755 This construct is not accepted by some traditional C 3756 compilers. 3757 3758 * The ISO type of an integer constant has a different width or 3759 signedness from its traditional type. This warning is only 3760 issued if the base of the constant is ten. I.e. hexadecimal 3761 or octal values, which typically represent bit patterns, are 3762 not warned about. 3763 3764 * Usage of ISO string concatenation is detected. 3765 3766 * Initialization of automatic aggregates. 3767 3768 * Identifier conflicts with labels. Traditional C lacks a 3769 separate namespace for labels. 3770 3771 * Initialization of unions. If the initializer is zero, the 3772 warning is omitted. This is done under the assumption that 3773 the zero initializer in user code appears conditioned on e.g. 3774 `__STDC__' to avoid missing initializer warnings and relies 3775 on default initialization to zero in the traditional C case. 3776 3777 * Conversions by prototypes between fixed/floating point values 3778 and vice versa. The absence of these prototypes when 3779 compiling with traditional C would cause serious problems. 3780 This is a subset of the possible conversion warnings, for the 3781 full set use `-Wtraditional-conversion'. 3782 3783 * Use of ISO C style function definitions. This warning 3784 intentionally is _not_ issued for prototype declarations or 3785 variadic functions because these ISO C features will appear 3786 in your code when using libiberty's traditional C 3787 compatibility macros, `PARAMS' and `VPARAMS'. This warning 3788 is also bypassed for nested functions because that feature is 3789 already a GCC extension and thus not relevant to traditional 3790 C compatibility. 3791 3792`-Wtraditional-conversion (C and Objective-C only)' 3793 Warn if a prototype causes a type conversion that is different 3794 from what would happen to the same argument in the absence of a 3795 prototype. This includes conversions of fixed point to floating 3796 and vice versa, and conversions changing the width or signedness 3797 of a fixed point argument except when the same as the default 3798 promotion. 3799 3800`-Wdeclaration-after-statement (C and Objective-C only)' 3801 Warn when a declaration is found after a statement in a block. 3802 This construct, known from C++, was introduced with ISO C99 and is 3803 by default allowed in GCC. It is not supported by ISO C90 and was 3804 not supported by GCC versions before GCC 3.0. *Note Mixed 3805 Declarations::. 3806 3807`-Wundef' 3808 Warn if an undefined identifier is evaluated in an `#if' directive. 3809 3810`-Wno-endif-labels' 3811 Do not warn whenever an `#else' or an `#endif' are followed by 3812 text. 3813 3814`-Wshadow' 3815 Warn whenever a local variable or type declaration shadows another 3816 variable, parameter, type, or class member (in C++), or whenever a 3817 built-in function is shadowed. Note that in C++, the compiler will 3818 not warn if a local variable shadows a struct/class/enum, but will 3819 warn if it shadows an explicit typedef. 3820 3821`-Wlarger-than=LEN' 3822 Warn whenever an object of larger than LEN bytes is defined. 3823 3824`-Wframe-larger-than=LEN' 3825 Warn if the size of a function frame is larger than LEN bytes. 3826 The computation done to determine the stack frame size is 3827 approximate and not conservative. The actual requirements may be 3828 somewhat greater than LEN even if you do not get a warning. In 3829 addition, any space allocated via `alloca', variable-length 3830 arrays, or related constructs is not included by the compiler when 3831 determining whether or not to issue a warning. 3832 3833`-Wunsafe-loop-optimizations' 3834 Warn if the loop cannot be optimized because the compiler could not 3835 assume anything on the bounds of the loop indices. With 3836 `-funsafe-loop-optimizations' warn if the compiler made such 3837 assumptions. 3838 3839`-Wno-pedantic-ms-format (MinGW targets only)' 3840 Disables the warnings about non-ISO `printf' / `scanf' format 3841 width specifiers `I32', `I64', and `I' used on Windows targets 3842 depending on the MS runtime, when you are using the options 3843 `-Wformat' and `-pedantic' without gnu-extensions. 3844 3845`-Wpointer-arith' 3846 Warn about anything that depends on the "size of" a function type 3847 or of `void'. GNU C assigns these types a size of 1, for 3848 convenience in calculations with `void *' pointers and pointers to 3849 functions. In C++, warn also when an arithmetic operation involves 3850 `NULL'. This warning is also enabled by `-pedantic'. 3851 3852`-Wtype-limits' 3853 Warn if a comparison is always true or always false due to the 3854 limited range of the data type, but do not warn for constant 3855 expressions. For example, warn if an unsigned variable is 3856 compared against zero with `<' or `>='. This warning is also 3857 enabled by `-Wextra'. 3858 3859`-Wbad-function-cast (C and Objective-C only)' 3860 Warn whenever a function call is cast to a non-matching type. For 3861 example, warn if `int malloc()' is cast to `anything *'. 3862 3863`-Wc++-compat (C and Objective-C only)' 3864 Warn about ISO C constructs that are outside of the common subset 3865 of ISO C and ISO C++, e.g. request for implicit conversion from 3866 `void *' to a pointer to non-`void' type. 3867 3868`-Wc++0x-compat (C++ and Objective-C++ only)' 3869 Warn about C++ constructs whose meaning differs between ISO C++ 3870 1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will 3871 become keywords in ISO C++ 200x. This warning is enabled by 3872 `-Wall'. 3873 3874`-Wcast-qual' 3875 Warn whenever a pointer is cast so as to remove a type qualifier 3876 from the target type. For example, warn if a `const char *' is 3877 cast to an ordinary `char *'. 3878 3879 Also warn when making a cast which introduces a type qualifier in 3880 an unsafe way. For example, casting `char **' to `const char **' 3881 is unsafe, as in this example: 3882 3883 /* p is char ** value. */ 3884 const char **q = (const char **) p; 3885 /* Assignment of readonly string to const char * is OK. */ 3886 *q = "string"; 3887 /* Now char** pointer points to read-only memory. */ 3888 **p = 'b'; 3889 3890`-Wcast-align' 3891 Warn whenever a pointer is cast such that the required alignment 3892 of the target is increased. For example, warn if a `char *' is 3893 cast to an `int *' on machines where integers can only be accessed 3894 at two- or four-byte boundaries. 3895 3896`-Wwrite-strings' 3897 When compiling C, give string constants the type `const 3898 char[LENGTH]' so that copying the address of one into a 3899 non-`const' `char *' pointer will get a warning. These warnings 3900 will help you find at compile time code that can try to write into 3901 a string constant, but only if you have been very careful about 3902 using `const' in declarations and prototypes. Otherwise, it will 3903 just be a nuisance. This is why we did not make `-Wall' request 3904 these warnings. 3905 3906 When compiling C++, warn about the deprecated conversion from 3907 string literals to `char *'. This warning is enabled by default 3908 for C++ programs. 3909 3910`-Wclobbered' 3911 Warn for variables that might be changed by `longjmp' or `vfork'. 3912 This warning is also enabled by `-Wextra'. 3913 3914`-Wconversion' 3915 Warn for implicit conversions that may alter a value. This includes 3916 conversions between real and integer, like `abs (x)' when `x' is 3917 `double'; conversions between signed and unsigned, like `unsigned 3918 ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'. 3919 Do not warn for explicit casts like `abs ((int) x)' and `ui = 3920 (unsigned) -1', or if the value is not changed by the conversion 3921 like in `abs (2.0)'. Warnings about conversions between signed 3922 and unsigned integers can be disabled by using 3923 `-Wno-sign-conversion'. 3924 3925 For C++, also warn for confusing overload resolution for 3926 user-defined conversions; and conversions that will never use a 3927 type conversion operator: conversions to `void', the same type, a 3928 base class or a reference to them. Warnings about conversions 3929 between signed and unsigned integers are disabled by default in 3930 C++ unless `-Wsign-conversion' is explicitly enabled. 3931 3932`-Wno-conversion-null (C++ and Objective-C++ only)' 3933 Do not warn for conversions between `NULL' and non-pointer types. 3934 `-Wconversion-null' is enabled by default. 3935 3936`-Wempty-body' 3937 Warn if an empty body occurs in an `if', `else' or `do while' 3938 statement. This warning is also enabled by `-Wextra'. 3939 3940`-Wenum-compare' 3941 Warn about a comparison between values of different enum types. In 3942 C++ this warning is enabled by default. In C this warning is 3943 enabled by `-Wall'. 3944 3945`-Wjump-misses-init (C, Objective-C only)' 3946 Warn if a `goto' statement or a `switch' statement jumps forward 3947 across the initialization of a variable, or jumps backward to a 3948 label after the variable has been initialized. This only warns 3949 about variables which are initialized when they are declared. 3950 This warning is only supported for C and Objective C; in C++ this 3951 sort of branch is an error in any case. 3952 3953 `-Wjump-misses-init' is included in `-Wc++-compat'. It can be 3954 disabled with the `-Wno-jump-misses-init' option. 3955 3956`-Wsign-compare' 3957 Warn when a comparison between signed and unsigned values could 3958 produce an incorrect result when the signed value is converted to 3959 unsigned. This warning is also enabled by `-Wextra'; to get the 3960 other warnings of `-Wextra' without this warning, use `-Wextra 3961 -Wno-sign-compare'. 3962 3963`-Wsign-conversion' 3964 Warn for implicit conversions that may change the sign of an 3965 integer value, like assigning a signed integer expression to an 3966 unsigned integer variable. An explicit cast silences the warning. 3967 In C, this option is enabled also by `-Wconversion'. 3968 3969`-Waddress' 3970 Warn about suspicious uses of memory addresses. These include using 3971 the address of a function in a conditional expression, such as 3972 `void func(void); if (func)', and comparisons against the memory 3973 address of a string literal, such as `if (x == "abc")'. Such uses 3974 typically indicate a programmer error: the address of a function 3975 always evaluates to true, so their use in a conditional usually 3976 indicate that the programmer forgot the parentheses in a function 3977 call; and comparisons against string literals result in unspecified 3978 behavior and are not portable in C, so they usually indicate that 3979 the programmer intended to use `strcmp'. This warning is enabled 3980 by `-Wall'. 3981 3982`-Wlogical-op' 3983 Warn about suspicious uses of logical operators in expressions. 3984 This includes using logical operators in contexts where a bit-wise 3985 operator is likely to be expected. 3986 3987`-Waggregate-return' 3988 Warn if any functions that return structures or unions are defined 3989 or called. (In languages where you can return an array, this also 3990 elicits a warning.) 3991 3992`-Wno-attributes' 3993 Do not warn if an unexpected `__attribute__' is used, such as 3994 unrecognized attributes, function attributes applied to variables, 3995 etc. This will not stop errors for incorrect use of supported 3996 attributes. 3997 3998`-Wno-builtin-macro-redefined' 3999 Do not warn if certain built-in macros are redefined. This 4000 suppresses warnings for redefinition of `__TIMESTAMP__', 4001 `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'. 4002 4003`-Wstrict-prototypes (C and Objective-C only)' 4004 Warn if a function is declared or defined without specifying the 4005 argument types. (An old-style function definition is permitted 4006 without a warning if preceded by a declaration which specifies the 4007 argument types.) 4008 4009`-Wold-style-declaration (C and Objective-C only)' 4010 Warn for obsolescent usages, according to the C Standard, in a 4011 declaration. For example, warn if storage-class specifiers like 4012 `static' are not the first things in a declaration. This warning 4013 is also enabled by `-Wextra'. 4014 4015`-Wold-style-definition (C and Objective-C only)' 4016 Warn if an old-style function definition is used. A warning is 4017 given even if there is a previous prototype. 4018 4019`-Wmissing-parameter-type (C and Objective-C only)' 4020 A function parameter is declared without a type specifier in 4021 K&R-style functions: 4022 4023 void foo(bar) { } 4024 4025 This warning is also enabled by `-Wextra'. 4026 4027`-Wmissing-prototypes (C and Objective-C only)' 4028 Warn if a global function is defined without a previous prototype 4029 declaration. This warning is issued even if the definition itself 4030 provides a prototype. The aim is to detect global functions that 4031 fail to be declared in header files. 4032 4033`-Wmissing-declarations' 4034 Warn if a global function is defined without a previous 4035 declaration. Do so even if the definition itself provides a 4036 prototype. Use this option to detect global functions that are 4037 not declared in header files. In C++, no warnings are issued for 4038 function templates, or for inline functions, or for functions in 4039 anonymous namespaces. 4040 4041`-Wmissing-field-initializers' 4042 Warn if a structure's initializer has some fields missing. For 4043 example, the following code would cause such a warning, because 4044 `x.h' is implicitly zero: 4045 4046 struct s { int f, g, h; }; 4047 struct s x = { 3, 4 }; 4048 4049 This option does not warn about designated initializers, so the 4050 following modification would not trigger a warning: 4051 4052 struct s { int f, g, h; }; 4053 struct s x = { .f = 3, .g = 4 }; 4054 4055 This warning is included in `-Wextra'. To get other `-Wextra' 4056 warnings without this one, use `-Wextra 4057 -Wno-missing-field-initializers'. 4058 4059`-Wmissing-format-attribute' 4060 Warn about function pointers which might be candidates for `format' 4061 attributes. Note these are only possible candidates, not absolute 4062 ones. GCC will guess that function pointers with `format' 4063 attributes that are used in assignment, initialization, parameter 4064 passing or return statements should have a corresponding `format' 4065 attribute in the resulting type. I.e. the left-hand side of the 4066 assignment or initialization, the type of the parameter variable, 4067 or the return type of the containing function respectively should 4068 also have a `format' attribute to avoid the warning. 4069 4070 GCC will also warn about function definitions which might be 4071 candidates for `format' attributes. Again, these are only 4072 possible candidates. GCC will guess that `format' attributes 4073 might be appropriate for any function that calls a function like 4074 `vprintf' or `vscanf', but this might not always be the case, and 4075 some functions for which `format' attributes are appropriate may 4076 not be detected. 4077 4078`-Wno-multichar' 4079 Do not warn if a multicharacter constant (`'FOOF'') is used. 4080 Usually they indicate a typo in the user's code, as they have 4081 implementation-defined values, and should not be used in portable 4082 code. 4083 4084`-Wnormalized=<none|id|nfc|nfkc>' 4085 In ISO C and ISO C++, two identifiers are different if they are 4086 different sequences of characters. However, sometimes when 4087 characters outside the basic ASCII character set are used, you can 4088 have two different character sequences that look the same. To 4089 avoid confusion, the ISO 10646 standard sets out some 4090 "normalization rules" which when applied ensure that two sequences 4091 that look the same are turned into the same sequence. GCC can 4092 warn you if you are using identifiers which have not been 4093 normalized; this option controls that warning. 4094 4095 There are four levels of warning that GCC supports. The default is 4096 `-Wnormalized=nfc', which warns about any identifier which is not 4097 in the ISO 10646 "C" normalized form, "NFC". NFC is the 4098 recommended form for most uses. 4099 4100 Unfortunately, there are some characters which ISO C and ISO C++ 4101 allow in identifiers that when turned into NFC aren't allowable as 4102 identifiers. That is, there's no way to use these symbols in 4103 portable ISO C or C++ and have all your identifiers in NFC. 4104 `-Wnormalized=id' suppresses the warning for these characters. It 4105 is hoped that future versions of the standards involved will 4106 correct this, which is why this option is not the default. 4107 4108 You can switch the warning off for all characters by writing 4109 `-Wnormalized=none'. You would only want to do this if you were 4110 using some other normalization scheme (like "D"), because 4111 otherwise you can easily create bugs that are literally impossible 4112 to see. 4113 4114 Some characters in ISO 10646 have distinct meanings but look 4115 identical in some fonts or display methodologies, especially once 4116 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 4117 LATIN SMALL LETTER N", will display just like a regular `n' which 4118 has been placed in a superscript. ISO 10646 defines the "NFKC" 4119 normalization scheme to convert all these into a standard form as 4120 well, and GCC will warn if your code is not in NFKC if you use 4121 `-Wnormalized=nfkc'. This warning is comparable to warning about 4122 every identifier that contains the letter O because it might be 4123 confused with the digit 0, and so is not the default, but may be 4124 useful as a local coding convention if the programming environment 4125 is unable to be fixed to display these characters distinctly. 4126 4127`-Wno-deprecated' 4128 Do not warn about usage of deprecated features. *Note Deprecated 4129 Features::. 4130 4131`-Wno-deprecated-declarations' 4132 Do not warn about uses of functions (*note Function Attributes::), 4133 variables (*note Variable Attributes::), and types (*note Type 4134 Attributes::) marked as deprecated by using the `deprecated' 4135 attribute. 4136 4137`-Wno-overflow' 4138 Do not warn about compile-time overflow in constant expressions. 4139 4140`-Woverride-init (C and Objective-C only)' 4141 Warn if an initialized field without side effects is overridden 4142 when using designated initializers (*note Designated Initializers: 4143 Designated Inits.). 4144 4145 This warning is included in `-Wextra'. To get other `-Wextra' 4146 warnings without this one, use `-Wextra -Wno-override-init'. 4147 4148`-Wpacked' 4149 Warn if a structure is given the packed attribute, but the packed 4150 attribute has no effect on the layout or size of the structure. 4151 Such structures may be mis-aligned for little benefit. For 4152 instance, in this code, the variable `f.x' in `struct bar' will be 4153 misaligned even though `struct bar' does not itself have the 4154 packed attribute: 4155 4156 struct foo { 4157 int x; 4158 char a, b, c, d; 4159 } __attribute__((packed)); 4160 struct bar { 4161 char z; 4162 struct foo f; 4163 }; 4164 4165`-Wpacked-bitfield-compat' 4166 The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute 4167 on bit-fields of type `char'. This has been fixed in GCC 4.4 but 4168 the change can lead to differences in the structure layout. GCC 4169 informs you when the offset of such a field has changed in GCC 4.4. 4170 For example there is no longer a 4-bit padding between field `a' 4171 and `b' in this structure: 4172 4173 struct foo 4174 { 4175 char a:4; 4176 char b:8; 4177 } __attribute__ ((packed)); 4178 4179 This warning is enabled by default. Use 4180 `-Wno-packed-bitfield-compat' to disable this warning. 4181 4182`-Wpadded' 4183 Warn if padding is included in a structure, either to align an 4184 element of the structure or to align the whole structure. 4185 Sometimes when this happens it is possible to rearrange the fields 4186 of the structure to reduce the padding and so make the structure 4187 smaller. 4188 4189`-Wredundant-decls' 4190 Warn if anything is declared more than once in the same scope, 4191 even in cases where multiple declaration is valid and changes 4192 nothing. 4193 4194`-Wnested-externs (C and Objective-C only)' 4195 Warn if an `extern' declaration is encountered within a function. 4196 4197`-Winline' 4198 Warn if a function can not be inlined and it was declared as 4199 inline. Even with this option, the compiler will not warn about 4200 failures to inline functions declared in system headers. 4201 4202 The compiler uses a variety of heuristics to determine whether or 4203 not to inline a function. For example, the compiler takes into 4204 account the size of the function being inlined and the amount of 4205 inlining that has already been done in the current function. 4206 Therefore, seemingly insignificant changes in the source program 4207 can cause the warnings produced by `-Winline' to appear or 4208 disappear. 4209 4210`-Wno-invalid-offsetof (C++ and Objective-C++ only)' 4211 Suppress warnings from applying the `offsetof' macro to a non-POD 4212 type. According to the 1998 ISO C++ standard, applying `offsetof' 4213 to a non-POD type is undefined. In existing C++ implementations, 4214 however, `offsetof' typically gives meaningful results even when 4215 applied to certain kinds of non-POD types. (Such as a simple 4216 `struct' that fails to be a POD type only by virtue of having a 4217 constructor.) This flag is for users who are aware that they are 4218 writing nonportable code and who have deliberately chosen to 4219 ignore the warning about it. 4220 4221 The restrictions on `offsetof' may be relaxed in a future version 4222 of the C++ standard. 4223 4224`-Wno-int-to-pointer-cast' 4225 Suppress warnings from casts to pointer type of an integer of a 4226 different size. In C++, casting to a pointer type of smaller size 4227 is an error. `Wint-to-pointer-cast' is enabled by default. 4228 4229`-Wno-pointer-to-int-cast (C and Objective-C only)' 4230 Suppress warnings from casts from a pointer to an integer type of a 4231 different size. 4232 4233`-Winvalid-pch' 4234 Warn if a precompiled header (*note Precompiled Headers::) is 4235 found in the search path but can't be used. 4236 4237`-Wlong-long' 4238 Warn if `long long' type is used. This is enabled by either 4239 `-pedantic' or `-Wtraditional' in ISO C90 and C++98 modes. To 4240 inhibit the warning messages, use `-Wno-long-long'. 4241 4242`-Wvariadic-macros' 4243 Warn if variadic macros are used in pedantic ISO C90 mode, or the 4244 GNU alternate syntax when in pedantic ISO C99 mode. This is 4245 default. To inhibit the warning messages, use 4246 `-Wno-variadic-macros'. 4247 4248`-Wvla' 4249 Warn if variable length array is used in the code. `-Wno-vla' 4250 will prevent the `-pedantic' warning of the variable length array. 4251 4252`-Wvolatile-register-var' 4253 Warn if a register variable is declared volatile. The volatile 4254 modifier does not inhibit all optimizations that may eliminate 4255 reads and/or writes to register variables. This warning is 4256 enabled by `-Wall'. 4257 4258`-Wdisabled-optimization' 4259 Warn if a requested optimization pass is disabled. This warning 4260 does not generally indicate that there is anything wrong with your 4261 code; it merely indicates that GCC's optimizers were unable to 4262 handle the code effectively. Often, the problem is that your code 4263 is too big or too complex; GCC will refuse to optimize programs 4264 when the optimization itself is likely to take inordinate amounts 4265 of time. 4266 4267`-Wpointer-sign (C and Objective-C only)' 4268 Warn for pointer argument passing or assignment with different 4269 signedness. This option is only supported for C and Objective-C. 4270 It is implied by `-Wall' and by `-pedantic', which can be disabled 4271 with `-Wno-pointer-sign'. 4272 4273`-Wstack-protector' 4274 This option is only active when `-fstack-protector' is active. It 4275 warns about functions that will not be protected against stack 4276 smashing. 4277 4278`-Wno-mudflap' 4279 Suppress warnings about constructs that cannot be instrumented by 4280 `-fmudflap'. 4281 4282`-Woverlength-strings' 4283 Warn about string constants which are longer than the "minimum 4284 maximum" length specified in the C standard. Modern compilers 4285 generally allow string constants which are much longer than the 4286 standard's minimum limit, but very portable programs should avoid 4287 using longer strings. 4288 4289 The limit applies _after_ string constant concatenation, and does 4290 not count the trailing NUL. In C90, the limit was 509 characters; 4291 in C99, it was raised to 4095. C++98 does not specify a normative 4292 minimum maximum, so we do not diagnose overlength strings in C++. 4293 4294 This option is implied by `-pedantic', and can be disabled with 4295 `-Wno-overlength-strings'. 4296 4297`-Wunsuffixed-float-constants (C and Objective-C only)' 4298 GCC will issue a warning for any floating constant that does not 4299 have a suffix. When used together with `-Wsystem-headers' it will 4300 warn about such constants in system header files. This can be 4301 useful when preparing code to use with the `FLOAT_CONST_DECIMAL64' 4302 pragma from the decimal floating-point extension to C99. 4303 4304 4305File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 4306 43073.9 Options for Debugging Your Program or GCC 4308============================================= 4309 4310GCC has various special options that are used for debugging either your 4311program or GCC: 4312 4313`-g' 4314 Produce debugging information in the operating system's native 4315 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 4316 debugging information. 4317 4318 On most systems that use stabs format, `-g' enables use of extra 4319 debugging information that only GDB can use; this extra information 4320 makes debugging work better in GDB but will probably make other 4321 debuggers crash or refuse to read the program. If you want to 4322 control for certain whether to generate the extra information, use 4323 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 4324 below). 4325 4326 GCC allows you to use `-g' with `-O'. The shortcuts taken by 4327 optimized code may occasionally produce surprising results: some 4328 variables you declared may not exist at all; flow of control may 4329 briefly move where you did not expect it; some statements may not 4330 be executed because they compute constant results or their values 4331 were already at hand; some statements may execute in different 4332 places because they were moved out of loops. 4333 4334 Nevertheless it proves possible to debug optimized output. This 4335 makes it reasonable to use the optimizer for programs that might 4336 have bugs. 4337 4338 The following options are useful when GCC is generated with the 4339 capability for more than one debugging format. 4340 4341`-ggdb' 4342 Produce debugging information for use by GDB. This means to use 4343 the most expressive format available (DWARF 2, stabs, or the 4344 native format if neither of those are supported), including GDB 4345 extensions if at all possible. 4346 4347`-gstabs' 4348 Produce debugging information in stabs format (if that is 4349 supported), without GDB extensions. This is the format used by 4350 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 4351 systems this option produces stabs debugging output which is not 4352 understood by DBX or SDB. On System V Release 4 systems this 4353 option requires the GNU assembler. 4354 4355`-feliminate-unused-debug-symbols' 4356 Produce debugging information in stabs format (if that is 4357 supported), for only symbols that are actually used. 4358 4359`-femit-class-debug-always' 4360 Instead of emitting debugging information for a C++ class in only 4361 one object file, emit it in all object files using the class. 4362 This option should be used only with debuggers that are unable to 4363 handle the way GCC normally emits debugging information for 4364 classes because using this option will increase the size of 4365 debugging information by as much as a factor of two. 4366 4367`-gstabs+' 4368 Produce debugging information in stabs format (if that is 4369 supported), using GNU extensions understood only by the GNU 4370 debugger (GDB). The use of these extensions is likely to make 4371 other debuggers crash or refuse to read the program. 4372 4373`-gcoff' 4374 Produce debugging information in COFF format (if that is 4375 supported). This is the format used by SDB on most System V 4376 systems prior to System V Release 4. 4377 4378`-gxcoff' 4379 Produce debugging information in XCOFF format (if that is 4380 supported). This is the format used by the DBX debugger on IBM 4381 RS/6000 systems. 4382 4383`-gxcoff+' 4384 Produce debugging information in XCOFF format (if that is 4385 supported), using GNU extensions understood only by the GNU 4386 debugger (GDB). The use of these extensions is likely to make 4387 other debuggers crash or refuse to read the program, and may cause 4388 assemblers other than the GNU assembler (GAS) to fail with an 4389 error. 4390 4391`-gdwarf-VERSION' 4392 Produce debugging information in DWARF format (if that is 4393 supported). This is the format used by DBX on IRIX 6. The value 4394 of VERSION may be either 2, 3 or 4; the default version is 2. 4395 4396 Note that with DWARF version 2 some ports require, and will always 4397 use, some non-conflicting DWARF 3 extensions in the unwind tables. 4398 4399 Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for 4400 maximum benefit. 4401 4402`-gstrict-dwarf' 4403 Disallow using extensions of later DWARF standard version than 4404 selected with `-gdwarf-VERSION'. On most targets using 4405 non-conflicting DWARF extensions from later standard versions is 4406 allowed. 4407 4408`-gno-strict-dwarf' 4409 Allow using extensions of later DWARF standard version than 4410 selected with `-gdwarf-VERSION'. 4411 4412`-gvms' 4413 Produce debugging information in VMS debug format (if that is 4414 supported). This is the format used by DEBUG on VMS systems. 4415 4416`-gLEVEL' 4417`-ggdbLEVEL' 4418`-gstabsLEVEL' 4419`-gcoffLEVEL' 4420`-gxcoffLEVEL' 4421`-gvmsLEVEL' 4422 Request debugging information and also use LEVEL to specify how 4423 much information. The default level is 2. 4424 4425 Level 0 produces no debug information at all. Thus, `-g0' negates 4426 `-g'. 4427 4428 Level 1 produces minimal information, enough for making backtraces 4429 in parts of the program that you don't plan to debug. This 4430 includes descriptions of functions and external variables, but no 4431 information about local variables and no line numbers. 4432 4433 Level 3 includes extra information, such as all the macro 4434 definitions present in the program. Some debuggers support macro 4435 expansion when you use `-g3'. 4436 4437 `-gdwarf-2' does not accept a concatenated debug level, because 4438 GCC used to support an option `-gdwarf' that meant to generate 4439 debug information in version 1 of the DWARF format (which is very 4440 different from version 2), and it would have been too confusing. 4441 That debug format is long obsolete, but the option cannot be 4442 changed now. Instead use an additional `-gLEVEL' option to change 4443 the debug level for DWARF. 4444 4445`-gtoggle' 4446 Turn off generation of debug info, if leaving out this option 4447 would have generated it, or turn it on at level 2 otherwise. The 4448 position of this argument in the command line does not matter, it 4449 takes effect after all other options are processed, and it does so 4450 only once, no matter how many times it is given. This is mainly 4451 intended to be used with `-fcompare-debug'. 4452 4453`-fdump-final-insns[=FILE]' 4454 Dump the final internal representation (RTL) to FILE. If the 4455 optional argument is omitted (or if FILE is `.'), the name of the 4456 dump file will be determined by appending `.gkd' to the 4457 compilation output file name. 4458 4459`-fcompare-debug[=OPTS]' 4460 If no error occurs during compilation, run the compiler a second 4461 time, adding OPTS and `-fcompare-debug-second' to the arguments 4462 passed to the second compilation. Dump the final internal 4463 representation in both compilations, and print an error if they 4464 differ. 4465 4466 If the equal sign is omitted, the default `-gtoggle' is used. 4467 4468 The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty 4469 and nonzero, implicitly enables `-fcompare-debug'. If 4470 `GCC_COMPARE_DEBUG' is defined to a string starting with a dash, 4471 then it is used for OPTS, otherwise the default `-gtoggle' is used. 4472 4473 `-fcompare-debug=', with the equal sign but without OPTS, is 4474 equivalent to `-fno-compare-debug', which disables the dumping of 4475 the final representation and the second compilation, preventing 4476 even `GCC_COMPARE_DEBUG' from taking effect. 4477 4478 To verify full coverage during `-fcompare-debug' testing, set 4479 `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which 4480 GCC will reject as an invalid option in any actual compilation 4481 (rather than preprocessing, assembly or linking). To get just a 4482 warning, setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not 4483 overridden' will do. 4484 4485`-fcompare-debug-second' 4486 This option is implicitly passed to the compiler for the second 4487 compilation requested by `-fcompare-debug', along with options to 4488 silence warnings, and omitting other options that would cause 4489 side-effect compiler outputs to files or to the standard output. 4490 Dump files and preserved temporary files are renamed so as to 4491 contain the `.gk' additional extension during the second 4492 compilation, to avoid overwriting those generated by the first. 4493 4494 When this option is passed to the compiler driver, it causes the 4495 _first_ compilation to be skipped, which makes it useful for little 4496 other than debugging the compiler proper. 4497 4498`-feliminate-dwarf2-dups' 4499 Compress DWARF2 debugging information by eliminating duplicated 4500 information about each symbol. This option only makes sense when 4501 generating DWARF2 debugging information with `-gdwarf-2'. 4502 4503`-femit-struct-debug-baseonly' 4504 Emit debug information for struct-like types only when the base 4505 name of the compilation source file matches the base name of file 4506 in which the struct was defined. 4507 4508 This option substantially reduces the size of debugging 4509 information, but at significant potential loss in type information 4510 to the debugger. See `-femit-struct-debug-reduced' for a less 4511 aggressive option. See `-femit-struct-debug-detailed' for more 4512 detailed control. 4513 4514 This option works only with DWARF 2. 4515 4516`-femit-struct-debug-reduced' 4517 Emit debug information for struct-like types only when the base 4518 name of the compilation source file matches the base name of file 4519 in which the type was defined, unless the struct is a template or 4520 defined in a system header. 4521 4522 This option significantly reduces the size of debugging 4523 information, with some potential loss in type information to the 4524 debugger. See `-femit-struct-debug-baseonly' for a more 4525 aggressive option. See `-femit-struct-debug-detailed' for more 4526 detailed control. 4527 4528 This option works only with DWARF 2. 4529 4530`-femit-struct-debug-detailed[=SPEC-LIST]' 4531 Specify the struct-like types for which the compiler will generate 4532 debug information. The intent is to reduce duplicate struct debug 4533 information between different object files within the same program. 4534 4535 This option is a detailed version of `-femit-struct-debug-reduced' 4536 and `-femit-struct-debug-baseonly', which will serve for most 4537 needs. 4538 4539 A specification has the syntax 4540 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 4541 4542 The optional first word limits the specification to structs that 4543 are used directly (`dir:') or used indirectly (`ind:'). A struct 4544 type is used directly when it is the type of a variable, member. 4545 Indirect uses arise through pointers to structs. That is, when 4546 use of an incomplete struct would be legal, the use is indirect. 4547 An example is `struct one direct; struct two * indirect;'. 4548 4549 The optional second word limits the specification to ordinary 4550 structs (`ord:') or generic structs (`gen:'). Generic structs are 4551 a bit complicated to explain. For C++, these are non-explicit 4552 specializations of template classes, or non-template classes 4553 within the above. Other programming languages have generics, but 4554 `-femit-struct-debug-detailed' does not yet implement them. 4555 4556 The third word specifies the source files for those structs for 4557 which the compiler will emit debug information. The values `none' 4558 and `any' have the normal meaning. The value `base' means that 4559 the base of name of the file in which the type declaration appears 4560 must match the base of the name of the main compilation file. In 4561 practice, this means that types declared in `foo.c' and `foo.h' 4562 will have debug information, but types declared in other header 4563 will not. The value `sys' means those types satisfying `base' or 4564 declared in system or compiler headers. 4565 4566 You may need to experiment to determine the best settings for your 4567 application. 4568 4569 The default is `-femit-struct-debug-detailed=all'. 4570 4571 This option works only with DWARF 2. 4572 4573`-fenable-icf-debug' 4574 Generate additional debug information to support identical code 4575 folding (ICF). This option only works with DWARF version 2 or 4576 higher. 4577 4578`-fno-merge-debug-strings' 4579 Direct the linker to not merge together strings in the debugging 4580 information which are identical in different object files. 4581 Merging is not supported by all assemblers or linkers. Merging 4582 decreases the size of the debug information in the output file at 4583 the cost of increasing link processing time. Merging is enabled 4584 by default. 4585 4586`-fdebug-prefix-map=OLD=NEW' 4587 When compiling files in directory `OLD', record debugging 4588 information describing them as in `NEW' instead. 4589 4590`-fno-dwarf2-cfi-asm' 4591 Emit DWARF 2 unwind info as compiler generated `.eh_frame' section 4592 instead of using GAS `.cfi_*' directives. 4593 4594`-p' 4595 Generate extra code to write profile information suitable for the 4596 analysis program `prof'. You must use this option when compiling 4597 the source files you want data about, and you must also use it when 4598 linking. 4599 4600`-pg' 4601 Generate extra code to write profile information suitable for the 4602 analysis program `gprof'. You must use this option when compiling 4603 the source files you want data about, and you must also use it when 4604 linking. 4605 4606`-Q' 4607 Makes the compiler print out each function name as it is compiled, 4608 and print some statistics about each pass when it finishes. 4609 4610`-ftime-report' 4611 Makes the compiler print some statistics about the time consumed 4612 by each pass when it finishes. 4613 4614`-fmem-report' 4615 Makes the compiler print some statistics about permanent memory 4616 allocation when it finishes. 4617 4618`-fpre-ipa-mem-report' 4619 4620`-fpost-ipa-mem-report' 4621 Makes the compiler print some statistics about permanent memory 4622 allocation before or after interprocedural optimization. 4623 4624`-fstack-usage' 4625 Makes the compiler output stack usage information for the program, 4626 on a per-function basis. The filename for the dump is made by 4627 appending `.su' to the AUXNAME. AUXNAME is generated from the 4628 name of the output file, if explicitly specified and it is not an 4629 executable, otherwise it is the basename of the source file. An 4630 entry is made up of three fields: 4631 4632 * The name of the function. 4633 4634 * A number of bytes. 4635 4636 * One or more qualifiers: `static', `dynamic', `bounded'. 4637 4638 The qualifier `static' means that the function manipulates the 4639 stack statically: a fixed number of bytes are allocated for the 4640 frame on function entry and released on function exit; no stack 4641 adjustments are otherwise made in the function. The second field 4642 is this fixed number of bytes. 4643 4644 The qualifier `dynamic' means that the function manipulates the 4645 stack dynamically: in addition to the static allocation described 4646 above, stack adjustments are made in the body of the function, for 4647 example to push/pop arguments around function calls. If the 4648 qualifier `bounded' is also present, the amount of these 4649 adjustments is bounded at compile-time and the second field is an 4650 upper bound of the total amount of stack used by the function. If 4651 it is not present, the amount of these adjustments is not bounded 4652 at compile-time and the second field only represents the bounded 4653 part. 4654 4655`-fprofile-arcs' 4656 Add code so that program flow "arcs" are instrumented. During 4657 execution the program records how many times each branch and call 4658 is executed and how many times it is taken or returns. When the 4659 compiled program exits it saves this data to a file called 4660 `AUXNAME.gcda' for each source file. The data may be used for 4661 profile-directed optimizations (`-fbranch-probabilities'), or for 4662 test coverage analysis (`-ftest-coverage'). Each object file's 4663 AUXNAME is generated from the name of the output file, if 4664 explicitly specified and it is not the final executable, otherwise 4665 it is the basename of the source file. In both cases any suffix 4666 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 4667 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 4668 *Note Cross-profiling::. 4669 4670`--coverage' 4671 This option is used to compile and link code instrumented for 4672 coverage analysis. The option is a synonym for `-fprofile-arcs' 4673 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 4674 See the documentation for those options for more details. 4675 4676 * Compile the source files with `-fprofile-arcs' plus 4677 optimization and code generation options. For test coverage 4678 analysis, use the additional `-ftest-coverage' option. You 4679 do not need to profile every source file in a program. 4680 4681 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 4682 latter implies the former). 4683 4684 * Run the program on a representative workload to generate the 4685 arc profile information. This may be repeated any number of 4686 times. You can run concurrent instances of your program, and 4687 provided that the file system supports locking, the data 4688 files will be correctly updated. Also `fork' calls are 4689 detected and correctly handled (double counting will not 4690 happen). 4691 4692 * For profile-directed optimizations, compile the source files 4693 again with the same optimization and code generation options 4694 plus `-fbranch-probabilities' (*note Options that Control 4695 Optimization: Optimize Options.). 4696 4697 * For test coverage analysis, use `gcov' to produce human 4698 readable information from the `.gcno' and `.gcda' files. 4699 Refer to the `gcov' documentation for further information. 4700 4701 4702 With `-fprofile-arcs', for each function of your program GCC 4703 creates a program flow graph, then finds a spanning tree for the 4704 graph. Only arcs that are not on the spanning tree have to be 4705 instrumented: the compiler adds code to count the number of times 4706 that these arcs are executed. When an arc is the only exit or 4707 only entrance to a block, the instrumentation code can be added to 4708 the block; otherwise, a new basic block must be created to hold 4709 the instrumentation code. 4710 4711`-ftest-coverage' 4712 Produce a notes file that the `gcov' code-coverage utility (*note 4713 `gcov'--a Test Coverage Program: Gcov.) can use to show program 4714 coverage. Each source file's note file is called `AUXNAME.gcno'. 4715 Refer to the `-fprofile-arcs' option above for a description of 4716 AUXNAME and instructions on how to generate test coverage data. 4717 Coverage data will match the source files more closely, if you do 4718 not optimize. 4719 4720`-fdbg-cnt-list' 4721 Print the name and the counter upper bound for all debug counters. 4722 4723`-fdbg-cnt=COUNTER-VALUE-LIST' 4724 Set the internal debug counter upper bound. COUNTER-VALUE-LIST is 4725 a comma-separated list of NAME:VALUE pairs which sets the upper 4726 bound of each debug counter NAME to VALUE. All debug counters 4727 have the initial upper bound of UINT_MAX, thus dbg_cnt() returns 4728 true always unless the upper bound is set by this option. e.g. 4729 With -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true 4730 only for first 10 invocations and dbg_cnt(tail_call) will return 4731 false always. 4732 4733`-dLETTERS' 4734`-fdump-rtl-PASS' 4735 Says to make debugging dumps during compilation at times specified 4736 by LETTERS. This is used for debugging the RTL-based passes of the 4737 compiler. The file names for most of the dumps are made by 4738 appending a pass number and a word to the DUMPNAME, and the files 4739 are created in the directory of the output file. Note that the 4740 pass number is computed statically as passes get registered into 4741 the pass manager. Thus the numbering is not related to the 4742 dynamic order of execution of passes. In particular, a pass 4743 installed by a plugin could have a number over 200 even if it 4744 executed quite early. DUMPNAME is generated from the name of the 4745 output file, if explicitly specified and it is not an executable, 4746 otherwise it is the basename of the source file. These switches 4747 may have different effects when `-E' is used for preprocessing. 4748 4749 Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d' 4750 option LETTERS. Here are the possible letters for use in PASS and 4751 LETTERS, and their meanings: 4752 4753 `-fdump-rtl-alignments' 4754 Dump after branch alignments have been computed. 4755 4756 `-fdump-rtl-asmcons' 4757 Dump after fixing rtl statements that have unsatisfied in/out 4758 constraints. 4759 4760 `-fdump-rtl-auto_inc_dec' 4761 Dump after auto-inc-dec discovery. This pass is only run on 4762 architectures that have auto inc or auto dec instructions. 4763 4764 `-fdump-rtl-barriers' 4765 Dump after cleaning up the barrier instructions. 4766 4767 `-fdump-rtl-bbpart' 4768 Dump after partitioning hot and cold basic blocks. 4769 4770 `-fdump-rtl-bbro' 4771 Dump after block reordering. 4772 4773 `-fdump-rtl-btl1' 4774 `-fdump-rtl-btl2' 4775 `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after 4776 the two branch target load optimization passes. 4777 4778 `-fdump-rtl-bypass' 4779 Dump after jump bypassing and control flow optimizations. 4780 4781 `-fdump-rtl-combine' 4782 Dump after the RTL instruction combination pass. 4783 4784 `-fdump-rtl-compgotos' 4785 Dump after duplicating the computed gotos. 4786 4787 `-fdump-rtl-ce1' 4788 `-fdump-rtl-ce2' 4789 `-fdump-rtl-ce3' 4790 `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3' 4791 enable dumping after the three if conversion passes. 4792 4793 `-fdump-rtl-cprop_hardreg' 4794 Dump after hard register copy propagation. 4795 4796 `-fdump-rtl-csa' 4797 Dump after combining stack adjustments. 4798 4799 `-fdump-rtl-cse1' 4800 `-fdump-rtl-cse2' 4801 `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after 4802 the two common sub-expression elimination passes. 4803 4804 `-fdump-rtl-dce' 4805 Dump after the standalone dead code elimination passes. 4806 4807 `-fdump-rtl-dbr' 4808 Dump after delayed branch scheduling. 4809 4810 `-fdump-rtl-dce1' 4811 `-fdump-rtl-dce2' 4812 `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after 4813 the two dead store elimination passes. 4814 4815 `-fdump-rtl-eh' 4816 Dump after finalization of EH handling code. 4817 4818 `-fdump-rtl-eh_ranges' 4819 Dump after conversion of EH handling range regions. 4820 4821 `-fdump-rtl-expand' 4822 Dump after RTL generation. 4823 4824 `-fdump-rtl-fwprop1' 4825 `-fdump-rtl-fwprop2' 4826 `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping 4827 after the two forward propagation passes. 4828 4829 `-fdump-rtl-gcse1' 4830 `-fdump-rtl-gcse2' 4831 `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping 4832 after global common subexpression elimination. 4833 4834 `-fdump-rtl-init-regs' 4835 Dump after the initialization of the registers. 4836 4837 `-fdump-rtl-initvals' 4838 Dump after the computation of the initial value sets. 4839 4840 `-fdump-rtl-into_cfglayout' 4841 Dump after converting to cfglayout mode. 4842 4843 `-fdump-rtl-ira' 4844 Dump after iterated register allocation. 4845 4846 `-fdump-rtl-jump' 4847 Dump after the second jump optimization. 4848 4849 `-fdump-rtl-loop2' 4850 `-fdump-rtl-loop2' enables dumping after the rtl loop 4851 optimization passes. 4852 4853 `-fdump-rtl-mach' 4854 Dump after performing the machine dependent reorganization 4855 pass, if that pass exists. 4856 4857 `-fdump-rtl-mode_sw' 4858 Dump after removing redundant mode switches. 4859 4860 `-fdump-rtl-rnreg' 4861 Dump after register renumbering. 4862 4863 `-fdump-rtl-outof_cfglayout' 4864 Dump after converting from cfglayout mode. 4865 4866 `-fdump-rtl-peephole2' 4867 Dump after the peephole pass. 4868 4869 `-fdump-rtl-postreload' 4870 Dump after post-reload optimizations. 4871 4872 `-fdump-rtl-pro_and_epilogue' 4873 Dump after generating the function pro and epilogues. 4874 4875 `-fdump-rtl-regmove' 4876 Dump after the register move pass. 4877 4878 `-fdump-rtl-sched1' 4879 `-fdump-rtl-sched2' 4880 `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping 4881 after the basic block scheduling passes. 4882 4883 `-fdump-rtl-see' 4884 Dump after sign extension elimination. 4885 4886 `-fdump-rtl-seqabstr' 4887 Dump after common sequence discovery. 4888 4889 `-fdump-rtl-shorten' 4890 Dump after shortening branches. 4891 4892 `-fdump-rtl-sibling' 4893 Dump after sibling call optimizations. 4894 4895 `-fdump-rtl-split1' 4896 `-fdump-rtl-split2' 4897 `-fdump-rtl-split3' 4898 `-fdump-rtl-split4' 4899 `-fdump-rtl-split5' 4900 `-fdump-rtl-split1', `-fdump-rtl-split2', 4901 `-fdump-rtl-split3', `-fdump-rtl-split4' and 4902 `-fdump-rtl-split5' enable dumping after five rounds of 4903 instruction splitting. 4904 4905 `-fdump-rtl-sms' 4906 Dump after modulo scheduling. This pass is only run on some 4907 architectures. 4908 4909 `-fdump-rtl-stack' 4910 Dump after conversion from GCC's "flat register file" 4911 registers to the x87's stack-like registers. This pass is 4912 only run on x86 variants. 4913 4914 `-fdump-rtl-subreg1' 4915 `-fdump-rtl-subreg2' 4916 `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping 4917 after the two subreg expansion passes. 4918 4919 `-fdump-rtl-unshare' 4920 Dump after all rtl has been unshared. 4921 4922 `-fdump-rtl-vartrack' 4923 Dump after variable tracking. 4924 4925 `-fdump-rtl-vregs' 4926 Dump after converting virtual registers to hard registers. 4927 4928 `-fdump-rtl-web' 4929 Dump after live range splitting. 4930 4931 `-fdump-rtl-regclass' 4932 `-fdump-rtl-subregs_of_mode_init' 4933 `-fdump-rtl-subregs_of_mode_finish' 4934 `-fdump-rtl-dfinit' 4935 `-fdump-rtl-dfinish' 4936 These dumps are defined but always produce empty files. 4937 4938 `-fdump-rtl-all' 4939 Produce all the dumps listed above. 4940 4941 `-dA' 4942 Annotate the assembler output with miscellaneous debugging 4943 information. 4944 4945 `-dD' 4946 Dump all macro definitions, at the end of preprocessing, in 4947 addition to normal output. 4948 4949 `-dH' 4950 Produce a core dump whenever an error occurs. 4951 4952 `-dm' 4953 Print statistics on memory usage, at the end of the run, to 4954 standard error. 4955 4956 `-dp' 4957 Annotate the assembler output with a comment indicating which 4958 pattern and alternative was used. The length of each 4959 instruction is also printed. 4960 4961 `-dP' 4962 Dump the RTL in the assembler output as a comment before each 4963 instruction. Also turns on `-dp' annotation. 4964 4965 `-dv' 4966 For each of the other indicated dump files 4967 (`-fdump-rtl-PASS'), dump a representation of the control 4968 flow graph suitable for viewing with VCG to `FILE.PASS.vcg'. 4969 4970 `-dx' 4971 Just generate RTL for a function instead of compiling it. 4972 Usually used with `-fdump-rtl-expand'. 4973 4974`-fdump-noaddr' 4975 When doing debugging dumps, suppress address output. This makes 4976 it more feasible to use diff on debugging dumps for compiler 4977 invocations with different compiler binaries and/or different text 4978 / bss / data / heap / stack / dso start locations. 4979 4980`-fdump-unnumbered' 4981 When doing debugging dumps, suppress instruction numbers and 4982 address output. This makes it more feasible to use diff on 4983 debugging dumps for compiler invocations with different options, 4984 in particular with and without `-g'. 4985 4986`-fdump-unnumbered-links' 4987 When doing debugging dumps (see `-d' option above), suppress 4988 instruction numbers for the links to the previous and next 4989 instructions in a sequence. 4990 4991`-fdump-translation-unit (C++ only)' 4992`-fdump-translation-unit-OPTIONS (C++ only)' 4993 Dump a representation of the tree structure for the entire 4994 translation unit to a file. The file name is made by appending 4995 `.tu' to the source file name, and the file is created in the same 4996 directory as the output file. If the `-OPTIONS' form is used, 4997 OPTIONS controls the details of the dump as described for the 4998 `-fdump-tree' options. 4999 5000`-fdump-class-hierarchy (C++ only)' 5001`-fdump-class-hierarchy-OPTIONS (C++ only)' 5002 Dump a representation of each class's hierarchy and virtual 5003 function table layout to a file. The file name is made by 5004 appending `.class' to the source file name, and the file is 5005 created in the same directory as the output file. If the 5006 `-OPTIONS' form is used, OPTIONS controls the details of the dump 5007 as described for the `-fdump-tree' options. 5008 5009`-fdump-ipa-SWITCH' 5010 Control the dumping at various stages of inter-procedural analysis 5011 language tree to a file. The file name is generated by appending a 5012 switch specific suffix to the source file name, and the file is 5013 created in the same directory as the output file. The following 5014 dumps are possible: 5015 5016 `all' 5017 Enables all inter-procedural analysis dumps. 5018 5019 `cgraph' 5020 Dumps information about call-graph optimization, unused 5021 function removal, and inlining decisions. 5022 5023 `inline' 5024 Dump after function inlining. 5025 5026 5027`-fdump-statistics-OPTION' 5028 Enable and control dumping of pass statistics in a separate file. 5029 The file name is generated by appending a suffix ending in 5030 `.statistics' to the source file name, and the file is created in 5031 the same directory as the output file. If the `-OPTION' form is 5032 used, `-stats' will cause counters to be summed over the whole 5033 compilation unit while `-details' will dump every event as the 5034 passes generate them. The default with no option is to sum 5035 counters for each function compiled. 5036 5037`-fdump-tree-SWITCH' 5038`-fdump-tree-SWITCH-OPTIONS' 5039 Control the dumping at various stages of processing the 5040 intermediate language tree to a file. The file name is generated 5041 by appending a switch specific suffix to the source file name, and 5042 the file is created in the same directory as the output file. If 5043 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 5044 options that control the details of the dump. Not all options are 5045 applicable to all dumps, those which are not meaningful will be 5046 ignored. The following options are available 5047 5048 `address' 5049 Print the address of each node. Usually this is not 5050 meaningful as it changes according to the environment and 5051 source file. Its primary use is for tying up a dump file 5052 with a debug environment. 5053 5054 `asmname' 5055 If `DECL_ASSEMBLER_NAME' has been set for a given decl, use 5056 that in the dump instead of `DECL_NAME'. Its primary use is 5057 ease of use working backward from mangled names in the 5058 assembly file. 5059 5060 `slim' 5061 Inhibit dumping of members of a scope or body of a function 5062 merely because that scope has been reached. Only dump such 5063 items when they are directly reachable by some other path. 5064 When dumping pretty-printed trees, this option inhibits 5065 dumping the bodies of control structures. 5066 5067 `raw' 5068 Print a raw representation of the tree. By default, trees are 5069 pretty-printed into a C-like representation. 5070 5071 `details' 5072 Enable more detailed dumps (not honored by every dump option). 5073 5074 `stats' 5075 Enable dumping various statistics about the pass (not honored 5076 by every dump option). 5077 5078 `blocks' 5079 Enable showing basic block boundaries (disabled in raw dumps). 5080 5081 `vops' 5082 Enable showing virtual operands for every statement. 5083 5084 `lineno' 5085 Enable showing line numbers for statements. 5086 5087 `uid' 5088 Enable showing the unique ID (`DECL_UID') for each variable. 5089 5090 `verbose' 5091 Enable showing the tree dump for each statement. 5092 5093 `eh' 5094 Enable showing the EH region number holding each statement. 5095 5096 `all' 5097 Turn on all options, except `raw', `slim', `verbose' and 5098 `lineno'. 5099 5100 The following tree dumps are possible: 5101 `original' 5102 Dump before any tree based optimization, to `FILE.original'. 5103 5104 `optimized' 5105 Dump after all tree based optimization, to `FILE.optimized'. 5106 5107 `gimple' 5108 Dump each function before and after the gimplification pass 5109 to a file. The file name is made by appending `.gimple' to 5110 the source file name. 5111 5112 `cfg' 5113 Dump the control flow graph of each function to a file. The 5114 file name is made by appending `.cfg' to the source file name. 5115 5116 `vcg' 5117 Dump the control flow graph of each function to a file in VCG 5118 format. The file name is made by appending `.vcg' to the 5119 source file name. Note that if the file contains more than 5120 one function, the generated file cannot be used directly by 5121 VCG. You will need to cut and paste each function's graph 5122 into its own separate file first. 5123 5124 `ch' 5125 Dump each function after copying loop headers. The file name 5126 is made by appending `.ch' to the source file name. 5127 5128 `ssa' 5129 Dump SSA related information to a file. The file name is 5130 made by appending `.ssa' to the source file name. 5131 5132 `alias' 5133 Dump aliasing information for each function. The file name 5134 is made by appending `.alias' to the source file name. 5135 5136 `ccp' 5137 Dump each function after CCP. The file name is made by 5138 appending `.ccp' to the source file name. 5139 5140 `storeccp' 5141 Dump each function after STORE-CCP. The file name is made by 5142 appending `.storeccp' to the source file name. 5143 5144 `pre' 5145 Dump trees after partial redundancy elimination. The file 5146 name is made by appending `.pre' to the source file name. 5147 5148 `fre' 5149 Dump trees after full redundancy elimination. The file name 5150 is made by appending `.fre' to the source file name. 5151 5152 `copyprop' 5153 Dump trees after copy propagation. The file name is made by 5154 appending `.copyprop' to the source file name. 5155 5156 `store_copyprop' 5157 Dump trees after store copy-propagation. The file name is 5158 made by appending `.store_copyprop' to the source file name. 5159 5160 `dce' 5161 Dump each function after dead code elimination. The file 5162 name is made by appending `.dce' to the source file name. 5163 5164 `mudflap' 5165 Dump each function after adding mudflap instrumentation. The 5166 file name is made by appending `.mudflap' to the source file 5167 name. 5168 5169 `sra' 5170 Dump each function after performing scalar replacement of 5171 aggregates. The file name is made by appending `.sra' to the 5172 source file name. 5173 5174 `sink' 5175 Dump each function after performing code sinking. The file 5176 name is made by appending `.sink' to the source file name. 5177 5178 `dom' 5179 Dump each function after applying dominator tree 5180 optimizations. The file name is made by appending `.dom' to 5181 the source file name. 5182 5183 `dse' 5184 Dump each function after applying dead store elimination. 5185 The file name is made by appending `.dse' to the source file 5186 name. 5187 5188 `phiopt' 5189 Dump each function after optimizing PHI nodes into 5190 straightline code. The file name is made by appending 5191 `.phiopt' to the source file name. 5192 5193 `forwprop' 5194 Dump each function after forward propagating single use 5195 variables. The file name is made by appending `.forwprop' to 5196 the source file name. 5197 5198 `copyrename' 5199 Dump each function after applying the copy rename 5200 optimization. The file name is made by appending 5201 `.copyrename' to the source file name. 5202 5203 `nrv' 5204 Dump each function after applying the named return value 5205 optimization on generic trees. The file name is made by 5206 appending `.nrv' to the source file name. 5207 5208 `vect' 5209 Dump each function after applying vectorization of loops. 5210 The file name is made by appending `.vect' to the source file 5211 name. 5212 5213 `slp' 5214 Dump each function after applying vectorization of basic 5215 blocks. The file name is made by appending `.slp' to the 5216 source file name. 5217 5218 `vrp' 5219 Dump each function after Value Range Propagation (VRP). The 5220 file name is made by appending `.vrp' to the source file name. 5221 5222 `all' 5223 Enable all the available tree dumps with the flags provided 5224 in this option. 5225 5226`-ftree-vectorizer-verbose=N' 5227 This option controls the amount of debugging output the vectorizer 5228 prints. This information is written to standard error, unless 5229 `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which 5230 case it is output to the usual dump listing file, `.vect'. For 5231 N=0 no diagnostic information is reported. If N=1 the vectorizer 5232 reports each loop that got vectorized, and the total number of 5233 loops that got vectorized. If N=2 the vectorizer also reports 5234 non-vectorized loops that passed the first analysis phase 5235 (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb, 5236 single-entry/exit loops. This is the same verbosity level that 5237 `-fdump-tree-vect-stats' uses. Higher verbosity levels mean 5238 either more information dumped for each reported loop, or same 5239 amount of information reported for more loops: if N=3, vectorizer 5240 cost model information is reported. If N=4, alignment related 5241 information is added to the reports. If N=5, data-references 5242 related information (e.g. memory dependences, memory 5243 access-patterns) is added to the reports. If N=6, the vectorizer 5244 reports also non-vectorized inner-most loops that did not pass the 5245 first analysis phase (i.e., may not be countable, or may have 5246 complicated control-flow). If N=7, the vectorizer reports also 5247 non-vectorized nested loops. If N=8, SLP related information is 5248 added to the reports. For N=9, all the information the vectorizer 5249 generates during its analysis and transformation is reported. 5250 This is the same verbosity level that `-fdump-tree-vect-details' 5251 uses. 5252 5253`-frandom-seed=STRING' 5254 This option provides a seed that GCC uses when it would otherwise 5255 use random numbers. It is used to generate certain symbol names 5256 that have to be different in every compiled file. It is also used 5257 to place unique stamps in coverage data files and the object files 5258 that produce them. You can use the `-frandom-seed' option to 5259 produce reproducibly identical object files. 5260 5261 The STRING should be different for every file you compile. 5262 5263`-fsched-verbose=N' 5264 On targets that use instruction scheduling, this option controls 5265 the amount of debugging output the scheduler prints. This 5266 information is written to standard error, unless 5267 `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which 5268 case it is output to the usual dump listing file, `.sched1' or 5269 `.sched2' respectively. However for N greater than nine, the 5270 output is always printed to standard error. 5271 5272 For N greater than zero, `-fsched-verbose' outputs the same 5273 information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'. For N 5274 greater than one, it also output basic block probabilities, 5275 detailed ready list information and unit/insn info. For N greater 5276 than two, it includes RTL at abort point, control-flow and regions 5277 info. And for N over four, `-fsched-verbose' also includes 5278 dependence info. 5279 5280`-save-temps' 5281`-save-temps=cwd' 5282 Store the usual "temporary" intermediate files permanently; place 5283 them in the current directory and name them based on the source 5284 file. Thus, compiling `foo.c' with `-c -save-temps' would produce 5285 files `foo.i' and `foo.s', as well as `foo.o'. This creates a 5286 preprocessed `foo.i' output file even though the compiler now 5287 normally uses an integrated preprocessor. 5288 5289 When used in combination with the `-x' command line option, 5290 `-save-temps' is sensible enough to avoid over writing an input 5291 source file with the same extension as an intermediate file. The 5292 corresponding intermediate file may be obtained by renaming the 5293 source file before using `-save-temps'. 5294 5295 If you invoke GCC in parallel, compiling several different source 5296 files that share a common base name in different subdirectories or 5297 the same source file compiled for multiple output destinations, it 5298 is likely that the different parallel compilers will interfere 5299 with each other, and overwrite the temporary files. For instance: 5300 5301 gcc -save-temps -o outdir1/foo.o indir1/foo.c& 5302 gcc -save-temps -o outdir2/foo.o indir2/foo.c& 5303 5304 may result in `foo.i' and `foo.o' being written to simultaneously 5305 by both compilers. 5306 5307`-save-temps=obj' 5308 Store the usual "temporary" intermediate files permanently. If the 5309 `-o' option is used, the temporary files are based on the object 5310 file. If the `-o' option is not used, the `-save-temps=obj' 5311 switch behaves like `-save-temps'. 5312 5313 For example: 5314 5315 gcc -save-temps=obj -c foo.c 5316 gcc -save-temps=obj -c bar.c -o dir/xbar.o 5317 gcc -save-temps=obj foobar.c -o dir2/yfoobar 5318 5319 would create `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s', 5320 `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'. 5321 5322`-time[=FILE]' 5323 Report the CPU time taken by each subprocess in the compilation 5324 sequence. For C source files, this is the compiler proper and 5325 assembler (plus the linker if linking is done). 5326 5327 Without the specification of an output file, the output looks like 5328 this: 5329 5330 # cc1 0.12 0.01 5331 # as 0.00 0.01 5332 5333 The first number on each line is the "user time", that is time 5334 spent executing the program itself. The second number is "system 5335 time", time spent executing operating system routines on behalf of 5336 the program. Both numbers are in seconds. 5337 5338 With the specification of an output file, the output is appended 5339 to the named file, and it looks like this: 5340 5341 0.12 0.01 cc1 OPTIONS 5342 0.00 0.01 as OPTIONS 5343 5344 The "user time" and the "system time" are moved before the program 5345 name, and the options passed to the program are displayed, so that 5346 one can later tell what file was being compiled, and with which 5347 options. 5348 5349`-fvar-tracking' 5350 Run variable tracking pass. It computes where variables are 5351 stored at each position in code. Better debugging information is 5352 then generated (if the debugging information format supports this 5353 information). 5354 5355 It is enabled by default when compiling with optimization (`-Os', 5356 `-O', `-O2', ...), debugging information (`-g') and the debug info 5357 format supports it. 5358 5359`-fvar-tracking-assignments' 5360 Annotate assignments to user variables early in the compilation and 5361 attempt to carry the annotations over throughout the compilation 5362 all the way to the end, in an attempt to improve debug information 5363 while optimizing. Use of `-gdwarf-4' is recommended along with it. 5364 5365 It can be enabled even if var-tracking is disabled, in which case 5366 annotations will be created and maintained, but discarded at the 5367 end. 5368 5369`-fvar-tracking-assignments-toggle' 5370 Toggle `-fvar-tracking-assignments', in the same way that 5371 `-gtoggle' toggles `-g'. 5372 5373`-print-file-name=LIBRARY' 5374 Print the full absolute name of the library file LIBRARY that 5375 would be used when linking--and don't do anything else. With this 5376 option, GCC does not compile or link anything; it just prints the 5377 file name. 5378 5379`-print-multi-directory' 5380 Print the directory name corresponding to the multilib selected by 5381 any other switches present in the command line. This directory is 5382 supposed to exist in `GCC_EXEC_PREFIX'. 5383 5384`-print-multi-lib' 5385 Print the mapping from multilib directory names to compiler 5386 switches that enable them. The directory name is separated from 5387 the switches by `;', and each switch starts with an `@' instead of 5388 the `-', without spaces between multiple switches. This is 5389 supposed to ease shell-processing. 5390 5391`-print-multi-os-directory' 5392 Print the path to OS libraries for the selected multilib, relative 5393 to some `lib' subdirectory. If OS libraries are present in the 5394 `lib' subdirectory and no multilibs are used, this is usually just 5395 `.', if OS libraries are present in `libSUFFIX' sibling 5396 directories this prints e.g. `../lib64', `../lib' or `../lib32', 5397 or if OS libraries are present in `lib/SUBDIR' subdirectories it 5398 prints e.g. `amd64', `sparcv9' or `ev6'. 5399 5400`-print-prog-name=PROGRAM' 5401 Like `-print-file-name', but searches for a program such as `cpp'. 5402 5403`-print-libgcc-file-name' 5404 Same as `-print-file-name=libgcc.a'. 5405 5406 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 5407 you do want to link with `libgcc.a'. You can do 5408 5409 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 5410 5411`-print-search-dirs' 5412 Print the name of the configured installation directory and a list 5413 of program and library directories `gcc' will search--and don't do 5414 anything else. 5415 5416 This is useful when `gcc' prints the error message `installation 5417 problem, cannot exec cpp0: No such file or directory'. To resolve 5418 this you either need to put `cpp0' and the other compiler 5419 components where `gcc' expects to find them, or you can set the 5420 environment variable `GCC_EXEC_PREFIX' to the directory where you 5421 installed them. Don't forget the trailing `/'. *Note Environment 5422 Variables::. 5423 5424`-print-sysroot' 5425 Print the target sysroot directory that will be used during 5426 compilation. This is the target sysroot specified either at 5427 configure time or using the `--sysroot' option, possibly with an 5428 extra suffix that depends on compilation options. If no target 5429 sysroot is specified, the option prints nothing. 5430 5431`-print-sysroot-headers-suffix' 5432 Print the suffix added to the target sysroot when searching for 5433 headers, or give an error if the compiler is not configured with 5434 such a suffix--and don't do anything else. 5435 5436`-dumpmachine' 5437 Print the compiler's target machine (for example, 5438 `i686-pc-linux-gnu')--and don't do anything else. 5439 5440`-dumpversion' 5441 Print the compiler version (for example, `3.0')--and don't do 5442 anything else. 5443 5444`-dumpspecs' 5445 Print the compiler's built-in specs--and don't do anything else. 5446 (This is used when GCC itself is being built.) *Note Spec Files::. 5447 5448`-feliminate-unused-debug-types' 5449 Normally, when producing DWARF2 output, GCC will emit debugging 5450 information for all types declared in a compilation unit, 5451 regardless of whether or not they are actually used in that 5452 compilation unit. Sometimes this is useful, such as if, in the 5453 debugger, you want to cast a value to a type that is not actually 5454 used in your program (but is declared). More often, however, this 5455 results in a significant amount of wasted space. With this 5456 option, GCC will avoid producing debug symbol output for types 5457 that are nowhere used in the source file being compiled. 5458 5459 5460File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 5461 54623.10 Options That Control Optimization 5463====================================== 5464 5465These options control various sorts of optimizations. 5466 5467 Without any optimization option, the compiler's goal is to reduce the 5468cost of compilation and to make debugging produce the expected results. 5469Statements are independent: if you stop the program with a breakpoint 5470between statements, you can then assign a new value to any variable or 5471change the program counter to any other statement in the function and 5472get exactly the results you would expect from the source code. 5473 5474 Turning on optimization flags makes the compiler attempt to improve 5475the performance and/or code size at the expense of compilation time and 5476possibly the ability to debug the program. 5477 5478 The compiler performs optimization based on the knowledge it has of the 5479program. Compiling multiple files at once to a single output file mode 5480allows the compiler to use information gained from all of the files 5481when compiling each of them. 5482 5483 Not all optimizations are controlled directly by a flag. Only 5484optimizations that have a flag are listed in this section. 5485 5486 Most optimizations are only enabled if an `-O' level is set on the 5487command line. Otherwise they are disabled, even if individual 5488optimization flags are specified. 5489 5490 Depending on the target and how GCC was configured, a slightly 5491different set of optimizations may be enabled at each `-O' level than 5492those listed here. You can invoke GCC with `-Q --help=optimizers' to 5493find out the exact set of optimizations that are enabled at each level. 5494*Note Overall Options::, for examples. 5495 5496`-O' 5497`-O1' 5498 Optimize. Optimizing compilation takes somewhat more time, and a 5499 lot more memory for a large function. 5500 5501 With `-O', the compiler tries to reduce code size and execution 5502 time, without performing any optimizations that take a great deal 5503 of compilation time. 5504 5505 `-O' turns on the following optimization flags: 5506 -fauto-inc-dec 5507 -fcompare-elim 5508 -fcprop-registers 5509 -fdce 5510 -fdefer-pop 5511 -fdelayed-branch 5512 -fdse 5513 -fguess-branch-probability 5514 -fif-conversion2 5515 -fif-conversion 5516 -fipa-pure-const 5517 -fipa-profile 5518 -fipa-reference 5519 -fmerge-constants 5520 -fsplit-wide-types 5521 -ftree-bit-ccp 5522 -ftree-builtin-call-dce 5523 -ftree-ccp 5524 -ftree-ch 5525 -ftree-copyrename 5526 -ftree-dce 5527 -ftree-dominator-opts 5528 -ftree-dse 5529 -ftree-forwprop 5530 -ftree-fre 5531 -ftree-phiprop 5532 -ftree-sra 5533 -ftree-pta 5534 -ftree-ter 5535 -funit-at-a-time 5536 5537 `-O' also turns on `-fomit-frame-pointer' on machines where doing 5538 so does not interfere with debugging. 5539 5540`-O2' 5541 Optimize even more. GCC performs nearly all supported 5542 optimizations that do not involve a space-speed tradeoff. As 5543 compared to `-O', this option increases both compilation time and 5544 the performance of the generated code. 5545 5546 `-O2' turns on all optimization flags specified by `-O'. It also 5547 turns on the following optimization flags: 5548 -fthread-jumps 5549 -falign-functions -falign-jumps 5550 -falign-loops -falign-labels 5551 -fcaller-saves 5552 -fcrossjumping 5553 -fcse-follow-jumps -fcse-skip-blocks 5554 -fdelete-null-pointer-checks 5555 -fdevirtualize 5556 -fexpensive-optimizations 5557 -fgcse -fgcse-lm 5558 -finline-small-functions 5559 -findirect-inlining 5560 -fipa-sra 5561 -foptimize-sibling-calls 5562 -fpartial-inlining 5563 -fpeephole2 5564 -fregmove 5565 -freorder-blocks -freorder-functions 5566 -frerun-cse-after-loop 5567 -fsched-interblock -fsched-spec 5568 -fschedule-insns -fschedule-insns2 5569 -fstrict-aliasing -fstrict-overflow 5570 -ftree-if-to-switch-conversion 5571 -ftree-switch-conversion 5572 -ftree-pre 5573 -ftree-vrp 5574 5575 Please note the warning under `-fgcse' about invoking `-O2' on 5576 programs that use computed gotos. 5577 5578`-O3' 5579 Optimize yet more. `-O3' turns on all optimizations specified by 5580 `-O2' and also turns on the `-finline-functions', 5581 `-funswitch-loops', `-fpredictive-commoning', 5582 `-fgcse-after-reload', `-ftree-vectorize' and `-fipa-cp-clone' 5583 options. 5584 5585`-O0' 5586 Reduce compilation time and make debugging produce the expected 5587 results. This is the default. 5588 5589`-Os' 5590 Optimize for size. `-Os' enables all `-O2' optimizations that do 5591 not typically increase code size. It also performs further 5592 optimizations designed to reduce code size. 5593 5594 `-Os' disables the following optimization flags: 5595 -falign-functions -falign-jumps -falign-loops 5596 -falign-labels -freorder-blocks -freorder-blocks-and-partition 5597 -fprefetch-loop-arrays -ftree-vect-loop-version 5598 5599`-Ofast' 5600 Disregard strict standards compliance. `-Ofast' enables all `-O3' 5601 optimizations. It also enables optimizations that are not valid 5602 for all standard compliant programs. It turns on `-ffast-math'. 5603 5604 If you use multiple `-O' options, with or without level numbers, 5605 the last such option is the one that is effective. 5606 5607 Options of the form `-fFLAG' specify machine-independent flags. Most 5608flags have both positive and negative forms; the negative form of 5609`-ffoo' would be `-fno-foo'. In the table below, only one of the forms 5610is listed--the one you typically will use. You can figure out the 5611other form by either removing `no-' or adding it. 5612 5613 The following options control specific optimizations. They are either 5614activated by `-O' options or are related to ones that are. You can use 5615the following flags in the rare cases when "fine-tuning" of 5616optimizations to be performed is desired. 5617 5618`-fno-default-inline' 5619 Do not make member functions inline by default merely because they 5620 are defined inside the class scope (C++ only). Otherwise, when 5621 you specify `-O', member functions defined inside class scope are 5622 compiled inline by default; i.e., you don't need to add `inline' 5623 in front of the member function name. 5624 5625`-fno-defer-pop' 5626 Always pop the arguments to each function call as soon as that 5627 function returns. For machines which must pop arguments after a 5628 function call, the compiler normally lets arguments accumulate on 5629 the stack for several function calls and pops them all at once. 5630 5631 Disabled at levels `-O', `-O2', `-O3', `-Os'. 5632 5633`-fforward-propagate' 5634 Perform a forward propagation pass on RTL. The pass tries to 5635 combine two instructions and checks if the result can be 5636 simplified. If loop unrolling is active, two passes are performed 5637 and the second is scheduled after loop unrolling. 5638 5639 This option is enabled by default at optimization levels `-O', 5640 `-O2', `-O3', `-Os'. 5641 5642`-ffp-contract=STYLE' 5643 `-ffp-contract=off' disables floating-point expression contraction. 5644 `-ffp-contract=fast' enables floating-point expression contraction 5645 such as forming of fused multiply-add operations if the target has 5646 native support for them. `-ffp-contract=on' enables 5647 floating-point expression contraction if allowed by the language 5648 standard. This is currently not implemented and treated equal to 5649 `-ffp-contract=off'. 5650 5651 The default is `-ffp-contract=fast'. 5652 5653`-fomit-frame-pointer' 5654 Don't keep the frame pointer in a register for functions that 5655 don't need one. This avoids the instructions to save, set up and 5656 restore frame pointers; it also makes an extra register available 5657 in many functions. *It also makes debugging impossible on some 5658 machines.* 5659 5660 On some machines, such as the VAX, this flag has no effect, because 5661 the standard calling sequence automatically handles the frame 5662 pointer and nothing is saved by pretending it doesn't exist. The 5663 machine-description macro `FRAME_POINTER_REQUIRED' controls 5664 whether a target machine supports this flag. *Note Register 5665 Usage: (gccint)Registers. 5666 5667 Starting with GCC version 4.6, the default setting (when not 5668 optimizing for size) for 32-bit Linux x86 and 32-bit Darwin x86 5669 targets has been changed to `-fomit-frame-pointer'. The default 5670 can be reverted to `-fno-omit-frame-pointer' by configuring GCC 5671 with the `--enable-frame-pointer' configure option. 5672 5673 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5674 5675`-foptimize-sibling-calls' 5676 Optimize sibling and tail recursive calls. 5677 5678 Enabled at levels `-O2', `-O3', `-Os'. 5679 5680`-fno-inline' 5681 Don't pay attention to the `inline' keyword. Normally this option 5682 is used to keep the compiler from expanding any functions inline. 5683 Note that if you are not optimizing, no functions can be expanded 5684 inline. 5685 5686`-finline-small-functions' 5687 Integrate functions into their callers when their body is smaller 5688 than expected function call code (so overall size of program gets 5689 smaller). The compiler heuristically decides which functions are 5690 simple enough to be worth integrating in this way. 5691 5692 Enabled at level `-O2'. 5693 5694`-findirect-inlining' 5695 Inline also indirect calls that are discovered to be known at 5696 compile time thanks to previous inlining. This option has any 5697 effect only when inlining itself is turned on by the 5698 `-finline-functions' or `-finline-small-functions' options. 5699 5700 Enabled at level `-O2'. 5701 5702`-finline-functions' 5703 Integrate all simple functions into their callers. The compiler 5704 heuristically decides which functions are simple enough to be worth 5705 integrating in this way. 5706 5707 If all calls to a given function are integrated, and the function 5708 is declared `static', then the function is normally not output as 5709 assembler code in its own right. 5710 5711 Enabled at level `-O3'. 5712 5713`-finline-functions-called-once' 5714 Consider all `static' functions called once for inlining into their 5715 caller even if they are not marked `inline'. If a call to a given 5716 function is integrated, then the function is not output as 5717 assembler code in its own right. 5718 5719 Enabled at levels `-O1', `-O2', `-O3' and `-Os'. 5720 5721`-fearly-inlining' 5722 Inline functions marked by `always_inline' and functions whose 5723 body seems smaller than the function call overhead early before 5724 doing `-fprofile-generate' instrumentation and real inlining pass. 5725 Doing so makes profiling significantly cheaper and usually 5726 inlining faster on programs having large chains of nested wrapper 5727 functions. 5728 5729 Enabled by default. 5730 5731`-fipa-sra' 5732 Perform interprocedural scalar replacement of aggregates, removal 5733 of unused parameters and replacement of parameters passed by 5734 reference by parameters passed by value. 5735 5736 Enabled at levels `-O2', `-O3' and `-Os'. 5737 5738`-finline-limit=N' 5739 By default, GCC limits the size of functions that can be inlined. 5740 This flag allows coarse control of this limit. N is the size of 5741 functions that can be inlined in number of pseudo instructions. 5742 5743 Inlining is actually controlled by a number of parameters, which 5744 may be specified individually by using `--param NAME=VALUE'. The 5745 `-finline-limit=N' option sets some of these parameters as follows: 5746 5747 `max-inline-insns-single' 5748 is set to N/2. 5749 5750 `max-inline-insns-auto' 5751 is set to N/2. 5752 5753 See below for a documentation of the individual parameters 5754 controlling inlining and for the defaults of these parameters. 5755 5756 _Note:_ there may be no value to `-finline-limit' that results in 5757 default behavior. 5758 5759 _Note:_ pseudo instruction represents, in this particular context, 5760 an abstract measurement of function's size. In no way does it 5761 represent a count of assembly instructions and as such its exact 5762 meaning might change from one release to an another. 5763 5764`-fno-keep-inline-dllexport' 5765 This is a more fine-grained version of `-fkeep-inline-functions', 5766 which applies only to functions that are declared using the 5767 `dllexport' attribute or declspec (*Note Declaring Attributes of 5768 Functions: Function Attributes.) 5769 5770`-fkeep-inline-functions' 5771 In C, emit `static' functions that are declared `inline' into the 5772 object file, even if the function has been inlined into all of its 5773 callers. This switch does not affect functions using the `extern 5774 inline' extension in GNU C90. In C++, emit any and all inline 5775 functions into the object file. 5776 5777`-fkeep-static-consts' 5778 Emit variables declared `static const' when optimization isn't 5779 turned on, even if the variables aren't referenced. 5780 5781 GCC enables this option by default. If you want to force the 5782 compiler to check if the variable was referenced, regardless of 5783 whether or not optimization is turned on, use the 5784 `-fno-keep-static-consts' option. 5785 5786`-fmerge-constants' 5787 Attempt to merge identical constants (string constants and 5788 floating point constants) across compilation units. 5789 5790 This option is the default for optimized compilation if the 5791 assembler and linker support it. Use `-fno-merge-constants' to 5792 inhibit this behavior. 5793 5794 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5795 5796`-fmerge-all-constants' 5797 Attempt to merge identical constants and identical variables. 5798 5799 This option implies `-fmerge-constants'. In addition to 5800 `-fmerge-constants' this considers e.g. even constant initialized 5801 arrays or initialized constant variables with integral or floating 5802 point types. Languages like C or C++ require each variable, 5803 including multiple instances of the same variable in recursive 5804 calls, to have distinct locations, so using this option will 5805 result in non-conforming behavior. 5806 5807`-fmodulo-sched' 5808 Perform swing modulo scheduling immediately before the first 5809 scheduling pass. This pass looks at innermost loops and reorders 5810 their instructions by overlapping different iterations. 5811 5812`-fmodulo-sched-allow-regmoves' 5813 Perform more aggressive SMS based modulo scheduling with register 5814 moves allowed. By setting this flag certain anti-dependences 5815 edges will be deleted which will trigger the generation of 5816 reg-moves based on the life-range analysis. This option is 5817 effective only with `-fmodulo-sched' enabled. 5818 5819`-fno-branch-count-reg' 5820 Do not use "decrement and branch" instructions on a count register, 5821 but instead generate a sequence of instructions that decrement a 5822 register, compare it against zero, then branch based upon the 5823 result. This option is only meaningful on architectures that 5824 support such instructions, which include x86, PowerPC, IA-64 and 5825 S/390. 5826 5827 The default is `-fbranch-count-reg'. 5828 5829`-fno-function-cse' 5830 Do not put function addresses in registers; make each instruction 5831 that calls a constant function contain the function's address 5832 explicitly. 5833 5834 This option results in less efficient code, but some strange hacks 5835 that alter the assembler output may be confused by the 5836 optimizations performed when this option is not used. 5837 5838 The default is `-ffunction-cse' 5839 5840`-fno-zero-initialized-in-bss' 5841 If the target supports a BSS section, GCC by default puts 5842 variables that are initialized to zero into BSS. This can save 5843 space in the resulting code. 5844 5845 This option turns off this behavior because some programs 5846 explicitly rely on variables going to the data section. E.g., so 5847 that the resulting executable can find the beginning of that 5848 section and/or make assumptions based on that. 5849 5850 The default is `-fzero-initialized-in-bss'. 5851 5852`-fmudflap -fmudflapth -fmudflapir' 5853 For front-ends that support it (C and C++), instrument all risky 5854 pointer/array dereferencing operations, some standard library 5855 string/heap functions, and some other associated constructs with 5856 range/validity tests. Modules so instrumented should be immune to 5857 buffer overflows, invalid heap use, and some other classes of C/C++ 5858 programming errors. The instrumentation relies on a separate 5859 runtime library (`libmudflap'), which will be linked into a 5860 program if `-fmudflap' is given at link time. Run-time behavior 5861 of the instrumented program is controlled by the `MUDFLAP_OPTIONS' 5862 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 5863 its options. 5864 5865 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 5866 your program is multi-threaded. Use `-fmudflapir', in addition to 5867 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 5868 pointer reads. This produces less instrumentation (and therefore 5869 faster execution) and still provides some protection against 5870 outright memory corrupting writes, but allows erroneously read 5871 data to propagate within a program. 5872 5873`-fthread-jumps' 5874 Perform optimizations where we check to see if a jump branches to a 5875 location where another comparison subsumed by the first is found. 5876 If so, the first branch is redirected to either the destination of 5877 the second branch or a point immediately following it, depending 5878 on whether the condition is known to be true or false. 5879 5880 Enabled at levels `-O2', `-O3', `-Os'. 5881 5882`-fsplit-wide-types' 5883 When using a type that occupies multiple registers, such as `long 5884 long' on a 32-bit system, split the registers apart and allocate 5885 them independently. This normally generates better code for those 5886 types, but may make debugging more difficult. 5887 5888 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5889 5890`-fcse-follow-jumps' 5891 In common subexpression elimination (CSE), scan through jump 5892 instructions when the target of the jump is not reached by any 5893 other path. For example, when CSE encounters an `if' statement 5894 with an `else' clause, CSE will follow the jump when the condition 5895 tested is false. 5896 5897 Enabled at levels `-O2', `-O3', `-Os'. 5898 5899`-fcse-skip-blocks' 5900 This is similar to `-fcse-follow-jumps', but causes CSE to follow 5901 jumps which conditionally skip over blocks. When CSE encounters a 5902 simple `if' statement with no else clause, `-fcse-skip-blocks' 5903 causes CSE to follow the jump around the body of the `if'. 5904 5905 Enabled at levels `-O2', `-O3', `-Os'. 5906 5907`-frerun-cse-after-loop' 5908 Re-run common subexpression elimination after loop optimizations 5909 has been performed. 5910 5911 Enabled at levels `-O2', `-O3', `-Os'. 5912 5913`-fgcse' 5914 Perform a global common subexpression elimination pass. This pass 5915 also performs global constant and copy propagation. 5916 5917 _Note:_ When compiling a program using computed gotos, a GCC 5918 extension, you may get better runtime performance if you disable 5919 the global common subexpression elimination pass by adding 5920 `-fno-gcse' to the command line. 5921 5922 Enabled at levels `-O2', `-O3', `-Os'. 5923 5924`-fgcse-lm' 5925 When `-fgcse-lm' is enabled, global common subexpression 5926 elimination will attempt to move loads which are only killed by 5927 stores into themselves. This allows a loop containing a 5928 load/store sequence to be changed to a load outside the loop, and 5929 a copy/store within the loop. 5930 5931 Enabled by default when gcse is enabled. 5932 5933`-fgcse-sm' 5934 When `-fgcse-sm' is enabled, a store motion pass is run after 5935 global common subexpression elimination. This pass will attempt 5936 to move stores out of loops. When used in conjunction with 5937 `-fgcse-lm', loops containing a load/store sequence can be changed 5938 to a load before the loop and a store after the loop. 5939 5940 Not enabled at any optimization level. 5941 5942`-fgcse-las' 5943 When `-fgcse-las' is enabled, the global common subexpression 5944 elimination pass eliminates redundant loads that come after stores 5945 to the same memory location (both partial and full redundancies). 5946 5947 Not enabled at any optimization level. 5948 5949`-fgcse-after-reload' 5950 When `-fgcse-after-reload' is enabled, a redundant load elimination 5951 pass is performed after reload. The purpose of this pass is to 5952 cleanup redundant spilling. 5953 5954`-funsafe-loop-optimizations' 5955 If given, the loop optimizer will assume that loop indices do not 5956 overflow, and that the loops with nontrivial exit condition are not 5957 infinite. This enables a wider range of loop optimizations even if 5958 the loop optimizer itself cannot prove that these assumptions are 5959 valid. Using `-Wunsafe-loop-optimizations', the compiler will 5960 warn you if it finds this kind of loop. 5961 5962`-fcrossjumping' 5963 Perform cross-jumping transformation. This transformation unifies 5964 equivalent code and save code size. The resulting code may or may 5965 not perform better than without cross-jumping. 5966 5967 Enabled at levels `-O2', `-O3', `-Os'. 5968 5969`-fauto-inc-dec' 5970 Combine increments or decrements of addresses with memory accesses. 5971 This pass is always skipped on architectures that do not have 5972 instructions to support this. Enabled by default at `-O' and 5973 higher on architectures that support this. 5974 5975`-fdce' 5976 Perform dead code elimination (DCE) on RTL. Enabled by default at 5977 `-O' and higher. 5978 5979`-fdse' 5980 Perform dead store elimination (DSE) on RTL. Enabled by default 5981 at `-O' and higher. 5982 5983`-fif-conversion' 5984 Attempt to transform conditional jumps into branch-less 5985 equivalents. This include use of conditional moves, min, max, set 5986 flags and abs instructions, and some tricks doable by standard 5987 arithmetics. The use of conditional execution on chips where it 5988 is available is controlled by `if-conversion2'. 5989 5990 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5991 5992`-fif-conversion2' 5993 Use conditional execution (where available) to transform 5994 conditional jumps into branch-less equivalents. 5995 5996 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5997 5998`-fdelete-null-pointer-checks' 5999 Assume that programs cannot safely dereference null pointers, and 6000 that no code or data element resides there. This enables simple 6001 constant folding optimizations at all optimization levels. In 6002 addition, other optimization passes in GCC use this flag to 6003 control global dataflow analyses that eliminate useless checks for 6004 null pointers; these assume that if a pointer is checked after it 6005 has already been dereferenced, it cannot be null. 6006 6007 Note however that in some environments this assumption is not true. 6008 Use `-fno-delete-null-pointer-checks' to disable this optimization 6009 for programs which depend on that behavior. 6010 6011 Some targets, especially embedded ones, disable this option at all 6012 levels. Otherwise it is enabled at all levels: `-O0', `-O1', 6013 `-O2', `-O3', `-Os'. Passes that use the information are enabled 6014 independently at different optimization levels. 6015 6016`-fdevirtualize' 6017 Attempt to convert calls to virtual functions to direct calls. 6018 This is done both within a procedure and interprocedurally as part 6019 of indirect inlining (`-findirect-inlining') and interprocedural 6020 constant propagation (`-fipa-cp'). Enabled at levels `-O2', 6021 `-O3', `-Os'. 6022 6023`-fexpensive-optimizations' 6024 Perform a number of minor optimizations that are relatively 6025 expensive. 6026 6027 Enabled at levels `-O2', `-O3', `-Os'. 6028 6029`-foptimize-register-move' 6030`-fregmove' 6031 Attempt to reassign register numbers in move instructions and as 6032 operands of other simple instructions in order to maximize the 6033 amount of register tying. This is especially helpful on machines 6034 with two-operand instructions. 6035 6036 Note `-fregmove' and `-foptimize-register-move' are the same 6037 optimization. 6038 6039 Enabled at levels `-O2', `-O3', `-Os'. 6040 6041`-fira-algorithm=ALGORITHM' 6042 Use specified coloring algorithm for the integrated register 6043 allocator. The ALGORITHM argument should be `priority' or `CB'. 6044 The first algorithm specifies Chow's priority coloring, the second 6045 one specifies Chaitin-Briggs coloring. The second algorithm can 6046 be unimplemented for some architectures. If it is implemented, it 6047 is the default because Chaitin-Briggs coloring as a rule generates 6048 a better code. 6049 6050`-fira-region=REGION' 6051 Use specified regions for the integrated register allocator. The 6052 REGION argument should be one of `all', `mixed', or `one'. The 6053 first value means using all loops as register allocation regions, 6054 the second value which is the default means using all loops except 6055 for loops with small register pressure as the regions, and third 6056 one means using all function as a single region. The first value 6057 can give best result for machines with small size and irregular 6058 register set, the third one results in faster and generates decent 6059 code and the smallest size code, and the default value usually 6060 give the best results in most cases and for most architectures. 6061 6062`-fira-loop-pressure' 6063 Use IRA to evaluate register pressure in loops for decision to move 6064 loop invariants. Usage of this option usually results in 6065 generation of faster and smaller code on machines with big 6066 register files (>= 32 registers) but it can slow compiler down. 6067 6068 This option is enabled at level `-O3' for some targets. 6069 6070`-fno-ira-share-save-slots' 6071 Switch off sharing stack slots used for saving call used hard 6072 registers living through a call. Each hard register will get a 6073 separate stack slot and as a result function stack frame will be 6074 bigger. 6075 6076`-fno-ira-share-spill-slots' 6077 Switch off sharing stack slots allocated for pseudo-registers. 6078 Each pseudo-register which did not get a hard register will get a 6079 separate stack slot and as a result function stack frame will be 6080 bigger. 6081 6082`-fira-verbose=N' 6083 Set up how verbose dump file for the integrated register allocator 6084 will be. Default value is 5. If the value is greater or equal to 6085 10, the dump file will be stderr as if the value were N minus 10. 6086 6087`-fdelayed-branch' 6088 If supported for the target machine, attempt to reorder 6089 instructions to exploit instruction slots available after delayed 6090 branch instructions. 6091 6092 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6093 6094`-fschedule-insns' 6095 If supported for the target machine, attempt to reorder 6096 instructions to eliminate execution stalls due to required data 6097 being unavailable. This helps machines that have slow floating 6098 point or memory load instructions by allowing other instructions 6099 to be issued until the result of the load or floating point 6100 instruction is required. 6101 6102 Enabled at levels `-O2', `-O3'. 6103 6104`-fschedule-insns2' 6105 Similar to `-fschedule-insns', but requests an additional pass of 6106 instruction scheduling after register allocation has been done. 6107 This is especially useful on machines with a relatively small 6108 number of registers and where memory load instructions take more 6109 than one cycle. 6110 6111 Enabled at levels `-O2', `-O3', `-Os'. 6112 6113`-fno-sched-interblock' 6114 Don't schedule instructions across basic blocks. This is normally 6115 enabled by default when scheduling before register allocation, i.e. 6116 with `-fschedule-insns' or at `-O2' or higher. 6117 6118`-fno-sched-spec' 6119 Don't allow speculative motion of non-load instructions. This is 6120 normally enabled by default when scheduling before register 6121 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 6122 6123`-fsched-pressure' 6124 Enable register pressure sensitive insn scheduling before the 6125 register allocation. This only makes sense when scheduling before 6126 register allocation is enabled, i.e. with `-fschedule-insns' or at 6127 `-O2' or higher. Usage of this option can improve the generated 6128 code and decrease its size by preventing register pressure 6129 increase above the number of available hard registers and as a 6130 consequence register spills in the register allocation. 6131 6132`-fsched-spec-load' 6133 Allow speculative motion of some load instructions. This only 6134 makes sense when scheduling before register allocation, i.e. with 6135 `-fschedule-insns' or at `-O2' or higher. 6136 6137`-fsched-spec-load-dangerous' 6138 Allow speculative motion of more load instructions. This only 6139 makes sense when scheduling before register allocation, i.e. with 6140 `-fschedule-insns' or at `-O2' or higher. 6141 6142`-fsched-stalled-insns' 6143`-fsched-stalled-insns=N' 6144 Define how many insns (if any) can be moved prematurely from the 6145 queue of stalled insns into the ready list, during the second 6146 scheduling pass. `-fno-sched-stalled-insns' means that no insns 6147 will be moved prematurely, `-fsched-stalled-insns=0' means there 6148 is no limit on how many queued insns can be moved prematurely. 6149 `-fsched-stalled-insns' without a value is equivalent to 6150 `-fsched-stalled-insns=1'. 6151 6152`-fsched-stalled-insns-dep' 6153`-fsched-stalled-insns-dep=N' 6154 Define how many insn groups (cycles) will be examined for a 6155 dependency on a stalled insn that is candidate for premature 6156 removal from the queue of stalled insns. This has an effect only 6157 during the second scheduling pass, and only if 6158 `-fsched-stalled-insns' is used. `-fno-sched-stalled-insns-dep' 6159 is equivalent to `-fsched-stalled-insns-dep=0'. 6160 `-fsched-stalled-insns-dep' without a value is equivalent to 6161 `-fsched-stalled-insns-dep=1'. 6162 6163`-fsched2-use-superblocks' 6164 When scheduling after register allocation, do use superblock 6165 scheduling algorithm. Superblock scheduling allows motion across 6166 basic block boundaries resulting on faster schedules. This option 6167 is experimental, as not all machine descriptions used by GCC model 6168 the CPU closely enough to avoid unreliable results from the 6169 algorithm. 6170 6171 This only makes sense when scheduling after register allocation, 6172 i.e. with `-fschedule-insns2' or at `-O2' or higher. 6173 6174`-fsched-group-heuristic' 6175 Enable the group heuristic in the scheduler. This heuristic favors 6176 the instruction that belongs to a schedule group. This is enabled 6177 by default when scheduling is enabled, i.e. with `-fschedule-insns' 6178 or `-fschedule-insns2' or at `-O2' or higher. 6179 6180`-fsched-critical-path-heuristic' 6181 Enable the critical-path heuristic in the scheduler. This 6182 heuristic favors instructions on the critical path. This is 6183 enabled by default when scheduling is enabled, i.e. with 6184 `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher. 6185 6186`-fsched-spec-insn-heuristic' 6187 Enable the speculative instruction heuristic in the scheduler. 6188 This heuristic favors speculative instructions with greater 6189 dependency weakness. This is enabled by default when scheduling 6190 is enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' 6191 or at `-O2' or higher. 6192 6193`-fsched-rank-heuristic' 6194 Enable the rank heuristic in the scheduler. This heuristic favors 6195 the instruction belonging to a basic block with greater size or 6196 frequency. This is enabled by default when scheduling is enabled, 6197 i.e. with `-fschedule-insns' or `-fschedule-insns2' or at `-O2' 6198 or higher. 6199 6200`-fsched-last-insn-heuristic' 6201 Enable the last-instruction heuristic in the scheduler. This 6202 heuristic favors the instruction that is less dependent on the 6203 last instruction scheduled. This is enabled by default when 6204 scheduling is enabled, i.e. with `-fschedule-insns' or 6205 `-fschedule-insns2' or at `-O2' or higher. 6206 6207`-fsched-dep-count-heuristic' 6208 Enable the dependent-count heuristic in the scheduler. This 6209 heuristic favors the instruction that has more instructions 6210 depending on it. This is enabled by default when scheduling is 6211 enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' or 6212 at `-O2' or higher. 6213 6214`-freschedule-modulo-scheduled-loops' 6215 The modulo scheduling comes before the traditional scheduling, if 6216 a loop was modulo scheduled we may want to prevent the later 6217 scheduling passes from changing its schedule, we use this option 6218 to control that. 6219 6220`-fselective-scheduling' 6221 Schedule instructions using selective scheduling algorithm. 6222 Selective scheduling runs instead of the first scheduler pass. 6223 6224`-fselective-scheduling2' 6225 Schedule instructions using selective scheduling algorithm. 6226 Selective scheduling runs instead of the second scheduler pass. 6227 6228`-fsel-sched-pipelining' 6229 Enable software pipelining of innermost loops during selective 6230 scheduling. This option has no effect until one of 6231 `-fselective-scheduling' or `-fselective-scheduling2' is turned on. 6232 6233`-fsel-sched-pipelining-outer-loops' 6234 When pipelining loops during selective scheduling, also pipeline 6235 outer loops. This option has no effect until 6236 `-fsel-sched-pipelining' is turned on. 6237 6238`-fshrink-wrap' 6239 Emit function prologues only before parts of the function that 6240 need it, rather than at the top of the function. 6241 6242`-fcaller-saves' 6243 Enable values to be allocated in registers that will be clobbered 6244 by function calls, by emitting extra instructions to save and 6245 restore the registers around such calls. Such allocation is done 6246 only when it seems to result in better code than would otherwise 6247 be produced. 6248 6249 This option is always enabled by default on certain machines, 6250 usually those which have no call-preserved registers to use 6251 instead. 6252 6253 Enabled at levels `-O2', `-O3', `-Os'. 6254 6255`-fcombine-stack-adjustments' 6256 Tracks stack adjustments (pushes and pops) and stack memory 6257 references and then tries to find ways to combine them. 6258 6259 Enabled by default at `-O1' and higher. 6260 6261`-fconserve-stack' 6262 Attempt to minimize stack usage. The compiler will attempt to use 6263 less stack space, even if that makes the program slower. This 6264 option implies setting the `large-stack-frame' parameter to 100 6265 and the `large-stack-frame-growth' parameter to 400. 6266 6267`-ftree-reassoc' 6268 Perform reassociation on trees. This flag is enabled by default 6269 at `-O' and higher. 6270 6271`-ftree-pre' 6272 Perform partial redundancy elimination (PRE) on trees. This flag 6273 is enabled by default at `-O2' and `-O3'. 6274 6275`-ftree-forwprop' 6276 Perform forward propagation on trees. This flag is enabled by 6277 default at `-O' and higher. 6278 6279`-ftree-fre' 6280 Perform full redundancy elimination (FRE) on trees. The difference 6281 between FRE and PRE is that FRE only considers expressions that 6282 are computed on all paths leading to the redundant computation. 6283 This analysis is faster than PRE, though it exposes fewer 6284 redundancies. This flag is enabled by default at `-O' and higher. 6285 6286`-ftree-phiprop' 6287 Perform hoisting of loads from conditional pointers on trees. This 6288 pass is enabled by default at `-O' and higher. 6289 6290`-ftree-copy-prop' 6291 Perform copy propagation on trees. This pass eliminates 6292 unnecessary copy operations. This flag is enabled by default at 6293 `-O' and higher. 6294 6295`-fipa-pure-const' 6296 Discover which functions are pure or constant. Enabled by default 6297 at `-O' and higher. 6298 6299`-fipa-reference' 6300 Discover which static variables do not escape cannot escape the 6301 compilation unit. Enabled by default at `-O' and higher. 6302 6303`-fipa-struct-reorg' 6304 Perform structure reorganization optimization, that change C-like 6305 structures layout in order to better utilize spatial locality. 6306 This transformation is affective for programs containing arrays of 6307 structures. Available in two compilation modes: profile-based 6308 (enabled with `-fprofile-generate') or static (which uses built-in 6309 heuristics). It works only in whole program mode, so it requires 6310 `-fwhole-program' to be enabled. Structures considered `cold' by 6311 this transformation are not affected (see `--param 6312 struct-reorg-cold-struct-ratio=VALUE'). 6313 6314 With this flag, the program debug info reflects a new structure 6315 layout. 6316 6317`-fipa-pta' 6318 Perform interprocedural pointer analysis and interprocedural 6319 modification and reference analysis. This option can cause 6320 excessive memory and compile-time usage on large compilation 6321 units. It is not enabled by default at any optimization level. 6322 6323`-fipa-profile' 6324 Perform interprocedural profile propagation. The functions called 6325 only from cold functions are marked as cold. Also functions 6326 executed once (such as `cold', `noreturn', static constructors or 6327 destructors) are identified. Cold functions and loop less parts of 6328 functions executed once are then optimized for size. Enabled by 6329 default at `-O' and higher. 6330 6331`-fipa-cp' 6332 Perform interprocedural constant propagation. This optimization 6333 analyzes the program to determine when values passed to functions 6334 are constants and then optimizes accordingly. This optimization 6335 can substantially increase performance if the application has 6336 constants passed to functions. This flag is enabled by default at 6337 `-O2', `-Os' and `-O3'. 6338 6339`-fipa-cp-clone' 6340 Perform function cloning to make interprocedural constant 6341 propagation stronger. When enabled, interprocedural constant 6342 propagation will perform function cloning when externally visible 6343 function can be called with constant arguments. Because this 6344 optimization can create multiple copies of functions, it may 6345 significantly increase code size (see `--param 6346 ipcp-unit-growth=VALUE'). This flag is enabled by default at 6347 `-O3'. 6348 6349`-fipa-matrix-reorg' 6350 Perform matrix flattening and transposing. Matrix flattening 6351 tries to replace an m-dimensional matrix with its equivalent 6352 n-dimensional matrix, where n < m. This reduces the level of 6353 indirection needed for accessing the elements of the matrix. The 6354 second optimization is matrix transposing that attempts to change 6355 the order of the matrix's dimensions in order to improve cache 6356 locality. Both optimizations need the `-fwhole-program' flag. 6357 Transposing is enabled only if profiling information is available. 6358 6359`-ftree-sink' 6360 Perform forward store motion on trees. This flag is enabled by 6361 default at `-O' and higher. 6362 6363`-ftree-bit-ccp' 6364 Perform sparse conditional bit constant propagation on trees and 6365 propagate pointer alignment information. This pass only operates 6366 on local scalar variables and is enabled by default at `-O' and 6367 higher. It requires that `-ftree-ccp' is enabled. 6368 6369`-ftree-ccp' 6370 Perform sparse conditional constant propagation (CCP) on trees. 6371 This pass only operates on local scalar variables and is enabled 6372 by default at `-O' and higher. 6373 6374`-ftree-switch-conversion' 6375 Perform conversion of simple initializations in a switch to 6376 initializations from a scalar array. This flag is enabled by 6377 default at `-O2' and higher. 6378 6379`-ftree-if-to-switch-conversion' 6380 Perform conversion of chains of ifs into switches. This flag is 6381 enabled by default at `-O2' and higher. 6382 6383`-ftree-dce' 6384 Perform dead code elimination (DCE) on trees. This flag is 6385 enabled by default at `-O' and higher. 6386 6387`-ftree-builtin-call-dce' 6388 Perform conditional dead code elimination (DCE) for calls to 6389 builtin functions that may set `errno' but are otherwise 6390 side-effect free. This flag is enabled by default at `-O2' and 6391 higher if `-Os' is not also specified. 6392 6393`-ftree-dominator-opts' 6394 Perform a variety of simple scalar cleanups (constant/copy 6395 propagation, redundancy elimination, range propagation and 6396 expression simplification) based on a dominator tree traversal. 6397 This also performs jump threading (to reduce jumps to jumps). This 6398 flag is enabled by default at `-O' and higher. 6399 6400`-ftree-dse' 6401 Perform dead store elimination (DSE) on trees. A dead store is a 6402 store into a memory location which will later be overwritten by 6403 another store without any intervening loads. In this case the 6404 earlier store can be deleted. This flag is enabled by default at 6405 `-O' and higher. 6406 6407`-ftree-ch' 6408 Perform loop header copying on trees. This is beneficial since it 6409 increases effectiveness of code motion optimizations. It also 6410 saves one jump. This flag is enabled by default at `-O' and 6411 higher. It is not enabled for `-Os', since it usually increases 6412 code size. 6413 6414`-ftree-loop-optimize' 6415 Perform loop optimizations on trees. This flag is enabled by 6416 default at `-O' and higher. 6417 6418`-ftree-loop-linear' 6419 Perform loop interchange transformations on tree. Same as 6420 `-floop-interchange'. To use this code transformation, GCC has to 6421 be configured with `--with-ppl' and `--with-cloog' to enable the 6422 Graphite loop transformation infrastructure. 6423 6424`-floop-interchange' 6425 Perform loop interchange transformations on loops. Interchanging 6426 two nested loops switches the inner and outer loops. For example, 6427 given a loop like: 6428 DO J = 1, M 6429 DO I = 1, N 6430 A(J, I) = A(J, I) * C 6431 ENDDO 6432 ENDDO 6433 loop interchange will transform the loop as if the user had 6434 written: 6435 DO I = 1, N 6436 DO J = 1, M 6437 A(J, I) = A(J, I) * C 6438 ENDDO 6439 ENDDO 6440 which can be beneficial when `N' is larger than the caches, 6441 because in Fortran, the elements of an array are stored in memory 6442 contiguously by column, and the original loop iterates over rows, 6443 potentially creating at each access a cache miss. This 6444 optimization applies to all the languages supported by GCC and is 6445 not limited to Fortran. To use this code transformation, GCC has 6446 to be configured with `--with-ppl' and `--with-cloog' to enable the 6447 Graphite loop transformation infrastructure. 6448 6449`-floop-strip-mine' 6450 Perform loop strip mining transformations on loops. Strip mining 6451 splits a loop into two nested loops. The outer loop has strides 6452 equal to the strip size and the inner loop has strides of the 6453 original loop within a strip. The strip length can be changed 6454 using the `loop-block-tile-size' parameter. For example, given a 6455 loop like: 6456 DO I = 1, N 6457 A(I) = A(I) + C 6458 ENDDO 6459 loop strip mining will transform the loop as if the user had 6460 written: 6461 DO II = 1, N, 51 6462 DO I = II, min (II + 50, N) 6463 A(I) = A(I) + C 6464 ENDDO 6465 ENDDO 6466 This optimization applies to all the languages supported by GCC 6467 and is not limited to Fortran. To use this code transformation, 6468 GCC has to be configured with `--with-ppl' and `--with-cloog' to 6469 enable the Graphite loop transformation infrastructure. 6470 6471`-floop-block' 6472 Perform loop blocking transformations on loops. Blocking strip 6473 mines each loop in the loop nest such that the memory accesses of 6474 the element loops fit inside caches. The strip length can be 6475 changed using the `loop-block-tile-size' parameter. For example, 6476 given a loop like: 6477 DO I = 1, N 6478 DO J = 1, M 6479 A(J, I) = B(I) + C(J) 6480 ENDDO 6481 ENDDO 6482 loop blocking will transform the loop as if the user had written: 6483 DO II = 1, N, 51 6484 DO JJ = 1, M, 51 6485 DO I = II, min (II + 50, N) 6486 DO J = JJ, min (JJ + 50, M) 6487 A(J, I) = B(I) + C(J) 6488 ENDDO 6489 ENDDO 6490 ENDDO 6491 ENDDO 6492 which can be beneficial when `M' is larger than the caches, 6493 because the innermost loop will iterate over a smaller amount of 6494 data that can be kept in the caches. This optimization applies to 6495 all the languages supported by GCC and is not limited to Fortran. 6496 To use this code transformation, GCC has to be configured with 6497 `--with-ppl' and `--with-cloog' to enable the Graphite loop 6498 transformation infrastructure. 6499 6500`-fgraphite-identity' 6501 Enable the identity transformation for graphite. For every SCoP 6502 we generate the polyhedral representation and transform it back to 6503 gimple. Using `-fgraphite-identity' we can check the costs or 6504 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some 6505 minimal optimizations are also performed by the code generator 6506 CLooG, like index splitting and dead code elimination in loops. 6507 6508`-floop-flatten' 6509 Removes the loop nesting structure: transforms the loop nest into a 6510 single loop. This transformation can be useful to vectorize all 6511 the levels of the loop nest. 6512 6513`-floop-parallelize-all' 6514 Use the Graphite data dependence analysis to identify loops that 6515 can be parallelized. Parallelize all the loops that can be 6516 analyzed to not contain loop carried dependences without checking 6517 that it is profitable to parallelize the loops. 6518 6519`-fcheck-data-deps' 6520 Compare the results of several data dependence analyzers. This 6521 option is used for debugging the data dependence analyzers. 6522 6523`-ftree-loop-if-convert' 6524 Attempt to transform conditional jumps in the innermost loops to 6525 branch-less equivalents. The intent is to remove control-flow from 6526 the innermost loops in order to improve the ability of the 6527 vectorization pass to handle these loops. This is enabled by 6528 default if vectorization is enabled. 6529 6530`-ftree-loop-if-convert-stores' 6531 Attempt to also if-convert conditional jumps containing memory 6532 writes. This transformation can be unsafe for multi-threaded 6533 programs as it transforms conditional memory writes into 6534 unconditional memory writes. For example, 6535 for (i = 0; i < N; i++) 6536 if (cond) 6537 A[i] = expr; 6538 would be transformed to 6539 for (i = 0; i < N; i++) 6540 A[i] = cond ? expr : A[i]; 6541 potentially producing data races. 6542 6543`-ftree-loop-distribution' 6544 Perform loop distribution. This flag can improve cache 6545 performance on big loop bodies and allow further loop 6546 optimizations, like parallelization or vectorization, to take 6547 place. For example, the loop 6548 DO I = 1, N 6549 A(I) = B(I) + C 6550 D(I) = E(I) * F 6551 ENDDO 6552 is transformed to 6553 DO I = 1, N 6554 A(I) = B(I) + C 6555 ENDDO 6556 DO I = 1, N 6557 D(I) = E(I) * F 6558 ENDDO 6559 6560`-ftree-loop-distribute-patterns' 6561 Perform loop distribution of patterns that can be code generated 6562 with calls to a library. This flag is enabled by default at `-O3'. 6563 6564 This pass distributes the initialization loops and generates a 6565 call to memset zero. For example, the loop 6566 DO I = 1, N 6567 A(I) = 0 6568 B(I) = A(I) + I 6569 ENDDO 6570 is transformed to 6571 DO I = 1, N 6572 A(I) = 0 6573 ENDDO 6574 DO I = 1, N 6575 B(I) = A(I) + I 6576 ENDDO 6577 and the initialization loop is transformed into a call to memset 6578 zero. 6579 6580`-ftree-loop-im' 6581 Perform loop invariant motion on trees. This pass moves only 6582 invariants that would be hard to handle at RTL level (function 6583 calls, operations that expand to nontrivial sequences of insns). 6584 With `-funswitch-loops' it also moves operands of conditions that 6585 are invariant out of the loop, so that we can use just trivial 6586 invariantness analysis in loop unswitching. The pass also includes 6587 store motion. 6588 6589`-ftree-loop-ivcanon' 6590 Create a canonical counter for number of iterations in the loop 6591 for that determining number of iterations requires complicated 6592 analysis. Later optimizations then may determine the number 6593 easily. Useful especially in connection with unrolling. 6594 6595`-fivopts' 6596 Perform induction variable optimizations (strength reduction, 6597 induction variable merging and induction variable elimination) on 6598 trees. 6599 6600`-ftree-parallelize-loops=n' 6601 Parallelize loops, i.e., split their iteration space to run in n 6602 threads. This is only possible for loops whose iterations are 6603 independent and can be arbitrarily reordered. The optimization is 6604 only profitable on multiprocessor machines, for loops that are 6605 CPU-intensive, rather than constrained e.g. by memory bandwidth. 6606 This option implies `-pthread', and thus is only supported on 6607 targets that have support for `-pthread'. 6608 6609`-ftree-pta' 6610 Perform function-local points-to analysis on trees. This flag is 6611 enabled by default at `-O' and higher. 6612 6613`-ftree-sra' 6614 Perform scalar replacement of aggregates. This pass replaces 6615 structure references with scalars to prevent committing structures 6616 to memory too early. This flag is enabled by default at `-O' and 6617 higher. 6618 6619`-ftree-copyrename' 6620 Perform copy renaming on trees. This pass attempts to rename 6621 compiler temporaries to other variables at copy locations, usually 6622 resulting in variable names which more closely resemble the 6623 original variables. This flag is enabled by default at `-O' and 6624 higher. 6625 6626`-ftree-ter' 6627 Perform temporary expression replacement during the SSA->normal 6628 phase. Single use/single def temporaries are replaced at their 6629 use location with their defining expression. This results in 6630 non-GIMPLE code, but gives the expanders much more complex trees 6631 to work on resulting in better RTL generation. This is enabled by 6632 default at `-O' and higher. 6633 6634`-ftree-vectorize' 6635 Perform loop vectorization on trees. This flag is enabled by 6636 default at `-O3'. 6637 6638`-ftree-slp-vectorize' 6639 Perform basic block vectorization on trees. This flag is enabled 6640 by default at `-O3' and when `-ftree-vectorize' is enabled. 6641 6642`-ftree-vect-loop-version' 6643 Perform loop versioning when doing loop vectorization on trees. 6644 When a loop appears to be vectorizable except that data alignment 6645 or data dependence cannot be determined at compile time then 6646 vectorized and non-vectorized versions of the loop are generated 6647 along with runtime checks for alignment or dependence to control 6648 which version is executed. This option is enabled by default 6649 except at level `-Os' where it is disabled. 6650 6651`-fvect-cost-model' 6652 Enable cost model for vectorization. 6653 6654`-ftree-vrp' 6655 Perform Value Range Propagation on trees. This is similar to the 6656 constant propagation pass, but instead of values, ranges of values 6657 are propagated. This allows the optimizers to remove unnecessary 6658 range checks like array bound checks and null pointer checks. 6659 This is enabled by default at `-O2' and higher. Null pointer check 6660 elimination is only done if `-fdelete-null-pointer-checks' is 6661 enabled. 6662 6663`-ftracer' 6664 Perform tail duplication to enlarge superblock size. This 6665 transformation simplifies the control flow of the function 6666 allowing other optimizations to do better job. 6667 6668`-funroll-loops' 6669 Unroll loops whose number of iterations can be determined at 6670 compile time or upon entry to the loop. `-funroll-loops' implies 6671 `-frerun-cse-after-loop'. This option makes code larger, and may 6672 or may not make it run faster. 6673 6674`-funroll-all-loops' 6675 Unroll all loops, even if their number of iterations is uncertain 6676 when the loop is entered. This usually makes programs run more 6677 slowly. `-funroll-all-loops' implies the same options as 6678 `-funroll-loops', 6679 6680`-fsplit-ivs-in-unroller' 6681 Enables expressing of values of induction variables in later 6682 iterations of the unrolled loop using the value in the first 6683 iteration. This breaks long dependency chains, thus improving 6684 efficiency of the scheduling passes. 6685 6686 Combination of `-fweb' and CSE is often sufficient to obtain the 6687 same effect. However in cases the loop body is more complicated 6688 than a single basic block, this is not reliable. It also does not 6689 work at all on some of the architectures due to restrictions in 6690 the CSE pass. 6691 6692 This optimization is enabled by default. 6693 6694`-fvariable-expansion-in-unroller' 6695 With this option, the compiler will create multiple copies of some 6696 local variables when unrolling a loop which can result in superior 6697 code. 6698 6699`-fpartial-inlining' 6700 Inline parts of functions. This option has any effect only when 6701 inlining itself is turned on by the `-finline-functions' or 6702 `-finline-small-functions' options. 6703 6704 Enabled at level `-O2'. 6705 6706`-fpredictive-commoning' 6707 Perform predictive commoning optimization, i.e., reusing 6708 computations (especially memory loads and stores) performed in 6709 previous iterations of loops. 6710 6711 This option is enabled at level `-O3'. 6712 6713`-fprefetch-loop-arrays' 6714 If supported by the target machine, generate instructions to 6715 prefetch memory to improve the performance of loops that access 6716 large arrays. 6717 6718 This option may generate better or worse code; results are highly 6719 dependent on the structure of loops within the source code. 6720 6721 Disabled at level `-Os'. 6722 6723`-fno-peephole' 6724`-fno-peephole2' 6725 Disable any machine-specific peephole optimizations. The 6726 difference between `-fno-peephole' and `-fno-peephole2' is in how 6727 they are implemented in the compiler; some targets use one, some 6728 use the other, a few use both. 6729 6730 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 6731 levels `-O2', `-O3', `-Os'. 6732 6733`-fno-guess-branch-probability' 6734 Do not guess branch probabilities using heuristics. 6735 6736 GCC will use heuristics to guess branch probabilities if they are 6737 not provided by profiling feedback (`-fprofile-arcs'). These 6738 heuristics are based on the control flow graph. If some branch 6739 probabilities are specified by `__builtin_expect', then the 6740 heuristics will be used to guess branch probabilities for the rest 6741 of the control flow graph, taking the `__builtin_expect' info into 6742 account. The interactions between the heuristics and 6743 `__builtin_expect' can be complex, and in some cases, it may be 6744 useful to disable the heuristics so that the effects of 6745 `__builtin_expect' are easier to understand. 6746 6747 The default is `-fguess-branch-probability' at levels `-O', `-O2', 6748 `-O3', `-Os'. 6749 6750`-freorder-blocks' 6751 Reorder basic blocks in the compiled function in order to reduce 6752 number of taken branches and improve code locality. 6753 6754 Enabled at levels `-O2', `-O3'. 6755 6756`-freorder-blocks-and-partition' 6757 In addition to reordering basic blocks in the compiled function, 6758 in order to reduce number of taken branches, partitions hot and 6759 cold basic blocks into separate sections of the assembly and .o 6760 files, to improve paging and cache locality performance. 6761 6762 This optimization is automatically turned off in the presence of 6763 exception handling, for linkonce sections, for functions with a 6764 user-defined section attribute and on any architecture that does 6765 not support named sections. 6766 6767`-freorder-functions' 6768 Reorder functions in the object file in order to improve code 6769 locality. This is implemented by using special subsections 6770 `.text.hot' for most frequently executed functions and 6771 `.text.unlikely' for unlikely executed functions. Reordering is 6772 done by the linker so object file format must support named 6773 sections and linker must place them in a reasonable way. 6774 6775 Also profile feedback must be available in to make this option 6776 effective. See `-fprofile-arcs' for details. 6777 6778 Enabled at levels `-O2', `-O3', `-Os'. 6779 6780`-fstrict-aliasing' 6781 Allow the compiler to assume the strictest aliasing rules 6782 applicable to the language being compiled. For C (and C++), this 6783 activates optimizations based on the type of expressions. In 6784 particular, an object of one type is assumed never to reside at 6785 the same address as an object of a different type, unless the 6786 types are almost the same. For example, an `unsigned int' can 6787 alias an `int', but not a `void*' or a `double'. A character type 6788 may alias any other type. 6789 6790 Pay special attention to code like this: 6791 union a_union { 6792 int i; 6793 double d; 6794 }; 6795 6796 int f() { 6797 union a_union t; 6798 t.d = 3.0; 6799 return t.i; 6800 } 6801 The practice of reading from a different union member than the one 6802 most recently written to (called "type-punning") is common. Even 6803 with `-fstrict-aliasing', type-punning is allowed, provided the 6804 memory is accessed through the union type. So, the code above 6805 will work as expected. *Note Structures unions enumerations and 6806 bit-fields implementation::. However, this code might not: 6807 int f() { 6808 union a_union t; 6809 int* ip; 6810 t.d = 3.0; 6811 ip = &t.i; 6812 return *ip; 6813 } 6814 6815 Similarly, access by taking the address, casting the resulting 6816 pointer and dereferencing the result has undefined behavior, even 6817 if the cast uses a union type, e.g.: 6818 int f() { 6819 double d = 3.0; 6820 return ((union a_union *) &d)->i; 6821 } 6822 6823 The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3', 6824 `-Os'. 6825 6826`-fstrict-overflow' 6827 Allow the compiler to assume strict signed overflow rules, 6828 depending on the language being compiled. For C (and C++) this 6829 means that overflow when doing arithmetic with signed numbers is 6830 undefined, which means that the compiler may assume that it will 6831 not happen. This permits various optimizations. For example, the 6832 compiler will assume that an expression like `i + 10 > i' will 6833 always be true for signed `i'. This assumption is only valid if 6834 signed overflow is undefined, as the expression is false if `i + 6835 10' overflows when using twos complement arithmetic. When this 6836 option is in effect any attempt to determine whether an operation 6837 on signed numbers will overflow must be written carefully to not 6838 actually involve overflow. 6839 6840 This option also allows the compiler to assume strict pointer 6841 semantics: given a pointer to an object, if adding an offset to 6842 that pointer does not produce a pointer to the same object, the 6843 addition is undefined. This permits the compiler to conclude that 6844 `p + u > p' is always true for a pointer `p' and unsigned integer 6845 `u'. This assumption is only valid because pointer wraparound is 6846 undefined, as the expression is false if `p + u' overflows using 6847 twos complement arithmetic. 6848 6849 See also the `-fwrapv' option. Using `-fwrapv' means that integer 6850 signed overflow is fully defined: it wraps. When `-fwrapv' is 6851 used, there is no difference between `-fstrict-overflow' and 6852 `-fno-strict-overflow' for integers. With `-fwrapv' certain types 6853 of overflow are permitted. For example, if the compiler gets an 6854 overflow when doing arithmetic on constants, the overflowed value 6855 can still be used with `-fwrapv', but not otherwise. 6856 6857 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 6858 `-Os'. 6859 6860`-falign-arrays' 6861 Set the minimum alignment for array variables to be the largest 6862 power of two less than or equal to their total storage size, or 6863 the biggest alignment used on the machine, whichever is smaller. 6864 This option may be helpful when compiling legacy code that uses 6865 type punning on arrays that does not strictly conform to the C 6866 standard. 6867 6868`-falign-functions' 6869`-falign-functions=N' 6870 Align the start of functions to the next power-of-two greater than 6871 N, skipping up to N bytes. For instance, `-falign-functions=32' 6872 aligns functions to the next 32-byte boundary, but 6873 `-falign-functions=24' would align to the next 32-byte boundary 6874 only if this can be done by skipping 23 bytes or less. 6875 6876 `-fno-align-functions' and `-falign-functions=1' are equivalent 6877 and mean that functions will not be aligned. 6878 6879 Some assemblers only support this flag when N is a power of two; 6880 in that case, it is rounded up. 6881 6882 If N is not specified or is zero, use a machine-dependent default. 6883 6884 Enabled at levels `-O2', `-O3'. 6885 6886`-falign-labels' 6887`-falign-labels=N' 6888 Align all branch targets to a power-of-two boundary, skipping up to 6889 N bytes like `-falign-functions'. This option can easily make 6890 code slower, because it must insert dummy operations for when the 6891 branch target is reached in the usual flow of the code. 6892 6893 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 6894 that labels will not be aligned. 6895 6896 If `-falign-loops' or `-falign-jumps' are applicable and are 6897 greater than this value, then their values are used instead. 6898 6899 If N is not specified or is zero, use a machine-dependent default 6900 which is very likely to be `1', meaning no alignment. 6901 6902 Enabled at levels `-O2', `-O3'. 6903 6904`-falign-loops' 6905`-falign-loops=N' 6906 Align loops to a power-of-two boundary, skipping up to N bytes 6907 like `-falign-functions'. The hope is that the loop will be 6908 executed many times, which will make up for any execution of the 6909 dummy operations. 6910 6911 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 6912 that loops will not be aligned. 6913 6914 If N is not specified or is zero, use a machine-dependent default. 6915 6916 Enabled at levels `-O2', `-O3'. 6917 6918`-falign-jumps' 6919`-falign-jumps=N' 6920 Align branch targets to a power-of-two boundary, for branch targets 6921 where the targets can only be reached by jumping, skipping up to N 6922 bytes like `-falign-functions'. In this case, no dummy operations 6923 need be executed. 6924 6925 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 6926 that loops will not be aligned. 6927 6928 If N is not specified or is zero, use a machine-dependent default. 6929 6930 Enabled at levels `-O2', `-O3'. 6931 6932`-funit-at-a-time' 6933 This option is left for compatibility reasons. `-funit-at-a-time' 6934 has no effect, while `-fno-unit-at-a-time' implies 6935 `-fno-toplevel-reorder' and `-fno-section-anchors'. 6936 6937 Enabled by default. 6938 6939`-fno-toplevel-reorder' 6940 Do not reorder top-level functions, variables, and `asm' 6941 statements. Output them in the same order that they appear in the 6942 input file. When this option is used, unreferenced static 6943 variables will not be removed. This option is intended to support 6944 existing code which relies on a particular ordering. For new 6945 code, it is better to use attributes. 6946 6947 Enabled at level `-O0'. When disabled explicitly, it also imply 6948 `-fno-section-anchors' that is otherwise enabled at `-O0' on some 6949 targets. 6950 6951`-fweb' 6952 Constructs webs as commonly used for register allocation purposes 6953 and assign each web individual pseudo register. This allows the 6954 register allocation pass to operate on pseudos directly, but also 6955 strengthens several other optimization passes, such as CSE, loop 6956 optimizer and trivial dead code remover. It can, however, make 6957 debugging impossible, since variables will no longer stay in a 6958 "home register". 6959 6960 Enabled by default with `-funroll-loops'. 6961 6962`-fwhole-program' 6963 Assume that the current compilation unit represents the whole 6964 program being compiled. All public functions and variables with 6965 the exception of `main' and those merged by attribute 6966 `externally_visible' become static functions and in effect are 6967 optimized more aggressively by interprocedural optimizers. If 6968 `gold' is used as the linker plugin, `externally_visible' 6969 attributes are automatically added to functions (not variable yet 6970 due to a current `gold' issue) that are accessed outside of LTO 6971 objects according to resolution file produced by `gold'. For 6972 other linkers that cannot generate resolution file, explicit 6973 `externally_visible' attributes are still necessary. While this 6974 option is equivalent to proper use of the `static' keyword for 6975 programs consisting of a single file, in combination with option 6976 `-flto' this flag can be used to compile many smaller scale 6977 programs since the functions and variables become local for the 6978 whole combined compilation unit, not for the single source file 6979 itself. 6980 6981 This option implies `-fwhole-file' for Fortran programs. 6982 6983`-flto[=N]' 6984 This option runs the standard link-time optimizer. When invoked 6985 with source code, it generates GIMPLE (one of GCC's internal 6986 representations) and writes it to special ELF sections in the 6987 object file. When the object files are linked together, all the 6988 function bodies are read from these ELF sections and instantiated 6989 as if they had been part of the same translation unit. 6990 6991 To use the link-timer optimizer, `-flto' needs to be specified at 6992 compile time and during the final link. For example, 6993 6994 gcc -c -O2 -flto foo.c 6995 gcc -c -O2 -flto bar.c 6996 gcc -o myprog -flto -O2 foo.o bar.o 6997 6998 The first two invocations to GCC will save a bytecode 6999 representation of GIMPLE into special ELF sections inside `foo.o' 7000 and `bar.o'. The final invocation will read the GIMPLE bytecode 7001 from `foo.o' and `bar.o', merge the two files into a single 7002 internal image, and compile the result as usual. Since both 7003 `foo.o' and `bar.o' are merged into a single image, this causes 7004 all the inter-procedural analyses and optimizations in GCC to work 7005 across the two files as if they were a single one. This means, 7006 for example, that the inliner will be able to inline functions in 7007 `bar.o' into functions in `foo.o' and vice-versa. 7008 7009 Another (simpler) way to enable link-time optimization is, 7010 7011 gcc -o myprog -flto -O2 foo.c bar.c 7012 7013 The above will generate bytecode for `foo.c' and `bar.c', merge 7014 them together into a single GIMPLE representation and optimize 7015 them as usual to produce `myprog'. 7016 7017 The only important thing to keep in mind is that to enable 7018 link-time optimizations the `-flto' flag needs to be passed to 7019 both the compile and the link commands. 7020 7021 To make whole program optimization effective, it is necessary to 7022 make certain whole program assumptions. The compiler needs to know 7023 what functions and variables can be accessed by libraries and 7024 runtime outside of the link time optimized unit. When supported 7025 by the linker, the linker plugin (see `-fuse-linker-plugin') 7026 passes to the compiler information about used and externally 7027 visible symbols. When the linker plugin is not available, 7028 `-fwhole-program' should be used to allow the compiler to make 7029 these assumptions, which will lead to more aggressive optimization 7030 decisions. 7031 7032 Note that when a file is compiled with `-flto', the generated 7033 object file will be larger than a regular object file because it 7034 will contain GIMPLE bytecodes and the usual final code. This 7035 means that object files with LTO information can be linked as a 7036 normal object file. So, in the previous example, if the final 7037 link is done with 7038 7039 gcc -o myprog foo.o bar.o 7040 7041 The only difference will be that no inter-procedural optimizations 7042 will be applied to produce `myprog'. The two object files `foo.o' 7043 and `bar.o' will be simply sent to the regular linker. 7044 7045 Additionally, the optimization flags used to compile individual 7046 files are not necessarily related to those used at link-time. For 7047 instance, 7048 7049 gcc -c -O0 -flto foo.c 7050 gcc -c -O0 -flto bar.c 7051 gcc -o myprog -flto -O3 foo.o bar.o 7052 7053 This will produce individual object files with unoptimized 7054 assembler code, but the resulting binary `myprog' will be 7055 optimized at `-O3'. Now, if the final binary is generated without 7056 `-flto', then `myprog' will not be optimized. 7057 7058 When producing the final binary with `-flto', GCC will only apply 7059 link-time optimizations to those files that contain bytecode. 7060 Therefore, you can mix and match object files and libraries with 7061 GIMPLE bytecodes and final object code. GCC will automatically 7062 select which files to optimize in LTO mode and which files to link 7063 without further processing. 7064 7065 There are some code generation flags that GCC will preserve when 7066 generating bytecodes, as they need to be used during the final link 7067 stage. Currently, the following options are saved into the GIMPLE 7068 bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags. 7069 7070 At link time, these options are read-in and reapplied. Note that 7071 the current implementation makes no attempt at recognizing 7072 conflicting values for these options. If two or more files have a 7073 conflicting value (e.g., one file is compiled with `-fPIC' and 7074 another isn't), the compiler will simply use the last value read 7075 from the bytecode files. It is recommended, then, that all the 7076 files participating in the same link be compiled with the same 7077 options. 7078 7079 Another feature of LTO is that it is possible to apply 7080 interprocedural optimizations on files written in different 7081 languages. This requires some support in the language front end. 7082 Currently, the C, C++ and Fortran front ends are capable of 7083 emitting GIMPLE bytecodes, so something like this should work 7084 7085 gcc -c -flto foo.c 7086 g++ -c -flto bar.cc 7087 gfortran -c -flto baz.f90 7088 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran 7089 7090 Notice that the final link is done with `g++' to get the C++ 7091 runtime libraries and `-lgfortran' is added to get the Fortran 7092 runtime libraries. In general, when mixing languages in LTO mode, 7093 you should use the same link command used when mixing languages in 7094 a regular (non-LTO) compilation. This means that if your build 7095 process was mixing languages before, all you need to add is 7096 `-flto' to all the compile and link commands. 7097 7098 If LTO encounters objects with C linkage declared with incompatible 7099 types in separate translation units to be linked together 7100 (undefined behavior according to ISO C99 6.2.7), a non-fatal 7101 diagnostic may be issued. The behavior is still undefined at 7102 runtime. 7103 7104 If object files containing GIMPLE bytecode are stored in a library 7105 archive, say `libfoo.a', it is possible to extract and use them in 7106 an LTO link if you are using a linker with linker plugin support. 7107 To enable this feature, use the flag `-fuse-linker-plugin' at 7108 link-time: 7109 7110 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo 7111 7112 With the linker plugin enabled, the linker will extract the needed 7113 GIMPLE files from `libfoo.a' and pass them on to the running GCC 7114 to make them part of the aggregated GIMPLE image to be optimized. 7115 7116 If you are not using a linker with linker plugin support and/or do 7117 not enable linker plugin then the objects inside `libfoo.a' will 7118 be extracted and linked as usual, but they will not participate in 7119 the LTO optimization process. 7120 7121 Link time optimizations do not require the presence of the whole 7122 program to operate. If the program does not require any symbols 7123 to be exported, it is possible to combine `-flto' and with 7124 `-fwhole-program' to allow the interprocedural optimizers to use 7125 more aggressive assumptions which may lead to improved 7126 optimization opportunities. Use of `-fwhole-program' is not 7127 needed when linker plugin is active (see `-fuse-linker-plugin'). 7128 7129 Regarding portability: the current implementation of LTO makes no 7130 attempt at generating bytecode that can be ported between different 7131 types of hosts. The bytecode files are versioned and there is a 7132 strict version check, so bytecode files generated in one version of 7133 GCC will not work with an older/newer version of GCC. 7134 7135 Link time optimization does not play well with generating debugging 7136 information. Combining `-flto' with `-g' is currently 7137 experimental and expected to produce wrong results. 7138 7139 If you specify the optional N, the optimization and code 7140 generation done at link time is executed in parallel using N 7141 parallel jobs by utilizing an installed `make' program. The 7142 environment variable `MAKE' may be used to override the program 7143 used. The default value for N is 1. 7144 7145 You can also specify `-flto=jobserver' to use GNU make's job 7146 server mode to determine the number of parallel jobs. This is 7147 useful when the Makefile calling GCC is already executing in 7148 parallel. The parent Makefile will need a `+' prepended to the 7149 command recipe for this to work. This will likely only work if 7150 `MAKE' is GNU make. 7151 7152 This option is disabled by default. 7153 7154`-flto-partition=ALG' 7155 Specify the partitioning algorithm used by the link time optimizer. 7156 The value is either `1to1' to specify a partitioning mirroring the 7157 original source files or `balanced' to specify partitioning into 7158 equally sized chunks (whenever possible). Specifying `none' as an 7159 algorithm disables partitioning and streaming completely. The 7160 default value is `balanced'. 7161 7162`-flto-compression-level=N' 7163 This option specifies the level of compression used for 7164 intermediate language written to LTO object files, and is only 7165 meaningful in conjunction with LTO mode (`-flto'). Valid values 7166 are 0 (no compression) to 9 (maximum compression). Values outside 7167 this range are clamped to either 0 or 9. If the option is not 7168 given, a default balanced compression setting is used. 7169 7170`-flto-report' 7171 Prints a report with internal details on the workings of the 7172 link-time optimizer. The contents of this report vary from 7173 version to version, it is meant to be useful to GCC developers 7174 when processing object files in LTO mode (via `-flto'). 7175 7176 Disabled by default. 7177 7178`-fuse-linker-plugin' 7179 Enables the use of linker plugin during link time optimization. 7180 This option relies on the linker plugin support in linker that is 7181 available in gold or in GNU ld 2.21 or newer. 7182 7183 This option enables the extraction of object files with GIMPLE 7184 bytecode out of library archives. This improves the quality of 7185 optimization by exposing more code the the link time optimizer. 7186 This information specify what symbols can be accessed externally 7187 (by non-LTO object or during dynamic linking). Resulting code 7188 quality improvements on binaries (and shared libraries that do use 7189 hidden visibility) is similar to `-fwhole-program'. See `-flto' 7190 for a description on the effect of this flag and how to use it. 7191 7192 Enabled by default when LTO support in GCC is enabled and GCC was 7193 compiled with a linker supporting plugins (GNU ld 2.21 or newer or 7194 gold). 7195 7196`-fcompare-elim' 7197 After register allocation and post-register allocation instruction 7198 splitting, identify arithmetic instructions that compute processor 7199 flags similar to a comparison operation based on that arithmetic. 7200 If possible, eliminate the explicit comparison operation. 7201 7202 This pass only applies to certain targets that cannot explicitly 7203 represent the comparison operation before register allocation is 7204 complete. 7205 7206 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7207 7208`-fcprop-registers' 7209 After register allocation and post-register allocation instruction 7210 splitting, we perform a copy-propagation pass to try to reduce 7211 scheduling dependencies and occasionally eliminate the copy. 7212 7213 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7214 7215`-fprofile-correction' 7216 Profiles collected using an instrumented binary for multi-threaded 7217 programs may be inconsistent due to missed counter updates. When 7218 this option is specified, GCC will use heuristics to correct or 7219 smooth out such inconsistencies. By default, GCC will emit an 7220 error message when an inconsistent profile is detected. 7221 7222`-fprofile-dir=PATH' 7223 Set the directory to search for the profile data files in to PATH. 7224 This option affects only the profile data generated by 7225 `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used 7226 by `-fprofile-use' and `-fbranch-probabilities' and its related 7227 options. By default, GCC will use the current directory as PATH, 7228 thus the profile data file will appear in the same directory as 7229 the object file. 7230 7231`-fprofile-generate' 7232`-fprofile-generate=PATH' 7233 Enable options usually used for instrumenting application to 7234 produce profile useful for later recompilation with profile 7235 feedback based optimization. You must use `-fprofile-generate' 7236 both when compiling and when linking your program. 7237 7238 The following options are enabled: `-fprofile-arcs', 7239 `-fprofile-values', `-fvpt'. 7240 7241 If PATH is specified, GCC will look at the PATH to find the 7242 profile feedback data files. See `-fprofile-dir'. 7243 7244`-fprofile-use' 7245`-fprofile-use=PATH' 7246 Enable profile feedback directed optimizations, and optimizations 7247 generally profitable only with profile feedback available. 7248 7249 The following options are enabled: `-fbranch-probabilities', 7250 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer' 7251 7252 By default, GCC emits an error message if the feedback profiles do 7253 not match the source code. This error can be turned into a 7254 warning by using `-Wcoverage-mismatch'. Note this may result in 7255 poorly optimized code. 7256 7257 If PATH is specified, GCC will look at the PATH to find the 7258 profile feedback data files. See `-fprofile-dir'. 7259 7260 The following options control compiler behavior regarding floating 7261point arithmetic. These options trade off between speed and 7262correctness. All must be specifically enabled. 7263 7264`-ffloat-store' 7265 Do not store floating point variables in registers, and inhibit 7266 other options that might change whether a floating point value is 7267 taken from a register or memory. 7268 7269 This option prevents undesirable excess precision on machines such 7270 as the 68000 where the floating registers (of the 68881) keep more 7271 precision than a `double' is supposed to have. Similarly for the 7272 x86 architecture. For most programs, the excess precision does 7273 only good, but a few programs rely on the precise definition of 7274 IEEE floating point. Use `-ffloat-store' for such programs, after 7275 modifying them to store all pertinent intermediate computations 7276 into variables. 7277 7278`-fexcess-precision=STYLE' 7279 This option allows further control over excess precision on 7280 machines where floating-point registers have more precision than 7281 the IEEE `float' and `double' types and the processor does not 7282 support operations rounding to those types. By default, 7283 `-fexcess-precision=fast' is in effect; this means that operations 7284 are carried out in the precision of the registers and that it is 7285 unpredictable when rounding to the types specified in the source 7286 code takes place. When compiling C, if 7287 `-fexcess-precision=standard' is specified then excess precision 7288 will follow the rules specified in ISO C99; in particular, both 7289 casts and assignments cause values to be rounded to their semantic 7290 types (whereas `-ffloat-store' only affects assignments). This 7291 option is enabled by default for C if a strict conformance option 7292 such as `-std=c99' is used. 7293 7294 `-fexcess-precision=standard' is not implemented for languages 7295 other than C, and has no effect if `-funsafe-math-optimizations' 7296 or `-ffast-math' is specified. On the x86, it also has no effect 7297 if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the 7298 former case, IEEE semantics apply without excess precision, and in 7299 the latter, rounding is unpredictable. 7300 7301`-ffast-math' 7302 Sets `-fno-math-errno', `-funsafe-math-optimizations', 7303 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans' 7304 and `-fcx-limited-range'. 7305 7306 This option causes the preprocessor macro `__FAST_MATH__' to be 7307 defined. 7308 7309 This option is not turned on by any `-O' option besides `-Ofast' 7310 since it can result in incorrect output for programs which depend 7311 on an exact implementation of IEEE or ISO rules/specifications for 7312 math functions. It may, however, yield faster code for programs 7313 that do not require the guarantees of these specifications. 7314 7315`-fno-math-errno' 7316 Do not set ERRNO after calling math functions that are executed 7317 with a single instruction, e.g., sqrt. A program that relies on 7318 IEEE exceptions for math error handling may want to use this flag 7319 for speed while maintaining IEEE arithmetic compatibility. 7320 7321 This option is not turned on by any `-O' option since it can 7322 result in incorrect output for programs which depend on an exact 7323 implementation of IEEE or ISO rules/specifications for math 7324 functions. It may, however, yield faster code for programs that do 7325 not require the guarantees of these specifications. 7326 7327 The default is `-fmath-errno'. 7328 7329 On Darwin systems, the math library never sets `errno'. There is 7330 therefore no reason for the compiler to consider the possibility 7331 that it might, and `-fno-math-errno' is the default. 7332 7333`-funsafe-math-optimizations' 7334 Allow optimizations for floating-point arithmetic that (a) assume 7335 that arguments and results are valid and (b) may violate IEEE or 7336 ANSI standards. When used at link-time, it may include libraries 7337 or startup files that change the default FPU control word or other 7338 similar optimizations. 7339 7340 This option is not turned on by any `-O' option since it can 7341 result in incorrect output for programs which depend on an exact 7342 implementation of IEEE or ISO rules/specifications for math 7343 functions. It may, however, yield faster code for programs that do 7344 not require the guarantees of these specifications. Enables 7345 `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math' 7346 and `-freciprocal-math'. 7347 7348 The default is `-fno-unsafe-math-optimizations'. 7349 7350`-fassociative-math' 7351 Allow re-association of operands in series of floating-point 7352 operations. This violates the ISO C and C++ language standard by 7353 possibly changing computation result. NOTE: re-ordering may 7354 change the sign of zero as well as ignore NaNs and inhibit or 7355 create underflow or overflow (and thus cannot be used on a code 7356 which relies on rounding behavior like `(x + 2**52) - 2**52)'. 7357 May also reorder floating-point comparisons and thus may not be 7358 used when ordered comparisons are required. This option requires 7359 that both `-fno-signed-zeros' and `-fno-trapping-math' be in 7360 effect. Moreover, it doesn't make much sense with 7361 `-frounding-math'. For Fortran the option is automatically enabled 7362 when both `-fno-signed-zeros' and `-fno-trapping-math' are in 7363 effect. 7364 7365 The default is `-fno-associative-math'. 7366 7367`-freciprocal-math' 7368 Allow the reciprocal of a value to be used instead of dividing by 7369 the value if this enables optimizations. For example `x / y' can 7370 be replaced with `x * (1/y)' which is useful if `(1/y)' is subject 7371 to common subexpression elimination. Note that this loses 7372 precision and increases the number of flops operating on the value. 7373 7374 The default is `-fno-reciprocal-math'. 7375 7376`-ffinite-math-only' 7377 Allow optimizations for floating-point arithmetic that assume that 7378 arguments and results are not NaNs or +-Infs. 7379 7380 This option is not turned on by any `-O' option since it can 7381 result in incorrect output for programs which depend on an exact 7382 implementation of IEEE or ISO rules/specifications for math 7383 functions. It may, however, yield faster code for programs that do 7384 not require the guarantees of these specifications. 7385 7386 The default is `-fno-finite-math-only'. 7387 7388`-fno-signed-zeros' 7389 Allow optimizations for floating point arithmetic that ignore the 7390 signedness of zero. IEEE arithmetic specifies the behavior of 7391 distinct +0.0 and -0.0 values, which then prohibits simplification 7392 of expressions such as x+0.0 or 0.0*x (even with 7393 `-ffinite-math-only'). This option implies that the sign of a 7394 zero result isn't significant. 7395 7396 The default is `-fsigned-zeros'. 7397 7398`-fno-trapping-math' 7399 Compile code assuming that floating-point operations cannot 7400 generate user-visible traps. These traps include division by 7401 zero, overflow, underflow, inexact result and invalid operation. 7402 This option requires that `-fno-signaling-nans' be in effect. 7403 Setting this option may allow faster code if one relies on 7404 "non-stop" IEEE arithmetic, for example. 7405 7406 This option should never be turned on by any `-O' option since it 7407 can result in incorrect output for programs which depend on an 7408 exact implementation of IEEE or ISO rules/specifications for math 7409 functions. 7410 7411 The default is `-ftrapping-math'. 7412 7413`-frounding-math' 7414 Disable transformations and optimizations that assume default 7415 floating point rounding behavior. This is round-to-zero for all 7416 floating point to integer conversions, and round-to-nearest for 7417 all other arithmetic truncations. This option should be specified 7418 for programs that change the FP rounding mode dynamically, or that 7419 may be executed with a non-default rounding mode. This option 7420 disables constant folding of floating point expressions at 7421 compile-time (which may be affected by rounding mode) and 7422 arithmetic transformations that are unsafe in the presence of 7423 sign-dependent rounding modes. 7424 7425 The default is `-fno-rounding-math'. 7426 7427 This option is experimental and does not currently guarantee to 7428 disable all GCC optimizations that are affected by rounding mode. 7429 Future versions of GCC may provide finer control of this setting 7430 using C99's `FENV_ACCESS' pragma. This command line option will 7431 be used to specify the default state for `FENV_ACCESS'. 7432 7433`-fsignaling-nans' 7434 Compile code assuming that IEEE signaling NaNs may generate 7435 user-visible traps during floating-point operations. Setting this 7436 option disables optimizations that may change the number of 7437 exceptions visible with signaling NaNs. This option implies 7438 `-ftrapping-math'. 7439 7440 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 7441 defined. 7442 7443 The default is `-fno-signaling-nans'. 7444 7445 This option is experimental and does not currently guarantee to 7446 disable all GCC optimizations that affect signaling NaN behavior. 7447 7448`-fsingle-precision-constant' 7449 Treat floating point constant as single precision constant instead 7450 of implicitly converting it to double precision constant. 7451 7452`-fcx-limited-range' 7453 When enabled, this option states that a range reduction step is not 7454 needed when performing complex division. Also, there is no 7455 checking whether the result of a complex multiplication or 7456 division is `NaN + I*NaN', with an attempt to rescue the situation 7457 in that case. The default is `-fno-cx-limited-range', but is 7458 enabled by `-ffast-math'. 7459 7460 This option controls the default setting of the ISO C99 7461 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 7462 all languages. 7463 7464`-fcx-fortran-rules' 7465 Complex multiplication and division follow Fortran rules. Range 7466 reduction is done as part of complex division, but there is no 7467 checking whether the result of a complex multiplication or 7468 division is `NaN + I*NaN', with an attempt to rescue the situation 7469 in that case. 7470 7471 The default is `-fno-cx-fortran-rules'. 7472 7473 7474 The following options control optimizations that may improve 7475performance, but are not enabled by any `-O' options. This section 7476includes experimental options that may produce broken code. 7477 7478`-fbranch-probabilities' 7479 After running a program compiled with `-fprofile-arcs' (*note 7480 Options for Debugging Your Program or `gcc': Debugging Options.), 7481 you can compile it a second time using `-fbranch-probabilities', 7482 to improve optimizations based on the number of times each branch 7483 was taken. When the program compiled with `-fprofile-arcs' exits 7484 it saves arc execution counts to a file called `SOURCENAME.gcda' 7485 for each source file. The information in this data file is very 7486 dependent on the structure of the generated code, so you must use 7487 the same source code and the same optimization options for both 7488 compilations. 7489 7490 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 7491 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 7492 optimization. Currently, they are only used in one place: in 7493 `reorg.c', instead of guessing which path a branch is most likely 7494 to take, the `REG_BR_PROB' values are used to exactly determine 7495 which path is taken more often. 7496 7497`-fprofile-values' 7498 If combined with `-fprofile-arcs', it adds code so that some data 7499 about values of expressions in the program is gathered. 7500 7501 With `-fbranch-probabilities', it reads back the data gathered 7502 from profiling values of expressions for usage in optimizations. 7503 7504 Enabled with `-fprofile-generate' and `-fprofile-use'. 7505 7506`-fvpt' 7507 If combined with `-fprofile-arcs', it instructs the compiler to add 7508 a code to gather information about values of expressions. 7509 7510 With `-fbranch-probabilities', it reads back the data gathered and 7511 actually performs the optimizations based on them. Currently the 7512 optimizations include specialization of division operation using 7513 the knowledge about the value of the denominator. 7514 7515`-frename-registers' 7516 Attempt to avoid false dependencies in scheduled code by making use 7517 of registers left over after register allocation. This 7518 optimization will most benefit processors with lots of registers. 7519 Depending on the debug information format adopted by the target, 7520 however, it can make debugging impossible, since variables will no 7521 longer stay in a "home register". 7522 7523 Enabled by default with `-funroll-loops' and `-fpeel-loops'. 7524 7525`-ftracer' 7526 Perform tail duplication to enlarge superblock size. This 7527 transformation simplifies the control flow of the function 7528 allowing other optimizations to do better job. 7529 7530 Enabled with `-fprofile-use'. 7531 7532`-funroll-loops' 7533 Unroll loops whose number of iterations can be determined at 7534 compile time or upon entry to the loop. `-funroll-loops' implies 7535 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 7536 also turns on complete loop peeling (i.e. complete removal of 7537 loops with small constant number of iterations). This option 7538 makes code larger, and may or may not make it run faster. 7539 7540 Enabled with `-fprofile-use'. 7541 7542`-funroll-all-loops' 7543 Unroll all loops, even if their number of iterations is uncertain 7544 when the loop is entered. This usually makes programs run more 7545 slowly. `-funroll-all-loops' implies the same options as 7546 `-funroll-loops'. 7547 7548`-fpeel-loops' 7549 Peels the loops for that there is enough information that they do 7550 not roll much (from profile feedback). It also turns on complete 7551 loop peeling (i.e. complete removal of loops with small constant 7552 number of iterations). 7553 7554 Enabled with `-fprofile-use'. 7555 7556`-fmove-loop-invariants' 7557 Enables the loop invariant motion pass in the RTL loop optimizer. 7558 Enabled at level `-O1' 7559 7560`-funswitch-loops' 7561 Move branches with loop invariant conditions out of the loop, with 7562 duplicates of the loop on both branches (modified according to 7563 result of the condition). 7564 7565`-ffunction-sections' 7566`-fdata-sections' 7567 Place each function or data item into its own section in the output 7568 file if the target supports arbitrary sections. The name of the 7569 function or the name of the data item determines the section's name 7570 in the output file. 7571 7572 Use these options on systems where the linker can perform 7573 optimizations to improve locality of reference in the instruction 7574 space. Most systems using the ELF object format and SPARC 7575 processors running Solaris 2 have linkers with such optimizations. 7576 AIX may have these optimizations in the future. 7577 7578 Only use these options when there are significant benefits from 7579 doing so. When you specify these options, the assembler and 7580 linker will create larger object and executable files and will 7581 also be slower. You will not be able to use `gprof' on all 7582 systems if you specify this option and you may have problems with 7583 debugging if you specify both this option and `-g'. 7584 7585`-fbranch-target-load-optimize' 7586 Perform branch target register load optimization before prologue / 7587 epilogue threading. The use of target registers can typically be 7588 exposed only during reload, thus hoisting loads out of loops and 7589 doing inter-block scheduling needs a separate optimization pass. 7590 7591`-fbranch-target-load-optimize2' 7592 Perform branch target register load optimization after prologue / 7593 epilogue threading. 7594 7595`-fbtr-bb-exclusive' 7596 When performing branch target register load optimization, don't 7597 reuse branch target registers in within any basic block. 7598 7599`-fstack-protector' 7600 Emit extra code to check for buffer overflows, such as stack 7601 smashing attacks. This is done by adding a guard variable to 7602 functions with vulnerable objects. This includes functions that 7603 call alloca, and functions with buffers larger than 8 bytes. The 7604 guards are initialized when a function is entered and then checked 7605 when the function exits. If a guard check fails, an error message 7606 is printed and the program exits. 7607 7608`-fstack-protector-all' 7609 Like `-fstack-protector' except that all functions are protected. 7610 7611`-fsection-anchors' 7612 Try to reduce the number of symbolic address calculations by using 7613 shared "anchor" symbols to address nearby objects. This 7614 transformation can help to reduce the number of GOT entries and 7615 GOT accesses on some targets. 7616 7617 For example, the implementation of the following function `foo': 7618 7619 static int a, b, c; 7620 int foo (void) { return a + b + c; } 7621 7622 would usually calculate the addresses of all three variables, but 7623 if you compile it with `-fsection-anchors', it will access the 7624 variables from a common anchor point instead. The effect is 7625 similar to the following pseudocode (which isn't valid C): 7626 7627 int foo (void) 7628 { 7629 register int *xr = &x; 7630 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 7631 } 7632 7633 Not all targets support this option. 7634 7635`-fremove-local-statics' 7636 Converts function-local static variables to automatic variables 7637 when it is safe to do so. This transformation can reduce the 7638 number of instructions executed due to automatic variables being 7639 cheaper to read/write than static variables. 7640 7641`-fpromote-loop-indices' 7642 Converts loop indices that have a type shorter than the word size 7643 to word-sized quantities. This transformation can reduce the 7644 overhead associated with sign/zero-extension and truncation of 7645 such variables. Using `-funsafe-loop-optimizations' with this 7646 option may result in more effective optimization. 7647 7648`--param NAME=VALUE' 7649 In some places, GCC uses various constants to control the amount of 7650 optimization that is done. For example, GCC will not inline 7651 functions that contain more that a certain number of instructions. 7652 You can control some of these constants on the command-line using 7653 the `--param' option. 7654 7655 The names of specific parameters, and the meaning of the values, 7656 are tied to the internals of the compiler, and are subject to 7657 change without notice in future releases. 7658 7659 In each case, the VALUE is an integer. The allowable choices for 7660 NAME are given in the following table: 7661 7662 `struct-reorg-cold-struct-ratio' 7663 The threshold ratio (as a percentage) between a structure 7664 frequency and the frequency of the hottest structure in the 7665 program. This parameter is used by struct-reorg optimization 7666 enabled by `-fipa-struct-reorg'. We say that if the ratio of 7667 a structure frequency, calculated by profiling, to the 7668 hottest structure frequency in the program is less than this 7669 parameter, then structure reorganization is not applied to 7670 this structure. The default is 10. 7671 7672 `predictable-branch-outcome' 7673 When branch is predicted to be taken with probability lower 7674 than this threshold (in percent), then it is considered well 7675 predictable. The default is 10. 7676 7677 `max-crossjump-edges' 7678 The maximum number of incoming edges to consider for 7679 crossjumping. The algorithm used by `-fcrossjumping' is 7680 O(N^2) in the number of edges incoming to each block. 7681 Increasing values mean more aggressive optimization, making 7682 the compile time increase with probably small improvement in 7683 executable size. 7684 7685 `min-crossjump-insns' 7686 The minimum number of instructions which must be matched at 7687 the end of two blocks before crossjumping will be performed 7688 on them. This value is ignored in the case where all 7689 instructions in the block being crossjumped from are matched. 7690 The default value is 5. 7691 7692 `max-grow-copy-bb-insns' 7693 The maximum code size expansion factor when copying basic 7694 blocks instead of jumping. The expansion is relative to a 7695 jump instruction. The default value is 8. 7696 7697 `max-goto-duplication-insns' 7698 The maximum number of instructions to duplicate to a block 7699 that jumps to a computed goto. To avoid O(N^2) behavior in a 7700 number of passes, GCC factors computed gotos early in the 7701 compilation process, and unfactors them as late as possible. 7702 Only computed jumps at the end of a basic blocks with no more 7703 than max-goto-duplication-insns are unfactored. The default 7704 value is 8. 7705 7706 `max-delay-slot-insn-search' 7707 The maximum number of instructions to consider when looking 7708 for an instruction to fill a delay slot. If more than this 7709 arbitrary number of instructions is searched, the time 7710 savings from filling the delay slot will be minimal so stop 7711 searching. Increasing values mean more aggressive 7712 optimization, making the compile time increase with probably 7713 small improvement in executable run time. 7714 7715 `max-delay-slot-live-search' 7716 When trying to fill delay slots, the maximum number of 7717 instructions to consider when searching for a block with 7718 valid live register information. Increasing this arbitrarily 7719 chosen value means more aggressive optimization, increasing 7720 the compile time. This parameter should be removed when the 7721 delay slot code is rewritten to maintain the control-flow 7722 graph. 7723 7724 `max-gcse-memory' 7725 The approximate maximum amount of memory that will be 7726 allocated in order to perform the global common subexpression 7727 elimination optimization. If more memory than specified is 7728 required, the optimization will not be done. 7729 7730 `max-gcse-insertion-ratio' 7731 If the ratio of expression insertions to deletions is larger 7732 than this value for any expression, then RTL PRE will insert 7733 or remove the expression and thus leave partially redundant 7734 computations in the instruction stream. The default value is 7735 20. 7736 7737 `max-pending-list-length' 7738 The maximum number of pending dependencies scheduling will 7739 allow before flushing the current state and starting over. 7740 Large functions with few branches or calls can create 7741 excessively large lists which needlessly consume memory and 7742 resources. 7743 7744 `max-inline-insns-single' 7745 Several parameters control the tree inliner used in gcc. 7746 This number sets the maximum number of instructions (counted 7747 in GCC's internal representation) in a single function that 7748 the tree inliner will consider for inlining. This only 7749 affects functions declared inline and methods implemented in 7750 a class declaration (C++). The default value is 400. 7751 7752 `max-inline-insns-auto' 7753 When you use `-finline-functions' (included in `-O3'), a lot 7754 of functions that would otherwise not be considered for 7755 inlining by the compiler will be investigated. To those 7756 functions, a different (more restrictive) limit compared to 7757 functions declared inline can be applied. The default value 7758 is 40. 7759 7760 `large-function-insns' 7761 The limit specifying really large functions. For functions 7762 larger than this limit after inlining, inlining is 7763 constrained by `--param large-function-growth'. This 7764 parameter is useful primarily to avoid extreme compilation 7765 time caused by non-linear algorithms used by the backend. 7766 The default value is 2700. 7767 7768 `large-function-growth' 7769 Specifies maximal growth of large function caused by inlining 7770 in percents. The default value is 100 which limits large 7771 function growth to 2.0 times the original size. 7772 7773 `large-unit-insns' 7774 The limit specifying large translation unit. Growth caused 7775 by inlining of units larger than this limit is limited by 7776 `--param inline-unit-growth'. For small units this might be 7777 too tight (consider unit consisting of function A that is 7778 inline and B that just calls A three time. If B is small 7779 relative to A, the growth of unit is 300\% and yet such 7780 inlining is very sane. For very large units consisting of 7781 small inlineable functions however the overall unit growth 7782 limit is needed to avoid exponential explosion of code size. 7783 Thus for smaller units, the size is increased to `--param 7784 large-unit-insns' before applying `--param 7785 inline-unit-growth'. The default is 10000 7786 7787 `inline-unit-growth' 7788 Specifies maximal overall growth of the compilation unit 7789 caused by inlining. The default value is 30 which limits 7790 unit growth to 1.3 times the original size. 7791 7792 `ipcp-unit-growth' 7793 Specifies maximal overall growth of the compilation unit 7794 caused by interprocedural constant propagation. The default 7795 value is 10 which limits unit growth to 1.1 times the 7796 original size. 7797 7798 `large-stack-frame' 7799 The limit specifying large stack frames. While inlining the 7800 algorithm is trying to not grow past this limit too much. 7801 Default value is 256 bytes. 7802 7803 `large-stack-frame-growth' 7804 Specifies maximal growth of large stack frames caused by 7805 inlining in percents. The default value is 1000 which limits 7806 large stack frame growth to 11 times the original size. 7807 7808 `max-inline-insns-recursive' 7809 `max-inline-insns-recursive-auto' 7810 Specifies maximum number of instructions out-of-line copy of 7811 self recursive inline function can grow into by performing 7812 recursive inlining. 7813 7814 For functions declared inline `--param 7815 max-inline-insns-recursive' is taken into account. For 7816 function not declared inline, recursive inlining happens only 7817 when `-finline-functions' (included in `-O3') is enabled and 7818 `--param max-inline-insns-recursive-auto' is used. The 7819 default value is 450. 7820 7821 `max-inline-recursive-depth' 7822 `max-inline-recursive-depth-auto' 7823 Specifies maximum recursion depth used by the recursive 7824 inlining. 7825 7826 For functions declared inline `--param 7827 max-inline-recursive-depth' is taken into account. For 7828 function not declared inline, recursive inlining happens only 7829 when `-finline-functions' (included in `-O3') is enabled and 7830 `--param max-inline-recursive-depth-auto' is used. The 7831 default value is 8. 7832 7833 `min-inline-recursive-probability' 7834 Recursive inlining is profitable only for function having 7835 deep recursion in average and can hurt for function having 7836 little recursion depth by increasing the prologue size or 7837 complexity of function body to other optimizers. 7838 7839 When profile feedback is available (see `-fprofile-generate') 7840 the actual recursion depth can be guessed from probability 7841 that function will recurse via given call expression. This 7842 parameter limits inlining only to call expression whose 7843 probability exceeds given threshold (in percents). The 7844 default value is 10. 7845 7846 `early-inlining-insns' 7847 Specify growth that early inliner can make. In effect it 7848 increases amount of inlining for code having large 7849 abstraction penalty. The default value is 10. 7850 7851 `max-early-inliner-iterations' 7852 `max-early-inliner-iterations' 7853 Limit of iterations of early inliner. This basically bounds 7854 number of nested indirect calls early inliner can resolve. 7855 Deeper chains are still handled by late inlining. 7856 7857 `comdat-sharing-probability' 7858 `comdat-sharing-probability' 7859 Probability (in percent) that C++ inline function with comdat 7860 visibility will be shared across multiple compilation units. 7861 The default value is 20. 7862 7863 `min-vect-loop-bound' 7864 The minimum number of iterations under which a loop will not 7865 get vectorized when `-ftree-vectorize' is used. The number 7866 of iterations after vectorization needs to be greater than 7867 the value specified by this option to allow vectorization. 7868 The default value is 0. 7869 7870 `gcse-cost-distance-ratio' 7871 Scaling factor in calculation of maximum distance an 7872 expression can be moved by GCSE optimizations. This is 7873 currently supported only in the code hoisting pass. The 7874 bigger the ratio, the more aggressive code hoisting will be 7875 with simple expressions, i.e., the expressions which have cost 7876 less than `gcse-unrestricted-cost'. Specifying 0 will disable 7877 hoisting of simple expressions. The default value is 10. 7878 7879 `gcse-unrestricted-cost' 7880 Cost, roughly measured as the cost of a single typical machine 7881 instruction, at which GCSE optimizations will not constrain 7882 the distance an expression can travel. This is currently 7883 supported only in the code hoisting pass. The lesser the 7884 cost, the more aggressive code hoisting will be. Specifying 7885 0 will allow all expressions to travel unrestricted distances. 7886 The default value is 3. 7887 7888 `max-hoist-depth' 7889 The depth of search in the dominator tree for expressions to 7890 hoist. This is used to avoid quadratic behavior in hoisting 7891 algorithm. The value of 0 will avoid limiting the search, 7892 but may slow down compilation of huge functions. The default 7893 value is 30. 7894 7895 `max-unrolled-insns' 7896 The maximum number of instructions that a loop should have if 7897 that loop is unrolled, and if the loop is unrolled, it 7898 determines how many times the loop code is unrolled. 7899 7900 `max-average-unrolled-insns' 7901 The maximum number of instructions biased by probabilities of 7902 their execution that a loop should have if that loop is 7903 unrolled, and if the loop is unrolled, it determines how many 7904 times the loop code is unrolled. 7905 7906 `max-unroll-times' 7907 The maximum number of unrollings of a single loop. 7908 7909 `max-peeled-insns' 7910 The maximum number of instructions that a loop should have if 7911 that loop is peeled, and if the loop is peeled, it determines 7912 how many times the loop code is peeled. 7913 7914 `max-peel-times' 7915 The maximum number of peelings of a single loop. 7916 7917 `max-completely-peeled-insns' 7918 The maximum number of insns of a completely peeled loop. 7919 7920 `max-completely-peel-times' 7921 The maximum number of iterations of a loop to be suitable for 7922 complete peeling. 7923 7924 `max-completely-peel-loop-nest-depth' 7925 The maximum depth of a loop nest suitable for complete 7926 peeling. 7927 7928 `max-unswitch-insns' 7929 The maximum number of insns of an unswitched loop. 7930 7931 `max-unswitch-level' 7932 The maximum number of branches unswitched in a single loop. 7933 7934 `lim-expensive' 7935 The minimum cost of an expensive expression in the loop 7936 invariant motion. 7937 7938 `iv-consider-all-candidates-bound' 7939 Bound on number of candidates for induction variables below 7940 that all candidates are considered for each use in induction 7941 variable optimizations. Only the most relevant candidates 7942 are considered if there are more candidates, to avoid 7943 quadratic time complexity. 7944 7945 `iv-max-considered-uses' 7946 The induction variable optimizations give up on loops that 7947 contain more induction variable uses. 7948 7949 `iv-always-prune-cand-set-bound' 7950 If number of candidates in the set is smaller than this value, 7951 we always try to remove unnecessary ivs from the set during 7952 its optimization when a new iv is added to the set. 7953 7954 `scev-max-expr-size' 7955 Bound on size of expressions used in the scalar evolutions 7956 analyzer. Large expressions slow the analyzer. 7957 7958 `scev-max-expr-complexity' 7959 Bound on the complexity of the expressions in the scalar 7960 evolutions analyzer. Complex expressions slow the analyzer. 7961 7962 `omega-max-vars' 7963 The maximum number of variables in an Omega constraint system. 7964 The default value is 128. 7965 7966 `omega-max-geqs' 7967 The maximum number of inequalities in an Omega constraint 7968 system. The default value is 256. 7969 7970 `omega-max-eqs' 7971 The maximum number of equalities in an Omega constraint 7972 system. The default value is 128. 7973 7974 `omega-max-wild-cards' 7975 The maximum number of wildcard variables that the Omega 7976 solver will be able to insert. The default value is 18. 7977 7978 `omega-hash-table-size' 7979 The size of the hash table in the Omega solver. The default 7980 value is 550. 7981 7982 `omega-max-keys' 7983 The maximal number of keys used by the Omega solver. The 7984 default value is 500. 7985 7986 `omega-eliminate-redundant-constraints' 7987 When set to 1, use expensive methods to eliminate all 7988 redundant constraints. The default value is 0. 7989 7990 `vect-max-version-for-alignment-checks' 7991 The maximum number of runtime checks that can be performed 7992 when doing loop versioning for alignment in the vectorizer. 7993 See option ftree-vect-loop-version for more information. 7994 7995 `vect-max-version-for-alias-checks' 7996 The maximum number of runtime checks that can be performed 7997 when doing loop versioning for alias in the vectorizer. See 7998 option ftree-vect-loop-version for more information. 7999 8000 `max-iterations-to-track' 8001 The maximum number of iterations of a loop the brute force 8002 algorithm for analysis of # of iterations of the loop tries 8003 to evaluate. 8004 8005 `hot-bb-count-fraction' 8006 Select fraction of the maximal count of repetitions of basic 8007 block in program given basic block needs to have to be 8008 considered hot. 8009 8010 `hot-bb-frequency-fraction' 8011 Select fraction of the entry block frequency of executions of 8012 basic block in function given basic block needs to have to be 8013 considered hot 8014 8015 `max-predicted-iterations' 8016 The maximum number of loop iterations we predict statically. 8017 This is useful in cases where function contain single loop 8018 with known bound and other loop with unknown. We predict the 8019 known number of iterations correctly, while the unknown 8020 number of iterations average to roughly 10. This means that 8021 the loop without bounds would appear artificially cold 8022 relative to the other one. 8023 8024 `align-threshold' 8025 Select fraction of the maximal frequency of executions of 8026 basic block in function given basic block will get aligned. 8027 8028 `align-loop-iterations' 8029 A loop expected to iterate at lest the selected number of 8030 iterations will get aligned. 8031 8032 `tracer-dynamic-coverage' 8033 `tracer-dynamic-coverage-feedback' 8034 This value is used to limit superblock formation once the 8035 given percentage of executed instructions is covered. This 8036 limits unnecessary code size expansion. 8037 8038 The `tracer-dynamic-coverage-feedback' is used only when 8039 profile feedback is available. The real profiles (as opposed 8040 to statically estimated ones) are much less balanced allowing 8041 the threshold to be larger value. 8042 8043 `tracer-max-code-growth' 8044 Stop tail duplication once code growth has reached given 8045 percentage. This is rather hokey argument, as most of the 8046 duplicates will be eliminated later in cross jumping, so it 8047 may be set to much higher values than is the desired code 8048 growth. 8049 8050 `tracer-min-branch-ratio' 8051 Stop reverse growth when the reverse probability of best edge 8052 is less than this threshold (in percent). 8053 8054 `tracer-min-branch-ratio' 8055 `tracer-min-branch-ratio-feedback' 8056 Stop forward growth if the best edge do have probability 8057 lower than this threshold. 8058 8059 Similarly to `tracer-dynamic-coverage' two values are 8060 present, one for compilation for profile feedback and one for 8061 compilation without. The value for compilation with profile 8062 feedback needs to be more conservative (higher) in order to 8063 make tracer effective. 8064 8065 `max-cse-path-length' 8066 Maximum number of basic blocks on path that cse considers. 8067 The default is 10. 8068 8069 `max-cse-insns' 8070 The maximum instructions CSE process before flushing. The 8071 default is 1000. 8072 8073 `ggc-min-expand' 8074 GCC uses a garbage collector to manage its own memory 8075 allocation. This parameter specifies the minimum percentage 8076 by which the garbage collector's heap should be allowed to 8077 expand between collections. Tuning this may improve 8078 compilation speed; it has no effect on code generation. 8079 8080 The default is 30% + 70% * (RAM/1GB) with an upper bound of 8081 100% when RAM >= 1GB. If `getrlimit' is available, the 8082 notion of "RAM" is the smallest of actual RAM and 8083 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 8084 calculate RAM on a particular platform, the lower bound of 8085 30% is used. Setting this parameter and `ggc-min-heapsize' 8086 to zero causes a full collection to occur at every 8087 opportunity. This is extremely slow, but can be useful for 8088 debugging. 8089 8090 `ggc-min-heapsize' 8091 Minimum size of the garbage collector's heap before it begins 8092 bothering to collect garbage. The first collection occurs 8093 after the heap expands by `ggc-min-expand'% beyond 8094 `ggc-min-heapsize'. Again, tuning this may improve 8095 compilation speed, and has no effect on code generation. 8096 8097 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 8098 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 8099 exceeded, but with a lower bound of 4096 (four megabytes) and 8100 an upper bound of 131072 (128 megabytes). If GCC is not able 8101 to calculate RAM on a particular platform, the lower bound is 8102 used. Setting this parameter very large effectively disables 8103 garbage collection. Setting this parameter and 8104 `ggc-min-expand' to zero causes a full collection to occur at 8105 every opportunity. 8106 8107 `max-reload-search-insns' 8108 The maximum number of instruction reload should look backward 8109 for equivalent register. Increasing values mean more 8110 aggressive optimization, making the compile time increase 8111 with probably slightly better performance. The default value 8112 is 100. 8113 8114 `max-cselib-memory-locations' 8115 The maximum number of memory locations cselib should take 8116 into account. Increasing values mean more aggressive 8117 optimization, making the compile time increase with probably 8118 slightly better performance. The default value is 500. 8119 8120 `reorder-blocks-duplicate' 8121 `reorder-blocks-duplicate-feedback' 8122 Used by basic block reordering pass to decide whether to use 8123 unconditional branch or duplicate the code on its 8124 destination. Code is duplicated when its estimated size is 8125 smaller than this value multiplied by the estimated size of 8126 unconditional jump in the hot spots of the program. 8127 8128 The `reorder-block-duplicate-feedback' is used only when 8129 profile feedback is available and may be set to higher values 8130 than `reorder-block-duplicate' since information about the 8131 hot spots is more accurate. 8132 8133 `max-sched-ready-insns' 8134 The maximum number of instructions ready to be issued the 8135 scheduler should consider at any given time during the first 8136 scheduling pass. Increasing values mean more thorough 8137 searches, making the compilation time increase with probably 8138 little benefit. The default value is 100. 8139 8140 `max-sched-region-blocks' 8141 The maximum number of blocks in a region to be considered for 8142 interblock scheduling. The default value is 10. 8143 8144 `max-pipeline-region-blocks' 8145 The maximum number of blocks in a region to be considered for 8146 pipelining in the selective scheduler. The default value is 8147 15. 8148 8149 `max-sched-region-insns' 8150 The maximum number of insns in a region to be considered for 8151 interblock scheduling. The default value is 100. 8152 8153 `max-pipeline-region-insns' 8154 The maximum number of insns in a region to be considered for 8155 pipelining in the selective scheduler. The default value is 8156 200. 8157 8158 `min-spec-prob' 8159 The minimum probability (in percents) of reaching a source 8160 block for interblock speculative scheduling. The default 8161 value is 40. 8162 8163 `max-sched-extend-regions-iters' 8164 The maximum number of iterations through CFG to extend 8165 regions. 0 - disable region extension, N - do at most N 8166 iterations. The default value is 0. 8167 8168 `max-sched-insn-conflict-delay' 8169 The maximum conflict delay for an insn to be considered for 8170 speculative motion. The default value is 3. 8171 8172 `sched-spec-prob-cutoff' 8173 The minimal probability of speculation success (in percents), 8174 so that speculative insn will be scheduled. The default 8175 value is 40. 8176 8177 `sched-mem-true-dep-cost' 8178 Minimal distance (in CPU cycles) between store and load 8179 targeting same memory locations. The default value is 1. 8180 8181 `selsched-max-lookahead' 8182 The maximum size of the lookahead window of selective 8183 scheduling. It is a depth of search for available 8184 instructions. The default value is 50. 8185 8186 `selsched-max-sched-times' 8187 The maximum number of times that an instruction will be 8188 scheduled during selective scheduling. This is the limit on 8189 the number of iterations through which the instruction may be 8190 pipelined. The default value is 2. 8191 8192 `selsched-max-insns-to-rename' 8193 The maximum number of best instructions in the ready list 8194 that are considered for renaming in the selective scheduler. 8195 The default value is 2. 8196 8197 `max-last-value-rtl' 8198 The maximum size measured as number of RTLs that can be 8199 recorded in an expression in combiner for a pseudo register 8200 as last known value of that register. The default is 10000. 8201 8202 `integer-share-limit' 8203 Small integer constants can use a shared data structure, 8204 reducing the compiler's memory usage and increasing its 8205 speed. This sets the maximum value of a shared integer 8206 constant. The default value is 256. 8207 8208 `min-virtual-mappings' 8209 Specifies the minimum number of virtual mappings in the 8210 incremental SSA updater that should be registered to trigger 8211 the virtual mappings heuristic defined by 8212 virtual-mappings-ratio. The default value is 100. 8213 8214 `virtual-mappings-ratio' 8215 If the number of virtual mappings is virtual-mappings-ratio 8216 bigger than the number of virtual symbols to be updated, then 8217 the incremental SSA updater switches to a full update for 8218 those symbols. The default ratio is 3. 8219 8220 `ssp-buffer-size' 8221 The minimum size of buffers (i.e. arrays) that will receive 8222 stack smashing protection when `-fstack-protection' is used. 8223 8224 `max-jump-thread-duplication-stmts' 8225 Maximum number of statements allowed in a block that needs to 8226 be duplicated when threading jumps. 8227 8228 `max-fields-for-field-sensitive' 8229 Maximum number of fields in a structure we will treat in a 8230 field sensitive manner during pointer analysis. The default 8231 is zero for -O0, and -O1 and 100 for -Os, -O2, and -O3. 8232 8233 `prefetch-latency' 8234 Estimate on average number of instructions that are executed 8235 before prefetch finishes. The distance we prefetch ahead is 8236 proportional to this constant. Increasing this number may 8237 also lead to less streams being prefetched (see 8238 `simultaneous-prefetches'). 8239 8240 `simultaneous-prefetches' 8241 Maximum number of prefetches that can run at the same time. 8242 8243 `l1-cache-line-size' 8244 The size of cache line in L1 cache, in bytes. 8245 8246 `l1-cache-size' 8247 The size of L1 cache, in kilobytes. 8248 8249 `l2-cache-size' 8250 The size of L2 cache, in kilobytes. 8251 8252 `min-insn-to-prefetch-ratio' 8253 The minimum ratio between the number of instructions and the 8254 number of prefetches to enable prefetching in a loop. 8255 8256 `prefetch-min-insn-to-mem-ratio' 8257 The minimum ratio between the number of instructions and the 8258 number of memory references to enable prefetching in a loop. 8259 8260 `use-canonical-types' 8261 Whether the compiler should use the "canonical" type system. 8262 By default, this should always be 1, which uses a more 8263 efficient internal mechanism for comparing types in C++ and 8264 Objective-C++. However, if bugs in the canonical type system 8265 are causing compilation failures, set this value to 0 to 8266 disable canonical types. 8267 8268 `switch-conversion-max-branch-ratio' 8269 Switch initialization conversion will refuse to create arrays 8270 that are bigger than `switch-conversion-max-branch-ratio' 8271 times the number of branches in the switch. 8272 8273 `max-partial-antic-length' 8274 Maximum length of the partial antic set computed during the 8275 tree partial redundancy elimination optimization 8276 (`-ftree-pre') when optimizing at `-O3' and above. For some 8277 sorts of source code the enhanced partial redundancy 8278 elimination optimization can run away, consuming all of the 8279 memory available on the host machine. This parameter sets a 8280 limit on the length of the sets that are computed, which 8281 prevents the runaway behavior. Setting a value of 0 for this 8282 parameter will allow an unlimited set length. 8283 8284 `sccvn-max-scc-size' 8285 Maximum size of a strongly connected component (SCC) during 8286 SCCVN processing. If this limit is hit, SCCVN processing for 8287 the whole function will not be done and optimizations 8288 depending on it will be disabled. The default maximum SCC 8289 size is 10000. 8290 8291 `ira-max-loops-num' 8292 IRA uses a regional register allocation by default. If a 8293 function contains loops more than number given by the 8294 parameter, only at most given number of the most frequently 8295 executed loops will form regions for the regional register 8296 allocation. The default value of the parameter is 100. 8297 8298 `ira-max-conflict-table-size' 8299 Although IRA uses a sophisticated algorithm of compression 8300 conflict table, the table can be still big for huge 8301 functions. If the conflict table for a function could be 8302 more than size in MB given by the parameter, the conflict 8303 table is not built and faster, simpler, and lower quality 8304 register allocation algorithm will be used. The algorithm do 8305 not use pseudo-register conflicts. The default value of the 8306 parameter is 2000. 8307 8308 `ira-loop-reserved-regs' 8309 IRA can be used to evaluate more accurate register pressure 8310 in loops for decision to move loop invariants (see `-O3'). 8311 The number of available registers reserved for some other 8312 purposes is described by this parameter. The default value 8313 of the parameter is 2 which is minimal number of registers 8314 needed for execution of typical instruction. This value is 8315 the best found from numerous experiments. 8316 8317 `loop-invariant-max-bbs-in-loop' 8318 Loop invariant motion can be very expensive, both in compile 8319 time and in amount of needed compile time memory, with very 8320 large loops. Loops with more basic blocks than this 8321 parameter won't have loop invariant motion optimization 8322 performed on them. The default value of the parameter is 8323 1000 for -O1 and 10000 for -O2 and above. 8324 8325 `max-vartrack-size' 8326 Sets a maximum number of hash table slots to use during 8327 variable tracking dataflow analysis of any function. If this 8328 limit is exceeded with variable tracking at assignments 8329 enabled, analysis for that function is retried without it, 8330 after removing all debug insns from the function. If the 8331 limit is exceeded even without debug insns, var tracking 8332 analysis is completely disabled for the function. Setting 8333 the parameter to zero makes it unlimited. 8334 8335 `min-nondebug-insn-uid' 8336 Use uids starting at this parameter for nondebug insns. The 8337 range below the parameter is reserved exclusively for debug 8338 insns created by `-fvar-tracking-assignments', but debug 8339 insns may get (non-overlapping) uids above it if the reserved 8340 range is exhausted. 8341 8342 `ipa-sra-ptr-growth-factor' 8343 IPA-SRA will replace a pointer to an aggregate with one or 8344 more new parameters only when their cumulative size is less 8345 or equal to `ipa-sra-ptr-growth-factor' times the size of the 8346 original pointer parameter. 8347 8348 `graphite-max-nb-scop-params' 8349 To avoid exponential effects in the Graphite loop transforms, 8350 the number of parameters in a Static Control Part (SCoP) is 8351 bounded. The default value is 10 parameters. A variable 8352 whose value is unknown at compile time and defined outside a 8353 SCoP is a parameter of the SCoP. 8354 8355 `graphite-max-bbs-per-function' 8356 To avoid exponential effects in the detection of SCoPs, the 8357 size of the functions analyzed by Graphite is bounded. The 8358 default value is 100 basic blocks. 8359 8360 `loop-block-tile-size' 8361 Loop blocking or strip mining transforms, enabled with 8362 `-floop-block' or `-floop-strip-mine', strip mine each loop 8363 in the loop nest by a given number of iterations. The strip 8364 length can be changed using the `loop-block-tile-size' 8365 parameter. The default value is 51 iterations. 8366 8367 `devirt-type-list-size' 8368 IPA-CP attempts to track all possible types passed to a 8369 function's parameter in order to perform devirtualization. 8370 `devirt-type-list-size' is the maximum number of types it 8371 stores per a single formal parameter of a function. 8372 8373 `lto-partitions' 8374 Specify desired number of partitions produced during WHOPR 8375 compilation. The number of partitions should exceed the 8376 number of CPUs used for compilation. The default value is 32. 8377 8378 `lto-minpartition' 8379 Size of minimal partition for WHOPR (in estimated 8380 instructions). This prevents expenses of splitting very 8381 small programs into too many partitions. 8382 8383 `cxx-max-namespaces-for-diagnostic-help' 8384 The maximum number of namespaces to consult for suggestions 8385 when C++ name lookup fails for an identifier. The default is 8386 1000. 8387 8388 `if-to-switch-threshold' 8389 If-chain to switch conversion, enabled by 8390 `-ftree-if-to-switch-conversion' convert chains of ifs of 8391 sufficient length into switches. The parameter 8392 `if-to-switch-threshold' can be used to set the minimal 8393 required length. The default value is 3. 8394 8395 8396 8397File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 8398 83993.11 Options Controlling the Preprocessor 8400========================================= 8401 8402These options control the C preprocessor, which is run on each C source 8403file before actual compilation. 8404 8405 If you use the `-E' option, nothing is done except preprocessing. 8406Some of these options make sense only together with `-E' because they 8407cause the preprocessor output to be unsuitable for actual compilation. 8408 8409`-Wp,OPTION' 8410 You can use `-Wp,OPTION' to bypass the compiler driver and pass 8411 OPTION directly through to the preprocessor. If OPTION contains 8412 commas, it is split into multiple options at the commas. However, 8413 many options are modified, translated or interpreted by the 8414 compiler driver before being passed to the preprocessor, and `-Wp' 8415 forcibly bypasses this phase. The preprocessor's direct interface 8416 is undocumented and subject to change, so whenever possible you 8417 should avoid using `-Wp' and let the driver handle the options 8418 instead. 8419 8420`-Xpreprocessor OPTION' 8421 Pass OPTION as an option to the preprocessor. You can use this to 8422 supply system-specific preprocessor options which GCC does not 8423 know how to recognize. 8424 8425 If you want to pass an option that takes an argument, you must use 8426 `-Xpreprocessor' twice, once for the option and once for the 8427 argument. 8428 8429`-D NAME' 8430 Predefine NAME as a macro, with definition `1'. 8431 8432`-D NAME=DEFINITION' 8433 The contents of DEFINITION are tokenized and processed as if they 8434 appeared during translation phase three in a `#define' directive. 8435 In particular, the definition will be truncated by embedded 8436 newline characters. 8437 8438 If you are invoking the preprocessor from a shell or shell-like 8439 program you may need to use the shell's quoting syntax to protect 8440 characters such as spaces that have a meaning in the shell syntax. 8441 8442 If you wish to define a function-like macro on the command line, 8443 write its argument list with surrounding parentheses before the 8444 equals sign (if any). Parentheses are meaningful to most shells, 8445 so you will need to quote the option. With `sh' and `csh', 8446 `-D'NAME(ARGS...)=DEFINITION'' works. 8447 8448 `-D' and `-U' options are processed in the order they are given on 8449 the command line. All `-imacros FILE' and `-include FILE' options 8450 are processed after all `-D' and `-U' options. 8451 8452`-U NAME' 8453 Cancel any previous definition of NAME, either built in or 8454 provided with a `-D' option. 8455 8456`-undef' 8457 Do not predefine any system-specific or GCC-specific macros. The 8458 standard predefined macros remain defined. 8459 8460`-I DIR' 8461 Add the directory DIR to the list of directories to be searched 8462 for header files. Directories named by `-I' are searched before 8463 the standard system include directories. If the directory DIR is 8464 a standard system include directory, the option is ignored to 8465 ensure that the default search order for system directories and 8466 the special treatment of system headers are not defeated . If DIR 8467 begins with `=', then the `=' will be replaced by the sysroot 8468 prefix; see `--sysroot' and `-isysroot'. 8469 8470`-o FILE' 8471 Write output to FILE. This is the same as specifying FILE as the 8472 second non-option argument to `cpp'. `gcc' has a different 8473 interpretation of a second non-option argument, so you must use 8474 `-o' to specify the output file. 8475 8476`-Wall' 8477 Turns on all optional warnings which are desirable for normal code. 8478 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 8479 warning about integer promotion causing a change of sign in `#if' 8480 expressions. Note that many of the preprocessor's warnings are on 8481 by default and have no options to control them. 8482 8483`-Wcomment' 8484`-Wcomments' 8485 Warn whenever a comment-start sequence `/*' appears in a `/*' 8486 comment, or whenever a backslash-newline appears in a `//' comment. 8487 (Both forms have the same effect.) 8488 8489`-Wtrigraphs' 8490 Most trigraphs in comments cannot affect the meaning of the 8491 program. However, a trigraph that would form an escaped newline 8492 (`??/' at the end of a line) can, by changing where the comment 8493 begins or ends. Therefore, only trigraphs that would form escaped 8494 newlines produce warnings inside a comment. 8495 8496 This option is implied by `-Wall'. If `-Wall' is not given, this 8497 option is still enabled unless trigraphs are enabled. To get 8498 trigraph conversion without warnings, but get the other `-Wall' 8499 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 8500 8501`-Wtraditional' 8502 Warn about certain constructs that behave differently in 8503 traditional and ISO C. Also warn about ISO C constructs that have 8504 no traditional C equivalent, and problematic constructs which 8505 should be avoided. 8506 8507`-Wundef' 8508 Warn whenever an identifier which is not a macro is encountered in 8509 an `#if' directive, outside of `defined'. Such identifiers are 8510 replaced with zero. 8511 8512`-Wunused-macros' 8513 Warn about macros defined in the main file that are unused. A 8514 macro is "used" if it is expanded or tested for existence at least 8515 once. The preprocessor will also warn if the macro has not been 8516 used at the time it is redefined or undefined. 8517 8518 Built-in macros, macros defined on the command line, and macros 8519 defined in include files are not warned about. 8520 8521 _Note:_ If a macro is actually used, but only used in skipped 8522 conditional blocks, then CPP will report it as unused. To avoid 8523 the warning in such a case, you might improve the scope of the 8524 macro's definition by, for example, moving it into the first 8525 skipped block. Alternatively, you could provide a dummy use with 8526 something like: 8527 8528 #if defined the_macro_causing_the_warning 8529 #endif 8530 8531`-Wendif-labels' 8532 Warn whenever an `#else' or an `#endif' are followed by text. 8533 This usually happens in code of the form 8534 8535 #if FOO 8536 ... 8537 #else FOO 8538 ... 8539 #endif FOO 8540 8541 The second and third `FOO' should be in comments, but often are not 8542 in older programs. This warning is on by default. 8543 8544`-Werror' 8545 Make all warnings into hard errors. Source code which triggers 8546 warnings will be rejected. 8547 8548`-Wsystem-headers' 8549 Issue warnings for code in system headers. These are normally 8550 unhelpful in finding bugs in your own code, therefore suppressed. 8551 If you are responsible for the system library, you may want to see 8552 them. 8553 8554`-w' 8555 Suppress all warnings, including those which GNU CPP issues by 8556 default. 8557 8558`-pedantic' 8559 Issue all the mandatory diagnostics listed in the C standard. 8560 Some of them are left out by default, since they trigger 8561 frequently on harmless code. 8562 8563`-pedantic-errors' 8564 Issue all the mandatory diagnostics, and make all mandatory 8565 diagnostics into errors. This includes mandatory diagnostics that 8566 GCC issues without `-pedantic' but treats as warnings. 8567 8568`-M' 8569 Instead of outputting the result of preprocessing, output a rule 8570 suitable for `make' describing the dependencies of the main source 8571 file. The preprocessor outputs one `make' rule containing the 8572 object file name for that source file, a colon, and the names of 8573 all the included files, including those coming from `-include' or 8574 `-imacros' command line options. 8575 8576 Unless specified explicitly (with `-MT' or `-MQ'), the object file 8577 name consists of the name of the source file with any suffix 8578 replaced with object file suffix and with any leading directory 8579 parts removed. If there are many included files then the rule is 8580 split into several lines using `\'-newline. The rule has no 8581 commands. 8582 8583 This option does not suppress the preprocessor's debug output, 8584 such as `-dM'. To avoid mixing such debug output with the 8585 dependency rules you should explicitly specify the dependency 8586 output file with `-MF', or use an environment variable like 8587 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 8588 output will still be sent to the regular output stream as normal. 8589 8590 Passing `-M' to the driver implies `-E', and suppresses warnings 8591 with an implicit `-w'. 8592 8593`-MM' 8594 Like `-M' but do not mention header files that are found in system 8595 header directories, nor header files that are included, directly 8596 or indirectly, from such a header. 8597 8598 This implies that the choice of angle brackets or double quotes in 8599 an `#include' directive does not in itself determine whether that 8600 header will appear in `-MM' dependency output. This is a slight 8601 change in semantics from GCC versions 3.0 and earlier. 8602 8603`-MF FILE' 8604 When used with `-M' or `-MM', specifies a file to write the 8605 dependencies to. If no `-MF' switch is given the preprocessor 8606 sends the rules to the same place it would have sent preprocessed 8607 output. 8608 8609 When used with the driver options `-MD' or `-MMD', `-MF' overrides 8610 the default dependency output file. 8611 8612`-MG' 8613 In conjunction with an option such as `-M' requesting dependency 8614 generation, `-MG' assumes missing header files are generated files 8615 and adds them to the dependency list without raising an error. 8616 The dependency filename is taken directly from the `#include' 8617 directive without prepending any path. `-MG' also suppresses 8618 preprocessed output, as a missing header file renders this useless. 8619 8620 This feature is used in automatic updating of makefiles. 8621 8622`-MP' 8623 This option instructs CPP to add a phony target for each dependency 8624 other than the main file, causing each to depend on nothing. These 8625 dummy rules work around errors `make' gives if you remove header 8626 files without updating the `Makefile' to match. 8627 8628 This is typical output: 8629 8630 test.o: test.c test.h 8631 8632 test.h: 8633 8634`-MT TARGET' 8635 Change the target of the rule emitted by dependency generation. By 8636 default CPP takes the name of the main input file, deletes any 8637 directory components and any file suffix such as `.c', and appends 8638 the platform's usual object suffix. The result is the target. 8639 8640 An `-MT' option will set the target to be exactly the string you 8641 specify. If you want multiple targets, you can specify them as a 8642 single argument to `-MT', or use multiple `-MT' options. 8643 8644 For example, `-MT '$(objpfx)foo.o'' might give 8645 8646 $(objpfx)foo.o: foo.c 8647 8648`-MQ TARGET' 8649 Same as `-MT', but it quotes any characters which are special to 8650 Make. `-MQ '$(objpfx)foo.o'' gives 8651 8652 $$(objpfx)foo.o: foo.c 8653 8654 The default target is automatically quoted, as if it were given 8655 with `-MQ'. 8656 8657`-MD' 8658 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 8659 implied. The driver determines FILE based on whether an `-o' 8660 option is given. If it is, the driver uses its argument but with 8661 a suffix of `.d', otherwise it takes the name of the input file, 8662 removes any directory components and suffix, and applies a `.d' 8663 suffix. 8664 8665 If `-MD' is used in conjunction with `-E', any `-o' switch is 8666 understood to specify the dependency output file (*note -MF: 8667 dashMF.), but if used without `-E', each `-o' is understood to 8668 specify a target object file. 8669 8670 Since `-E' is not implied, `-MD' can be used to generate a 8671 dependency output file as a side-effect of the compilation process. 8672 8673`-MMD' 8674 Like `-MD' except mention only user header files, not system 8675 header files. 8676 8677`-fpch-deps' 8678 When using precompiled headers (*note Precompiled Headers::), this 8679 flag will cause the dependency-output flags to also list the files 8680 from the precompiled header's dependencies. If not specified only 8681 the precompiled header would be listed and not the files that were 8682 used to create it because those files are not consulted when a 8683 precompiled header is used. 8684 8685`-fpch-preprocess' 8686 This option allows use of a precompiled header (*note Precompiled 8687 Headers::) together with `-E'. It inserts a special `#pragma', 8688 `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the 8689 place where the precompiled header was found, and its FILENAME. 8690 When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and 8691 loads the PCH. 8692 8693 This option is off by default, because the resulting preprocessed 8694 output is only really suitable as input to GCC. It is switched on 8695 by `-save-temps'. 8696 8697 You should not write this `#pragma' in your own code, but it is 8698 safe to edit the filename if the PCH file is available in a 8699 different location. The filename may be absolute or it may be 8700 relative to GCC's current directory. 8701 8702`-x c' 8703`-x c++' 8704`-x objective-c' 8705`-x assembler-with-cpp' 8706 Specify the source language: C, C++, Objective-C, or assembly. 8707 This has nothing to do with standards conformance or extensions; 8708 it merely selects which base syntax to expect. If you give none 8709 of these options, cpp will deduce the language from the extension 8710 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 8711 extensions for C++ and assembly are also recognized. If cpp does 8712 not recognize the extension, it will treat the file as C; this is 8713 the most generic mode. 8714 8715 _Note:_ Previous versions of cpp accepted a `-lang' option which 8716 selected both the language and the standards conformance level. 8717 This option has been removed, because it conflicts with the `-l' 8718 option. 8719 8720`-std=STANDARD' 8721`-ansi' 8722 Specify the standard to which the code should conform. Currently 8723 CPP knows about C and C++ standards; others may be added in the 8724 future. 8725 8726 STANDARD may be one of: 8727 `c90' 8728 `c89' 8729 `iso9899:1990' 8730 The ISO C standard from 1990. `c90' is the customary 8731 shorthand for this version of the standard. 8732 8733 The `-ansi' option is equivalent to `-std=c90'. 8734 8735 `iso9899:199409' 8736 The 1990 C standard, as amended in 1994. 8737 8738 `iso9899:1999' 8739 `c99' 8740 `iso9899:199x' 8741 `c9x' 8742 The revised ISO C standard, published in December 1999. 8743 Before publication, this was known as C9X. 8744 8745 `c1x' 8746 The next version of the ISO C standard, still under 8747 development. 8748 8749 `gnu90' 8750 `gnu89' 8751 The 1990 C standard plus GNU extensions. This is the default. 8752 8753 `gnu99' 8754 `gnu9x' 8755 The 1999 C standard plus GNU extensions. 8756 8757 `gnu1x' 8758 The next version of the ISO C standard, still under 8759 development, plus GNU extensions. 8760 8761 `c++98' 8762 The 1998 ISO C++ standard plus amendments. 8763 8764 `gnu++98' 8765 The same as `-std=c++98' plus GNU extensions. This is the 8766 default for C++ code. 8767 8768`-I-' 8769 Split the include path. Any directories specified with `-I' 8770 options before `-I-' are searched only for headers requested with 8771 `#include "FILE"'; they are not searched for `#include <FILE>'. 8772 If additional directories are specified with `-I' options after 8773 the `-I-', those directories are searched for all `#include' 8774 directives. 8775 8776 In addition, `-I-' inhibits the use of the directory of the current 8777 file directory as the first search directory for `#include "FILE"'. 8778 This option has been deprecated. 8779 8780`-nostdinc' 8781 Do not search the standard system directories for header files. 8782 Only the directories you have specified with `-I' options (and the 8783 directory of the current file, if appropriate) are searched. 8784 8785`-nostdinc++' 8786 Do not search for header files in the C++-specific standard 8787 directories, but do still search the other standard directories. 8788 (This option is used when building the C++ library.) 8789 8790`-include FILE' 8791 Process FILE as if `#include "file"' appeared as the first line of 8792 the primary source file. However, the first directory searched 8793 for FILE is the preprocessor's working directory _instead of_ the 8794 directory containing the main source file. If not found there, it 8795 is searched for in the remainder of the `#include "..."' search 8796 chain as normal. 8797 8798 If multiple `-include' options are given, the files are included 8799 in the order they appear on the command line. 8800 8801`-imacros FILE' 8802 Exactly like `-include', except that any output produced by 8803 scanning FILE is thrown away. Macros it defines remain defined. 8804 This allows you to acquire all the macros from a header without 8805 also processing its declarations. 8806 8807 All files specified by `-imacros' are processed before all files 8808 specified by `-include'. 8809 8810`-idirafter DIR' 8811 Search DIR for header files, but do it _after_ all directories 8812 specified with `-I' and the standard system directories have been 8813 exhausted. DIR is treated as a system include directory. If DIR 8814 begins with `=', then the `=' will be replaced by the sysroot 8815 prefix; see `--sysroot' and `-isysroot'. 8816 8817`-iprefix PREFIX' 8818 Specify PREFIX as the prefix for subsequent `-iwithprefix' 8819 options. If the prefix represents a directory, you should include 8820 the final `/'. 8821 8822`-iwithprefix DIR' 8823`-iwithprefixbefore DIR' 8824 Append DIR to the prefix specified previously with `-iprefix', and 8825 add the resulting directory to the include search path. 8826 `-iwithprefixbefore' puts it in the same place `-I' would; 8827 `-iwithprefix' puts it where `-idirafter' would. 8828 8829`-isysroot DIR' 8830 This option is like the `--sysroot' option, but applies only to 8831 header files (except for Darwin targets, where it applies to both 8832 header files and libraries). See the `--sysroot' option for more 8833 information. 8834 8835`-imultilib DIR' 8836 Use DIR as a subdirectory of the directory containing 8837 target-specific C++ headers. 8838 8839`-isystem DIR' 8840 Search DIR for header files, after all directories specified by 8841 `-I' but before the standard system directories. Mark it as a 8842 system directory, so that it gets the same special treatment as is 8843 applied to the standard system directories. If DIR begins with 8844 `=', then the `=' will be replaced by the sysroot prefix; see 8845 `--sysroot' and `-isysroot'. 8846 8847`-iquote DIR' 8848 Search DIR only for header files requested with `#include "FILE"'; 8849 they are not searched for `#include <FILE>', before all 8850 directories specified by `-I' and before the standard system 8851 directories. If DIR begins with `=', then the `=' will be replaced 8852 by the sysroot prefix; see `--sysroot' and `-isysroot'. 8853 8854`-fdirectives-only' 8855 When preprocessing, handle directives, but do not expand macros. 8856 8857 The option's behavior depends on the `-E' and `-fpreprocessed' 8858 options. 8859 8860 With `-E', preprocessing is limited to the handling of directives 8861 such as `#define', `#ifdef', and `#error'. Other preprocessor 8862 operations, such as macro expansion and trigraph conversion are 8863 not performed. In addition, the `-dD' option is implicitly 8864 enabled. 8865 8866 With `-fpreprocessed', predefinition of command line and most 8867 builtin macros is disabled. Macros such as `__LINE__', which are 8868 contextually dependent, are handled normally. This enables 8869 compilation of files previously preprocessed with `-E 8870 -fdirectives-only'. 8871 8872 With both `-E' and `-fpreprocessed', the rules for 8873 `-fpreprocessed' take precedence. This enables full preprocessing 8874 of files previously preprocessed with `-E -fdirectives-only'. 8875 8876`-fdollars-in-identifiers' 8877 Accept `$' in identifiers. 8878 8879`-fextended-identifiers' 8880 Accept universal character names in identifiers. This option is 8881 experimental; in a future version of GCC, it will be enabled by 8882 default for C99 and C++. 8883 8884`-fpreprocessed' 8885 Indicate to the preprocessor that the input file has already been 8886 preprocessed. This suppresses things like macro expansion, 8887 trigraph conversion, escaped newline splicing, and processing of 8888 most directives. The preprocessor still recognizes and removes 8889 comments, so that you can pass a file preprocessed with `-C' to 8890 the compiler without problems. In this mode the integrated 8891 preprocessor is little more than a tokenizer for the front ends. 8892 8893 `-fpreprocessed' is implicit if the input file has one of the 8894 extensions `.i', `.ii' or `.mi'. These are the extensions that 8895 GCC uses for preprocessed files created by `-save-temps'. 8896 8897`-ftabstop=WIDTH' 8898 Set the distance between tab stops. This helps the preprocessor 8899 report correct column numbers in warnings or errors, even if tabs 8900 appear on the line. If the value is less than 1 or greater than 8901 100, the option is ignored. The default is 8. 8902 8903`-fexec-charset=CHARSET' 8904 Set the execution character set, used for string and character 8905 constants. The default is UTF-8. CHARSET can be any encoding 8906 supported by the system's `iconv' library routine. 8907 8908`-fwide-exec-charset=CHARSET' 8909 Set the wide execution character set, used for wide string and 8910 character constants. The default is UTF-32 or UTF-16, whichever 8911 corresponds to the width of `wchar_t'. As with `-fexec-charset', 8912 CHARSET can be any encoding supported by the system's `iconv' 8913 library routine; however, you will have problems with encodings 8914 that do not fit exactly in `wchar_t'. 8915 8916`-finput-charset=CHARSET' 8917 Set the input character set, used for translation from the 8918 character set of the input file to the source character set used 8919 by GCC. If the locale does not specify, or GCC cannot get this 8920 information from the locale, the default is UTF-8. This can be 8921 overridden by either the locale or this command line option. 8922 Currently the command line option takes precedence if there's a 8923 conflict. CHARSET can be any encoding supported by the system's 8924 `iconv' library routine. 8925 8926`-fworking-directory' 8927 Enable generation of linemarkers in the preprocessor output that 8928 will let the compiler know the current working directory at the 8929 time of preprocessing. When this option is enabled, the 8930 preprocessor will emit, after the initial linemarker, a second 8931 linemarker with the current working directory followed by two 8932 slashes. GCC will use this directory, when it's present in the 8933 preprocessed input, as the directory emitted as the current 8934 working directory in some debugging information formats. This 8935 option is implicitly enabled if debugging information is enabled, 8936 but this can be inhibited with the negated form 8937 `-fno-working-directory'. If the `-P' flag is present in the 8938 command line, this option has no effect, since no `#line' 8939 directives are emitted whatsoever. 8940 8941`-fno-show-column' 8942 Do not print column numbers in diagnostics. This may be necessary 8943 if diagnostics are being scanned by a program that does not 8944 understand the column numbers, such as `dejagnu'. 8945 8946`-A PREDICATE=ANSWER' 8947 Make an assertion with the predicate PREDICATE and answer ANSWER. 8948 This form is preferred to the older form `-A PREDICATE(ANSWER)', 8949 which is still supported, because it does not use shell special 8950 characters. 8951 8952`-A -PREDICATE=ANSWER' 8953 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 8954 8955`-dCHARS' 8956 CHARS is a sequence of one or more of the following characters, 8957 and must not be preceded by a space. Other characters are 8958 interpreted by the compiler proper, or reserved for future 8959 versions of GCC, and so are silently ignored. If you specify 8960 characters whose behavior conflicts, the result is undefined. 8961 8962 `M' 8963 Instead of the normal output, generate a list of `#define' 8964 directives for all the macros defined during the execution of 8965 the preprocessor, including predefined macros. This gives 8966 you a way of finding out what is predefined in your version 8967 of the preprocessor. Assuming you have no file `foo.h', the 8968 command 8969 8970 touch foo.h; cpp -dM foo.h 8971 8972 will show all the predefined macros. 8973 8974 If you use `-dM' without the `-E' option, `-dM' is 8975 interpreted as a synonym for `-fdump-rtl-mach'. *Note 8976 Debugging Options: (gcc)Debugging Options. 8977 8978 `D' 8979 Like `M' except in two respects: it does _not_ include the 8980 predefined macros, and it outputs _both_ the `#define' 8981 directives and the result of preprocessing. Both kinds of 8982 output go to the standard output file. 8983 8984 `N' 8985 Like `D', but emit only the macro names, not their expansions. 8986 8987 `I' 8988 Output `#include' directives in addition to the result of 8989 preprocessing. 8990 8991 `U' 8992 Like `D' except that only macros that are expanded, or whose 8993 definedness is tested in preprocessor directives, are output; 8994 the output is delayed until the use or test of the macro; and 8995 `#undef' directives are also output for macros tested but 8996 undefined at the time. 8997 8998`-P' 8999 Inhibit generation of linemarkers in the output from the 9000 preprocessor. This might be useful when running the preprocessor 9001 on something that is not C code, and will be sent to a program 9002 which might be confused by the linemarkers. 9003 9004`-C' 9005 Do not discard comments. All comments are passed through to the 9006 output file, except for comments in processed directives, which 9007 are deleted along with the directive. 9008 9009 You should be prepared for side effects when using `-C'; it causes 9010 the preprocessor to treat comments as tokens in their own right. 9011 For example, comments appearing at the start of what would be a 9012 directive line have the effect of turning that line into an 9013 ordinary source line, since the first token on the line is no 9014 longer a `#'. 9015 9016`-CC' 9017 Do not discard comments, including during macro expansion. This is 9018 like `-C', except that comments contained within macros are also 9019 passed through to the output file where the macro is expanded. 9020 9021 In addition to the side-effects of the `-C' option, the `-CC' 9022 option causes all C++-style comments inside a macro to be 9023 converted to C-style comments. This is to prevent later use of 9024 that macro from inadvertently commenting out the remainder of the 9025 source line. 9026 9027 The `-CC' option is generally used to support lint comments. 9028 9029`-traditional-cpp' 9030 Try to imitate the behavior of old-fashioned C preprocessors, as 9031 opposed to ISO C preprocessors. 9032 9033`-trigraphs' 9034 Process trigraph sequences. These are three-character sequences, 9035 all starting with `??', that are defined by ISO C to stand for 9036 single characters. For example, `??/' stands for `\', so `'??/n'' 9037 is a character constant for a newline. By default, GCC ignores 9038 trigraphs, but in standard-conforming modes it converts them. See 9039 the `-std' and `-ansi' options. 9040 9041 The nine trigraphs and their replacements are 9042 9043 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 9044 Replacement: [ ] { } # \ ^ | ~ 9045 9046`-remap' 9047 Enable special code to work around file systems which only permit 9048 very short file names, such as MS-DOS. 9049 9050`--help' 9051`--target-help' 9052 Print text describing all the command line options instead of 9053 preprocessing anything. 9054 9055`-v' 9056 Verbose mode. Print out GNU CPP's version number at the beginning 9057 of execution, and report the final form of the include path. 9058 9059`-H' 9060 Print the name of each header file used, in addition to other 9061 normal activities. Each name is indented to show how deep in the 9062 `#include' stack it is. Precompiled header files are also 9063 printed, even if they are found to be invalid; an invalid 9064 precompiled header file is printed with `...x' and a valid one 9065 with `...!' . 9066 9067`-version' 9068`--version' 9069 Print out GNU CPP's version number. With one dash, proceed to 9070 preprocess as normal. With two dashes, exit immediately. 9071 9072 9073File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 9074 90753.12 Passing Options to the Assembler 9076===================================== 9077 9078You can pass options to the assembler. 9079 9080`-Wa,OPTION' 9081 Pass OPTION as an option to the assembler. If OPTION contains 9082 commas, it is split into multiple options at the commas. 9083 9084`-Xassembler OPTION' 9085 Pass OPTION as an option to the assembler. You can use this to 9086 supply system-specific assembler options which GCC does not know 9087 how to recognize. 9088 9089 If you want to pass an option that takes an argument, you must use 9090 `-Xassembler' twice, once for the option and once for the argument. 9091 9092 9093 9094File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 9095 90963.13 Options for Linking 9097======================== 9098 9099These options come into play when the compiler links object files into 9100an executable output file. They are meaningless if the compiler is not 9101doing a link step. 9102 9103`OBJECT-FILE-NAME' 9104 A file name that does not end in a special recognized suffix is 9105 considered to name an object file or library. (Object files are 9106 distinguished from libraries by the linker according to the file 9107 contents.) If linking is done, these object files are used as 9108 input to the linker. 9109 9110`-c' 9111`-S' 9112`-E' 9113 If any of these options is used, then the linker is not run, and 9114 object file names should not be used as arguments. *Note Overall 9115 Options::. 9116 9117`-lLIBRARY' 9118`-l LIBRARY' 9119 Search the library named LIBRARY when linking. (The second 9120 alternative with the library as a separate argument is only for 9121 POSIX compliance and is not recommended.) 9122 9123 It makes a difference where in the command you write this option; 9124 the linker searches and processes libraries and object files in 9125 the order they are specified. Thus, `foo.o -lz bar.o' searches 9126 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 9127 refers to functions in `z', those functions may not be loaded. 9128 9129 The linker searches a standard list of directories for the library, 9130 which is actually a file named `libLIBRARY.a'. The linker then 9131 uses this file as if it had been specified precisely by name. 9132 9133 The directories searched include several standard system 9134 directories plus any that you specify with `-L'. 9135 9136 Normally the files found this way are library files--archive files 9137 whose members are object files. The linker handles an archive 9138 file by scanning through it for members which define symbols that 9139 have so far been referenced but not defined. But if the file that 9140 is found is an ordinary object file, it is linked in the usual 9141 fashion. The only difference between using an `-l' option and 9142 specifying a file name is that `-l' surrounds LIBRARY with `lib' 9143 and `.a' and searches several directories. 9144 9145`-lobjc' 9146 You need this special case of the `-l' option in order to link an 9147 Objective-C or Objective-C++ program. 9148 9149`-nostartfiles' 9150 Do not use the standard system startup files when linking. The 9151 standard system libraries are used normally, unless `-nostdlib' or 9152 `-nodefaultlibs' is used. 9153 9154`-nodefaultlibs' 9155 Do not use the standard system libraries when linking. Only the 9156 libraries you specify will be passed to the linker, options 9157 specifying linkage of the system libraries, such as 9158 `-static-libgcc' or `-shared-libgcc', will be ignored. The 9159 standard startup files are used normally, unless `-nostartfiles' 9160 is used. The compiler may generate calls to `memcmp', `memset', 9161 `memcpy' and `memmove'. These entries are usually resolved by 9162 entries in libc. These entry points should be supplied through 9163 some other mechanism when this option is specified. 9164 9165`-nostdlib' 9166 Do not use the standard system startup files or libraries when 9167 linking. No startup files and only the libraries you specify will 9168 be passed to the linker, options specifying linkage of the system 9169 libraries, such as `-static-libgcc' or `-shared-libgcc', will be 9170 ignored. The compiler may generate calls to `memcmp', `memset', 9171 `memcpy' and `memmove'. These entries are usually resolved by 9172 entries in libc. These entry points should be supplied through 9173 some other mechanism when this option is specified. 9174 9175 One of the standard libraries bypassed by `-nostdlib' and 9176 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 9177 that GCC uses to overcome shortcomings of particular machines, or 9178 special needs for some languages. (*Note Interfacing to GCC 9179 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 9180 most cases, you need `libgcc.a' even when you want to avoid other 9181 standard libraries. In other words, when you specify `-nostdlib' 9182 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 9183 This ensures that you have no unresolved references to internal GCC 9184 library subroutines. (For example, `__main', used to ensure C++ 9185 constructors will be called; *note `collect2': (gccint)Collect2.) 9186 9187`-pie' 9188 Produce a position independent executable on targets which support 9189 it. For predictable results, you must also specify the same set 9190 of options that were used to generate code (`-fpie', `-fPIE', or 9191 model suboptions) when you specify this option. 9192 9193`-rdynamic' 9194 Pass the flag `-export-dynamic' to the ELF linker, on targets that 9195 support it. This instructs the linker to add all symbols, not only 9196 used ones, to the dynamic symbol table. This option is needed for 9197 some uses of `dlopen' or to allow obtaining backtraces from within 9198 a program. 9199 9200`-s' 9201 Remove all symbol table and relocation information from the 9202 executable. 9203 9204`-static' 9205 On systems that support dynamic linking, this prevents linking 9206 with the shared libraries. On other systems, this option has no 9207 effect. 9208 9209`-shared' 9210 Produce a shared object which can then be linked with other 9211 objects to form an executable. Not all systems support this 9212 option. For predictable results, you must also specify the same 9213 set of options that were used to generate code (`-fpic', `-fPIC', 9214 or model suboptions) when you specify this option.(1) 9215 9216`-shared-libgcc' 9217`-static-libgcc' 9218 On systems that provide `libgcc' as a shared library, these options 9219 force the use of either the shared or static version respectively. 9220 If no shared version of `libgcc' was built when the compiler was 9221 configured, these options have no effect. 9222 9223 There are several situations in which an application should use the 9224 shared `libgcc' instead of the static version. The most common of 9225 these is when the application wishes to throw and catch exceptions 9226 across different shared libraries. In that case, each of the 9227 libraries as well as the application itself should use the shared 9228 `libgcc'. 9229 9230 Therefore, the G++ and GCJ drivers automatically add 9231 `-shared-libgcc' whenever you build a shared library or a main 9232 executable, because C++ and Java programs typically use 9233 exceptions, so this is the right thing to do. 9234 9235 If, instead, you use the GCC driver to create shared libraries, 9236 you may find that they will not always be linked with the shared 9237 `libgcc'. If GCC finds, at its configuration time, that you have 9238 a non-GNU linker or a GNU linker that does not support option 9239 `--eh-frame-hdr', it will link the shared version of `libgcc' into 9240 shared libraries by default. Otherwise, it will take advantage of 9241 the linker and optimize away the linking with the shared version 9242 of `libgcc', linking with the static version of libgcc by default. 9243 This allows exceptions to propagate through such shared libraries, 9244 without incurring relocation costs at library load time. 9245 9246 However, if a library or main executable is supposed to throw or 9247 catch exceptions, you must link it using the G++ or GCJ driver, as 9248 appropriate for the languages used in the program, or using the 9249 option `-shared-libgcc', such that it is linked with the shared 9250 `libgcc'. 9251 9252`-static-libstdc++' 9253 When the `g++' program is used to link a C++ program, it will 9254 normally automatically link against `libstdc++'. If `libstdc++' 9255 is available as a shared library, and the `-static' option is not 9256 used, then this will link against the shared version of 9257 `libstdc++'. That is normally fine. However, it is sometimes 9258 useful to freeze the version of `libstdc++' used by the program 9259 without going all the way to a fully static link. The 9260 `-static-libstdc++' option directs the `g++' driver to link 9261 `libstdc++' statically, without necessarily linking other 9262 libraries statically. 9263 9264`-symbolic' 9265 Bind references to global symbols when building a shared object. 9266 Warn about any unresolved references (unless overridden by the 9267 link editor option `-Xlinker -z -Xlinker defs'). Only a few 9268 systems support this option. 9269 9270`-T SCRIPT' 9271 Use SCRIPT as the linker script. This option is supported by most 9272 systems using the GNU linker. On some targets, such as bare-board 9273 targets without an operating system, the `-T' option may be 9274 required when linking to avoid references to undefined symbols. 9275 9276`-Xlinker OPTION' 9277 Pass OPTION as an option to the linker. You can use this to 9278 supply system-specific linker options which GCC does not know how 9279 to recognize. 9280 9281 If you want to pass an option that takes a separate argument, you 9282 must use `-Xlinker' twice, once for the option and once for the 9283 argument. For example, to pass `-assert definitions', you must 9284 write `-Xlinker -assert -Xlinker definitions'. It does not work 9285 to write `-Xlinker "-assert definitions"', because this passes the 9286 entire string as a single argument, which is not what the linker 9287 expects. 9288 9289 When using the GNU linker, it is usually more convenient to pass 9290 arguments to linker options using the `OPTION=VALUE' syntax than 9291 as separate arguments. For example, you can specify `-Xlinker 9292 -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'. 9293 Other linkers may not support this syntax for command-line options. 9294 9295`-Wl,OPTION' 9296 Pass OPTION as an option to the linker. If OPTION contains 9297 commas, it is split into multiple options at the commas. You can 9298 use this syntax to pass an argument to the option. For example, 9299 `-Wl,-Map,output.map' passes `-Map output.map' to the linker. 9300 When using the GNU linker, you can also get the same effect with 9301 `-Wl,-Map=output.map'. 9302 9303`-u SYMBOL' 9304 Pretend the symbol SYMBOL is undefined, to force linking of 9305 library modules to define it. You can use `-u' multiple times with 9306 different symbols to force loading of additional library modules. 9307 9308 ---------- Footnotes ---------- 9309 9310 (1) On some systems, `gcc -shared' needs to build supplementary stub 9311code for constructors to work. On multi-libbed systems, `gcc -shared' 9312must select the correct support libraries to link against. Failing to 9313supply the correct flags may lead to subtle defects. Supplying them in 9314cases where they are not necessary is innocuous. 9315 9316 9317File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 9318 93193.14 Options for Directory Search 9320================================= 9321 9322These options specify directories to search for header files, for 9323libraries and for parts of the compiler: 9324 9325`-IDIR' 9326 Add the directory DIR to the head of the list of directories to be 9327 searched for header files. This can be used to override a system 9328 header file, substituting your own version, since these 9329 directories are searched before the system header file 9330 directories. However, you should not use this option to add 9331 directories that contain vendor-supplied system header files (use 9332 `-isystem' for that). If you use more than one `-I' option, the 9333 directories are scanned in left-to-right order; the standard 9334 system directories come after. 9335 9336 If a standard system include directory, or a directory specified 9337 with `-isystem', is also specified with `-I', the `-I' option will 9338 be ignored. The directory will still be searched but as a system 9339 directory at its normal position in the system include chain. 9340 This is to ensure that GCC's procedure to fix buggy system headers 9341 and the ordering for the include_next directive are not 9342 inadvertently changed. If you really need to change the search 9343 order for system directories, use the `-nostdinc' and/or 9344 `-isystem' options. 9345 9346`-iplugindir=DIR' 9347 Set the directory to search for plugins which are passed by 9348 `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'. This option 9349 is not meant to be used by the user, but only passed by the driver. 9350 9351`-iquoteDIR' 9352 Add the directory DIR to the head of the list of directories to be 9353 searched for header files only for the case of `#include "FILE"'; 9354 they are not searched for `#include <FILE>', otherwise just like 9355 `-I'. 9356 9357`-LDIR' 9358 Add directory DIR to the list of directories to be searched for 9359 `-l'. 9360 9361`-BPREFIX' 9362 This option specifies where to find the executables, libraries, 9363 include files, and data files of the compiler itself. 9364 9365 The compiler driver program runs one or more of the subprograms 9366 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 9367 program it tries to run, both with and without `MACHINE/VERSION/' 9368 (*note Target Options::). 9369 9370 For each subprogram to be run, the compiler driver first tries the 9371 `-B' prefix, if any. If that name is not found, or if `-B' was 9372 not specified, the driver tries two standard prefixes, which are 9373 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those 9374 results in a file name that is found, the unmodified program name 9375 is searched for using the directories specified in your `PATH' 9376 environment variable. 9377 9378 The compiler will check to see if the path provided by the `-B' 9379 refers to a directory, and if necessary it will add a directory 9380 separator character at the end of the path. 9381 9382 `-B' prefixes that effectively specify directory names also apply 9383 to libraries in the linker, because the compiler translates these 9384 options into `-L' options for the linker. They also apply to 9385 includes files in the preprocessor, because the compiler 9386 translates these options into `-isystem' options for the 9387 preprocessor. In this case, the compiler appends `include' to the 9388 prefix. 9389 9390 The run-time support file `libgcc.a' can also be searched for using 9391 the `-B' prefix, if needed. If it is not found there, the two 9392 standard prefixes above are tried, and that is all. The file is 9393 left out of the link if it is not found by those means. 9394 9395 Another way to specify a prefix much like the `-B' prefix is to use 9396 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 9397 Variables::. 9398 9399 As a special kludge, if the path provided by `-B' is 9400 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 9401 will be replaced by `[dir/]include'. This is to help with 9402 boot-strapping the compiler. 9403 9404`-specs=FILE' 9405 Process FILE after the compiler reads in the standard `specs' 9406 file, in order to override the defaults that the `gcc' driver 9407 program uses when determining what switches to pass to `cc1', 9408 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 9409 specified on the command line, and they are processed in order, 9410 from left to right. 9411 9412`--sysroot=DIR' 9413 Use DIR as the logical root directory for headers and libraries. 9414 For example, if the compiler would normally search for headers in 9415 `/usr/include' and libraries in `/usr/lib', it will instead search 9416 `DIR/usr/include' and `DIR/usr/lib'. 9417 9418 If you use both this option and the `-isysroot' option, then the 9419 `--sysroot' option will apply to libraries, but the `-isysroot' 9420 option will apply to header files. 9421 9422 The GNU linker (beginning with version 2.16) has the necessary 9423 support for this option. If your linker does not support this 9424 option, the header file aspect of `--sysroot' will still work, but 9425 the library aspect will not. 9426 9427`-I-' 9428 This option has been deprecated. Please use `-iquote' instead for 9429 `-I' directories before the `-I-' and remove the `-I-'. Any 9430 directories you specify with `-I' options before the `-I-' option 9431 are searched only for the case of `#include "FILE"'; they are not 9432 searched for `#include <FILE>'. 9433 9434 If additional directories are specified with `-I' options after 9435 the `-I-', these directories are searched for all `#include' 9436 directives. (Ordinarily _all_ `-I' directories are used this way.) 9437 9438 In addition, the `-I-' option inhibits the use of the current 9439 directory (where the current input file came from) as the first 9440 search directory for `#include "FILE"'. There is no way to 9441 override this effect of `-I-'. With `-I.' you can specify 9442 searching the directory which was current when the compiler was 9443 invoked. That is not exactly the same as what the preprocessor 9444 does by default, but it is often satisfactory. 9445 9446 `-I-' does not inhibit the use of the standard system directories 9447 for header files. Thus, `-I-' and `-nostdinc' are independent. 9448 9449 9450File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 9451 94523.15 Specifying subprocesses and the switches to pass to them 9453============================================================= 9454 9455`gcc' is a driver program. It performs its job by invoking a sequence 9456of other programs to do the work of compiling, assembling and linking. 9457GCC interprets its command-line parameters and uses these to deduce 9458which programs it should invoke, and which command-line options it 9459ought to place on their command lines. This behavior is controlled by 9460"spec strings". In most cases there is one spec string for each 9461program that GCC can invoke, but a few programs have multiple spec 9462strings to control their behavior. The spec strings built into GCC can 9463be overridden by using the `-specs=' command-line switch to specify a 9464spec file. 9465 9466 "Spec files" are plaintext files that are used to construct spec 9467strings. They consist of a sequence of directives separated by blank 9468lines. The type of directive is determined by the first non-whitespace 9469character on the line and it can be one of the following: 9470 9471`%COMMAND' 9472 Issues a COMMAND to the spec file processor. The commands that can 9473 appear here are: 9474 9475 `%include <FILE>' 9476 Search for FILE and insert its text at the current point in 9477 the specs file. 9478 9479 `%include_noerr <FILE>' 9480 Just like `%include', but do not generate an error message if 9481 the include file cannot be found. 9482 9483 `%rename OLD_NAME NEW_NAME' 9484 Rename the spec string OLD_NAME to NEW_NAME. 9485 9486 9487`*[SPEC_NAME]:' 9488 This tells the compiler to create, override or delete the named 9489 spec string. All lines after this directive up to the next 9490 directive or blank line are considered to be the text for the spec 9491 string. If this results in an empty string then the spec will be 9492 deleted. (Or, if the spec did not exist, then nothing will 9493 happened.) Otherwise, if the spec does not currently exist a new 9494 spec will be created. If the spec does exist then its contents 9495 will be overridden by the text of this directive, unless the first 9496 character of that text is the `+' character, in which case the 9497 text will be appended to the spec. 9498 9499`[SUFFIX]:' 9500 Creates a new `[SUFFIX] spec' pair. All lines after this directive 9501 and up to the next directive or blank line are considered to make 9502 up the spec string for the indicated suffix. When the compiler 9503 encounters an input file with the named suffix, it will processes 9504 the spec string in order to work out how to compile that file. 9505 For example: 9506 9507 .ZZ: 9508 z-compile -input %i 9509 9510 This says that any input file whose name ends in `.ZZ' should be 9511 passed to the program `z-compile', which should be invoked with the 9512 command-line switch `-input' and with the result of performing the 9513 `%i' substitution. (See below.) 9514 9515 As an alternative to providing a spec string, the text that 9516 follows a suffix directive can be one of the following: 9517 9518 `@LANGUAGE' 9519 This says that the suffix is an alias for a known LANGUAGE. 9520 This is similar to using the `-x' command-line switch to GCC 9521 to specify a language explicitly. For example: 9522 9523 .ZZ: 9524 @c++ 9525 9526 Says that .ZZ files are, in fact, C++ source files. 9527 9528 `#NAME' 9529 This causes an error messages saying: 9530 9531 NAME compiler not installed on this system. 9532 9533 GCC already has an extensive list of suffixes built into it. This 9534 directive will add an entry to the end of the list of suffixes, but 9535 since the list is searched from the end backwards, it is 9536 effectively possible to override earlier entries using this 9537 technique. 9538 9539 9540 GCC has the following spec strings built into it. Spec files can 9541override these strings or create their own. Note that individual 9542targets can also add their own spec strings to this list. 9543 9544 asm Options to pass to the assembler 9545 asm_final Options to pass to the assembler post-processor 9546 cpp Options to pass to the C preprocessor 9547 cc1 Options to pass to the C compiler 9548 cc1plus Options to pass to the C++ compiler 9549 endfile Object files to include at the end of the link 9550 link Options to pass to the linker 9551 lib Libraries to include on the command line to the linker 9552 libgcc Decides which GCC support library to pass to the linker 9553 linker Sets the name of the linker 9554 predefines Defines to be passed to the C preprocessor 9555 signed_char Defines to pass to CPP to say whether `char' is signed 9556 by default 9557 startfile Object files to include at the start of the link 9558 9559 Here is a small example of a spec file: 9560 9561 %rename lib old_lib 9562 9563 *lib: 9564 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 9565 9566 This example renames the spec called `lib' to `old_lib' and then 9567overrides the previous definition of `lib' with a new one. The new 9568definition adds in some extra command-line options before including the 9569text of the old definition. 9570 9571 "Spec strings" are a list of command-line options to be passed to their 9572corresponding program. In addition, the spec strings can contain 9573`%'-prefixed sequences to substitute variable text or to conditionally 9574insert text into the command line. Using these constructs it is 9575possible to generate quite complex command lines. 9576 9577 Here is a table of all defined `%'-sequences for spec strings. Note 9578that spaces are not generated automatically around the results of 9579expanding these sequences. Therefore you can concatenate them together 9580or combine them with constant text in a single argument. 9581 9582`%%' 9583 Substitute one `%' into the program name or argument. 9584 9585`%i' 9586 Substitute the name of the input file being processed. 9587 9588`%b' 9589 Substitute the basename of the input file being processed. This 9590 is the substring up to (and not including) the last period and not 9591 including the directory. 9592 9593`%B' 9594 This is the same as `%b', but include the file suffix (text after 9595 the last period). 9596 9597`%d' 9598 Marks the argument containing or following the `%d' as a temporary 9599 file name, so that that file will be deleted if GCC exits 9600 successfully. Unlike `%g', this contributes no text to the 9601 argument. 9602 9603`%gSUFFIX' 9604 Substitute a file name that has suffix SUFFIX and is chosen once 9605 per compilation, and mark the argument in the same way as `%d'. 9606 To reduce exposure to denial-of-service attacks, the file name is 9607 now chosen in a way that is hard to predict even when previously 9608 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 9609 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 9610 matches the regexp `[.A-Za-z]*' or the special string `%O', which 9611 is treated exactly as if `%O' had been preprocessed. Previously, 9612 `%g' was simply substituted with a file name chosen once per 9613 compilation, without regard to any appended suffix (which was 9614 therefore treated just like ordinary text), making such attacks 9615 more likely to succeed. 9616 9617`%uSUFFIX' 9618 Like `%g', but generates a new temporary file name even if 9619 `%uSUFFIX' was already seen. 9620 9621`%USUFFIX' 9622 Substitutes the last file name generated with `%uSUFFIX', 9623 generating a new one if there is no such last file name. In the 9624 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 9625 they don't share the same suffix _space_, so `%g.s ... %U.s ... 9626 %g.s ... %U.s' would involve the generation of two distinct file 9627 names, one for each `%g.s' and another for each `%U.s'. 9628 Previously, `%U' was simply substituted with a file name chosen 9629 for the previous `%u', without regard to any appended suffix. 9630 9631`%jSUFFIX' 9632 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 9633 writable, and if save-temps is off; otherwise, substitute the name 9634 of a temporary file, just like `%u'. This temporary file is not 9635 meant for communication between processes, but rather as a junk 9636 disposal mechanism. 9637 9638`%|SUFFIX' 9639`%mSUFFIX' 9640 Like `%g', except if `-pipe' is in effect. In that case `%|' 9641 substitutes a single dash and `%m' substitutes nothing at all. 9642 These are the two most common ways to instruct a program that it 9643 should read from standard input or write to standard output. If 9644 you need something more elaborate you can use an `%{pipe:`X'}' 9645 construct: see for example `f/lang-specs.h'. 9646 9647`%.SUFFIX' 9648 Substitutes .SUFFIX for the suffixes of a matched switch's args 9649 when it is subsequently output with `%*'. SUFFIX is terminated by 9650 the next space or %. 9651 9652`%w' 9653 Marks the argument containing or following the `%w' as the 9654 designated output file of this compilation. This puts the argument 9655 into the sequence of arguments that `%o' will substitute later. 9656 9657`%o' 9658 Substitutes the names of all the output files, with spaces 9659 automatically placed around them. You should write spaces around 9660 the `%o' as well or the results are undefined. `%o' is for use in 9661 the specs for running the linker. Input files whose names have no 9662 recognized suffix are not compiled at all, but they are included 9663 among the output files, so they will be linked. 9664 9665`%O' 9666 Substitutes the suffix for object files. Note that this is 9667 handled specially when it immediately follows `%g, %u, or %U', 9668 because of the need for those to form complete file names. The 9669 handling is such that `%O' is treated exactly as if it had already 9670 been substituted, except that `%g, %u, and %U' do not currently 9671 support additional SUFFIX characters following `%O' as they would 9672 following, for example, `.o'. 9673 9674`%p' 9675 Substitutes the standard macro predefinitions for the current 9676 target machine. Use this when running `cpp'. 9677 9678`%P' 9679 Like `%p', but puts `__' before and after the name of each 9680 predefined macro, except for macros that start with `__' or with 9681 `_L', where L is an uppercase letter. This is for ISO C. 9682 9683`%I' 9684 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 9685 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 9686 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 9687 necessary. 9688 9689`%s' 9690 Current argument is the name of a library or startup file of some 9691 sort. Search for that file in a standard list of directories and 9692 substitute the full name found. The current working directory is 9693 included in the list of directories scanned. 9694 9695`%T' 9696 Current argument is the name of a linker script. Search for that 9697 file in the current list of directories to scan for libraries. If 9698 the file is located insert a `--script' option into the command 9699 line followed by the full path name found. If the file is not 9700 found then generate an error message. Note: the current working 9701 directory is not searched. 9702 9703`%eSTR' 9704 Print STR as an error message. STR is terminated by a newline. 9705 Use this when inconsistent options are detected. 9706 9707`%(NAME)' 9708 Substitute the contents of spec string NAME at this point. 9709 9710`%[NAME]' 9711 Like `%(...)' but put `__' around `-D' arguments. 9712 9713`%x{OPTION}' 9714 Accumulate an option for `%X'. 9715 9716`%X' 9717 Output the accumulated linker options specified by `-Wl' or a `%x' 9718 spec string. 9719 9720`%Y' 9721 Output the accumulated assembler options specified by `-Wa'. 9722 9723`%Z' 9724 Output the accumulated preprocessor options specified by `-Wp'. 9725 9726`%a' 9727 Process the `asm' spec. This is used to compute the switches to 9728 be passed to the assembler. 9729 9730`%A' 9731 Process the `asm_final' spec. This is a spec string for passing 9732 switches to an assembler post-processor, if such a program is 9733 needed. 9734 9735`%l' 9736 Process the `link' spec. This is the spec for computing the 9737 command line passed to the linker. Typically it will make use of 9738 the `%L %G %S %D and %E' sequences. 9739 9740`%D' 9741 Dump out a `-L' option for each directory that GCC believes might 9742 contain startup files. If the target supports multilibs then the 9743 current multilib directory will be prepended to each of these 9744 paths. 9745 9746`%L' 9747 Process the `lib' spec. This is a spec string for deciding which 9748 libraries should be included on the command line to the linker. 9749 9750`%G' 9751 Process the `libgcc' spec. This is a spec string for deciding 9752 which GCC support library should be included on the command line 9753 to the linker. 9754 9755`%S' 9756 Process the `startfile' spec. This is a spec for deciding which 9757 object files should be the first ones passed to the linker. 9758 Typically this might be a file named `crt0.o'. 9759 9760`%E' 9761 Process the `endfile' spec. This is a spec string that specifies 9762 the last object files that will be passed to the linker. 9763 9764`%C' 9765 Process the `cpp' spec. This is used to construct the arguments 9766 to be passed to the C preprocessor. 9767 9768`%1' 9769 Process the `cc1' spec. This is used to construct the options to 9770 be passed to the actual C compiler (`cc1'). 9771 9772`%2' 9773 Process the `cc1plus' spec. This is used to construct the options 9774 to be passed to the actual C++ compiler (`cc1plus'). 9775 9776`%*' 9777 Substitute the variable part of a matched option. See below. 9778 Note that each comma in the substituted string is replaced by a 9779 single space. 9780 9781`%<`S'' 9782 Remove all occurrences of `-S' from the command line. Note--this 9783 command is position dependent. `%' commands in the spec string 9784 before this one will see `-S', `%' commands in the spec string 9785 after this one will not. 9786 9787`%:FUNCTION(ARGS)' 9788 Call the named function FUNCTION, passing it ARGS. ARGS is first 9789 processed as a nested spec string, then split into an argument 9790 vector in the usual fashion. The function returns a string which 9791 is processed as if it had appeared literally as part of the 9792 current spec. 9793 9794 The following built-in spec functions are provided: 9795 9796 ``getenv'' 9797 The `getenv' spec function takes two arguments: an environment 9798 variable name and a string. If the environment variable is 9799 not defined, a fatal error is issued. Otherwise, the return 9800 value is the value of the environment variable concatenated 9801 with the string. For example, if `TOPDIR' is defined as 9802 `/path/to/top', then: 9803 9804 %:getenv(TOPDIR /include) 9805 9806 expands to `/path/to/top/include'. 9807 9808 ``if-exists'' 9809 The `if-exists' spec function takes one argument, an absolute 9810 pathname to a file. If the file exists, `if-exists' returns 9811 the pathname. Here is a small example of its usage: 9812 9813 *startfile: 9814 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 9815 9816 ``if-exists-else'' 9817 The `if-exists-else' spec function is similar to the 9818 `if-exists' spec function, except that it takes two 9819 arguments. The first argument is an absolute pathname to a 9820 file. If the file exists, `if-exists-else' returns the 9821 pathname. If it does not exist, it returns the second 9822 argument. This way, `if-exists-else' can be used to select 9823 one file or another, based on the existence of the first. 9824 Here is a small example of its usage: 9825 9826 *startfile: 9827 crt0%O%s %:if-exists(crti%O%s) \ 9828 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 9829 9830 ``replace-outfile'' 9831 The `replace-outfile' spec function takes two arguments. It 9832 looks for the first argument in the outfiles array and 9833 replaces it with the second argument. Here is a small 9834 example of its usage: 9835 9836 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 9837 9838 ``remove-outfile'' 9839 The `remove-outfile' spec function takes one argument. It 9840 looks for the first argument in the outfiles array and 9841 removes it. Here is a small example its usage: 9842 9843 %:remove-outfile(-lm) 9844 9845 ``pass-through-libs'' 9846 The `pass-through-libs' spec function takes any number of 9847 arguments. It finds any `-l' options and any non-options 9848 ending in ".a" (which it assumes are the names of linker 9849 input library archive files) and returns a result containing 9850 all the found arguments each prepended by 9851 `-plugin-opt=-pass-through=' and joined by spaces. This list 9852 is intended to be passed to the LTO linker plugin. 9853 9854 %:pass-through-libs(%G %L %G) 9855 9856 ``print-asm-header'' 9857 The `print-asm-header' function takes no arguments and simply 9858 prints a banner like: 9859 9860 Assembler options 9861 ================= 9862 9863 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 9864 9865 It is used to separate compiler options from assembler options 9866 in the `--target-help' output. 9867 9868`%{`S'}' 9869 Substitutes the `-S' switch, if that switch was given to GCC. If 9870 that switch was not specified, this substitutes nothing. Note that 9871 the leading dash is omitted when specifying this option, and it is 9872 automatically inserted if the substitution is performed. Thus the 9873 spec string `%{foo}' would match the command-line option `-foo' 9874 and would output the command line option `-foo'. 9875 9876`%W{`S'}' 9877 Like %{`S'} but mark last argument supplied within as a file to be 9878 deleted on failure. 9879 9880`%{`S'*}' 9881 Substitutes all the switches specified to GCC whose names start 9882 with `-S', but which also take an argument. This is used for 9883 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 9884 being one switch whose names starts with `o'. %{o*} would 9885 substitute this text, including the space. Thus two arguments 9886 would be generated. 9887 9888`%{`S'*&`T'*}' 9889 Like %{`S'*}, but preserve order of `S' and `T' options (the order 9890 of `S' and `T' in the spec is not significant). There can be any 9891 number of ampersand-separated variables; for each the wild card is 9892 optional. Useful for CPP as `%{D*&U*&A*}'. 9893 9894`%{`S':`X'}' 9895 Substitutes `X', if the `-S' switch was given to GCC. 9896 9897`%{!`S':`X'}' 9898 Substitutes `X', if the `-S' switch was _not_ given to GCC. 9899 9900`%{`S'*:`X'}' 9901 Substitutes `X' if one or more switches whose names start with 9902 `-S' are specified to GCC. Normally `X' is substituted only once, 9903 no matter how many such switches appeared. However, if `%*' 9904 appears somewhere in `X', then `X' will be substituted once for 9905 each matching switch, with the `%*' replaced by the part of that 9906 switch that matched the `*'. 9907 9908`%{.`S':`X'}' 9909 Substitutes `X', if processing a file with suffix `S'. 9910 9911`%{!.`S':`X'}' 9912 Substitutes `X', if _not_ processing a file with suffix `S'. 9913 9914`%{,`S':`X'}' 9915 Substitutes `X', if processing a file for language `S'. 9916 9917`%{!,`S':`X'}' 9918 Substitutes `X', if not processing a file for language `S'. 9919 9920`%{`S'|`P':`X'}' 9921 Substitutes `X' if either `-S' or `-P' was given to GCC. This may 9922 be combined with `!', `.', `,', and `*' sequences as well, 9923 although they have a stronger binding than the `|'. If `%*' 9924 appears in `X', all of the alternatives must be starred, and only 9925 the first matching alternative is substituted. 9926 9927 For example, a spec string like this: 9928 9929 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 9930 9931 will output the following command-line options from the following 9932 input command-line options: 9933 9934 fred.c -foo -baz 9935 jim.d -bar -boggle 9936 -d fred.c -foo -baz -boggle 9937 -d jim.d -bar -baz -boggle 9938 9939`%{S:X; T:Y; :D}' 9940 If `S' was given to GCC, substitutes `X'; else if `T' was given to 9941 GCC, substitutes `Y'; else substitutes `D'. There can be as many 9942 clauses as you need. This may be combined with `.', `,', `!', 9943 `|', and `*' as needed. 9944 9945 9946 The conditional text `X' in a %{`S':`X'} or similar construct may 9947contain other nested `%' constructs or spaces, or even newlines. They 9948are processed as usual, as described above. Trailing white space in 9949`X' is ignored. White space may also appear anywhere on the left side 9950of the colon in these constructs, except between `.' or `*' and the 9951corresponding word. 9952 9953 The `-O', `-f', `-m', and `-W' switches are handled specifically in 9954these constructs. If another value of `-O' or the negated form of a 9955`-f', `-m', or `-W' switch is found later in the command line, the 9956earlier switch value is ignored, except with {`S'*} where `S' is just 9957one letter, which passes all matching options. 9958 9959 The character `|' at the beginning of the predicate text is used to 9960indicate that a command should be piped to the following command, but 9961only if `-pipe' is specified. 9962 9963 It is built into GCC which switches take arguments and which do not. 9964(You might think it would be useful to generalize this to allow each 9965compiler's spec to say which switches take arguments. But this cannot 9966be done in a consistent fashion. GCC cannot even decide which input 9967files have been specified without knowing which switches take arguments, 9968and it must know which input files to compile in order to tell which 9969compilers to run). 9970 9971 GCC also knows implicitly that arguments starting in `-l' are to be 9972treated as compiler output files, and passed to the linker in their 9973proper position among the other output files. 9974 9975 9976File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 9977 99783.16 Specifying Target Machine and Compiler Version 9979=================================================== 9980 9981The usual way to run GCC is to run the executable called `gcc', or 9982`MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a 9983version other than the one that was installed last. 9984 9985 9986File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 9987 99883.17 Hardware Models and Configurations 9989======================================= 9990 9991Each target machine types can have its own special options, starting 9992with `-m', to choose among various hardware models or 9993configurations--for example, 68010 vs 68020, floating coprocessor or 9994none. A single installed version of the compiler can compile for any 9995model or configuration, according to the options specified. 9996 9997 Some configurations of the compiler also support additional special 9998options, usually for compatibility with other compilers on the same 9999platform. 10000 10001* Menu: 10002 10003* ARC Options:: 10004* ARM Options:: 10005* AVR Options:: 10006* Blackfin Options:: 10007* CRIS Options:: 10008* CRX Options:: 10009* Darwin Options:: 10010* DEC Alpha Options:: 10011* DEC Alpha/VMS Options:: 10012* FR30 Options:: 10013* FRV Options:: 10014* GNU/Linux Options:: 10015* H8/300 Options:: 10016* HPPA Options:: 10017* i386 and x86-64 Options:: 10018* i386 and x86-64 Windows Options:: 10019* IA-64 Options:: 10020* IA-64/VMS Options:: 10021* LM32 Options:: 10022* M32C Options:: 10023* M32R/D Options:: 10024* M680x0 Options:: 10025* M68hc1x Options:: 10026* MCore Options:: 10027* MeP Options:: 10028* MicroBlaze Options:: 10029* MIPS Options:: 10030* MMIX Options:: 10031* MN10300 Options:: 10032* PDP-11 Options:: 10033* picoChip Options:: 10034* PowerPC Options:: 10035* RS/6000 and PowerPC Options:: 10036* RX Options:: 10037* S/390 and zSeries Options:: 10038* Score Options:: 10039* SH Options:: 10040* Solaris 2 Options:: 10041* SPARC Options:: 10042* SPU Options:: 10043* System V Options:: 10044* V850 Options:: 10045* VAX Options:: 10046* VxWorks Options:: 10047* x86-64 Options:: 10048* Xstormy16 Options:: 10049* Xtensa Options:: 10050* zSeries Options:: 10051 10052 10053File: gcc.info, Node: ARC Options, Next: ARM Options, Up: Submodel Options 10054 100553.17.1 ARC Options 10056------------------ 10057 10058These options are defined for ARC implementations: 10059 10060`-EL' 10061 Compile code for little endian mode. This is the default. 10062 10063`-EB' 10064 Compile code for big endian mode. 10065 10066`-mmangle-cpu' 10067 Prepend the name of the CPU to all public symbol names. In 10068 multiple-processor systems, there are many ARC variants with 10069 different instruction and register set characteristics. This flag 10070 prevents code compiled for one CPU to be linked with code compiled 10071 for another. No facility exists for handling variants that are 10072 "almost identical". This is an all or nothing option. 10073 10074`-mcpu=CPU' 10075 Compile code for ARC variant CPU. Which variants are supported 10076 depend on the configuration. All variants support `-mcpu=base', 10077 this is the default. 10078 10079`-mtext=TEXT-SECTION' 10080`-mdata=DATA-SECTION' 10081`-mrodata=READONLY-DATA-SECTION' 10082 Put functions, data, and readonly data in TEXT-SECTION, 10083 DATA-SECTION, and READONLY-DATA-SECTION respectively by default. 10084 This can be overridden with the `section' attribute. *Note 10085 Variable Attributes::. 10086 10087 10088 10089File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 10090 100913.17.2 ARM Options 10092------------------ 10093 10094These `-m' options are defined for Advanced RISC Machines (ARM) 10095architectures: 10096 10097`-mabi=NAME' 10098 Generate code for the specified ABI. Permissible values are: 10099 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 10100 10101`-mapcs-frame' 10102 Generate a stack frame that is compliant with the ARM Procedure 10103 Call Standard for all functions, even if this is not strictly 10104 necessary for correct execution of the code. Specifying 10105 `-fomit-frame-pointer' with this option will cause the stack 10106 frames not to be generated for leaf functions. The default is 10107 `-mno-apcs-frame'. 10108 10109`-mapcs' 10110 This is a synonym for `-mapcs-frame'. 10111 10112`-mthumb-interwork' 10113 Generate code which supports calling between the ARM and Thumb 10114 instruction sets. Without this option the two instruction sets 10115 cannot be reliably used inside one program. The default is 10116 `-mno-thumb-interwork', since slightly larger code is generated 10117 when `-mthumb-interwork' is specified. 10118 10119`-mno-sched-prolog' 10120 Prevent the reordering of instructions in the function prolog, or 10121 the merging of those instruction with the instructions in the 10122 function's body. This means that all functions will start with a 10123 recognizable set of instructions (or in fact one of a choice from 10124 a small set of different function prologues), and this information 10125 can be used to locate the start if functions inside an executable 10126 piece of code. The default is `-msched-prolog'. 10127 10128`-mfloat-abi=NAME' 10129 Specifies which floating-point ABI to use. Permissible values 10130 are: `soft', `softfp' and `hard'. 10131 10132 Specifying `soft' causes GCC to generate output containing library 10133 calls for floating-point operations. `softfp' allows the 10134 generation of code using hardware floating-point instructions, but 10135 still uses the soft-float calling conventions. `hard' allows 10136 generation of floating-point instructions and uses FPU-specific 10137 calling conventions. 10138 10139 The default depends on the specific target configuration. Note 10140 that the hard-float and soft-float ABIs are not link-compatible; 10141 you must compile your entire program with the same ABI, and link 10142 with a compatible set of libraries. 10143 10144`-mhard-float' 10145 Equivalent to `-mfloat-abi=hard'. 10146 10147`-msoft-float' 10148 Equivalent to `-mfloat-abi=soft'. 10149 10150`-mlittle-endian' 10151 Generate code for a processor running in little-endian mode. This 10152 is the default for all standard configurations. 10153 10154`-mbig-endian' 10155 Generate code for a processor running in big-endian mode; the 10156 default is to compile code for a little-endian processor. 10157 10158`-mwords-little-endian' 10159 This option only applies when generating code for big-endian 10160 processors. Generate code for a little-endian word order but a 10161 big-endian byte order. That is, a byte order of the form 10162 `32107654'. Note: this option should only be used if you require 10163 compatibility with code for big-endian ARM processors generated by 10164 versions of the compiler prior to 2.8. 10165 10166`-mcpu=NAME' 10167 This specifies the name of the target ARM processor. GCC uses 10168 this name to determine what kind of instructions it can emit when 10169 generating assembly code. Permissible names are: `arm2', `arm250', 10170 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 10171 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 10172 `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500', 10173 `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', 10174 `arm740t', `strongarm', `strongarm110', `strongarm1100', 10175 `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920', 10176 `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', 10177 `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', 10178 `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', 10179 `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s', 10180 `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `cortex-a5', 10181 `cortex-a8', `cortex-a9', `cortex-a15', `cortex-r4', `cortex-r4f', 10182 `cortex-r5', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0', 10183 `xscale', `iwmmxt', `iwmmxt2', `ep9312'. 10184 10185`-mtune=NAME' 10186 This option is very similar to the `-mcpu=' option, except that 10187 instead of specifying the actual target processor type, and hence 10188 restricting which instructions can be used, it specifies that GCC 10189 should tune the performance of the code as if the target were of 10190 the type specified in this option, but still choosing the 10191 instructions that it will generate based on the CPU specified by a 10192 `-mcpu=' option. For some ARM implementations better performance 10193 can be obtained by using this option. 10194 10195`-march=NAME' 10196 This specifies the name of the target ARM architecture. GCC uses 10197 this name to determine what kind of instructions it can emit when 10198 generating assembly code. This option can be used in conjunction 10199 with or instead of the `-mcpu=' option. Permissible names are: 10200 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 10201 `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2', 10202 `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r', 10203 `armv7-m', `iwmmxt', `iwmmxt2', `ep9312'. 10204 10205`-mfpu=NAME' 10206`-mfpe=NUMBER' 10207`-mfp=NUMBER' 10208 This specifies what floating point hardware (or hardware 10209 emulation) is available on the target. Permissible names are: 10210 `fpa', `fpe2', `fpe3', `maverick', `vfp', `vfpv3', `vfpv3-fp16', 10211 `vfpv3-d16', `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-fp16', `neon', 10212 `neon-fp16', `vfpv4', `vfpv4-d16', `fpv4-sp-d16' and `neon-vfpv4'. 10213 `-mfp' and `-mfpe' are synonyms for `-mfpu'=`fpe'NUMBER, for 10214 compatibility with older versions of GCC. 10215 10216 If `-msoft-float' is specified this specifies the format of 10217 floating point values. 10218 10219 If the selected floating-point hardware includes the NEON extension 10220 (e.g. `-mfpu'=`neon'), note that floating-point operations will 10221 not be used by GCC's auto-vectorization pass unless 10222 `-funsafe-math-optimizations' is also specified. This is because 10223 NEON hardware does not fully implement the IEEE 754 standard for 10224 floating-point arithmetic (in particular denormal values are 10225 treated as zero), so the use of NEON instructions may lead to a 10226 loss of precision. 10227 10228`-mfp16-format=NAME' 10229 Specify the format of the `__fp16' half-precision floating-point 10230 type. Permissible names are `none', `ieee', and `alternative'; 10231 the default is `none', in which case the `__fp16' type is not 10232 defined. *Note Half-Precision::, for more information. 10233 10234`-mstructure-size-boundary=N' 10235 The size of all structures and unions will be rounded up to a 10236 multiple of the number of bits set by this option. Permissible 10237 values are 8, 32 and 64. The default value varies for different 10238 toolchains. For the COFF targeted toolchain the default value is 10239 8. A value of 64 is only allowed if the underlying ABI supports 10240 it. 10241 10242 Specifying the larger number can produce faster, more efficient 10243 code, but can also increase the size of the program. Different 10244 values are potentially incompatible. Code compiled with one value 10245 cannot necessarily expect to work with code or libraries compiled 10246 with another value, if they exchange information using structures 10247 or unions. 10248 10249`-mabort-on-noreturn' 10250 Generate a call to the function `abort' at the end of a `noreturn' 10251 function. It will be executed if the function tries to return. 10252 10253`-mlong-calls' 10254`-mno-long-calls' 10255 Tells the compiler to perform function calls by first loading the 10256 address of the function into a register and then performing a 10257 subroutine call on this register. This switch is needed if the 10258 target function will lie outside of the 64 megabyte addressing 10259 range of the offset based version of subroutine call instruction. 10260 10261 Even if this switch is enabled, not all function calls will be 10262 turned into long calls. The heuristic is that static functions, 10263 functions which have the `short-call' attribute, functions that 10264 are inside the scope of a `#pragma no_long_calls' directive and 10265 functions whose definitions have already been compiled within the 10266 current compilation unit, will not be turned into long calls. The 10267 exception to this rule is that weak function definitions, 10268 functions with the `long-call' attribute or the `section' 10269 attribute, and functions that are within the scope of a `#pragma 10270 long_calls' directive, will always be turned into long calls. 10271 10272 This feature is not enabled by default. Specifying 10273 `-mno-long-calls' will restore the default behavior, as will 10274 placing the function calls within the scope of a `#pragma 10275 long_calls_off' directive. Note these switches have no effect on 10276 how the compiler generates code to handle function calls via 10277 function pointers. 10278 10279`-msingle-pic-base' 10280 Treat the register used for PIC addressing as read-only, rather 10281 than loading it in the prologue for each function. The run-time 10282 system is responsible for initializing this register with an 10283 appropriate value before execution begins. 10284 10285`-mpic-register=REG' 10286 Specify the register to be used for PIC addressing. The default 10287 is R10 unless stack-checking is enabled, when R9 is used. 10288 10289`-mcirrus-fix-invalid-insns' 10290 Insert NOPs into the instruction stream to in order to work around 10291 problems with invalid Maverick instruction combinations. This 10292 option is only valid if the `-mcpu=ep9312' option has been used to 10293 enable generation of instructions for the Cirrus Maverick floating 10294 point co-processor. This option is not enabled by default, since 10295 the problem is only present in older Maverick implementations. 10296 The default can be re-enabled by use of the 10297 `-mno-cirrus-fix-invalid-insns' switch. 10298 10299`-mpoke-function-name' 10300 Write the name of each function into the text section, directly 10301 preceding the function prologue. The generated code is similar to 10302 this: 10303 10304 t0 10305 .ascii "arm_poke_function_name", 0 10306 .align 10307 t1 10308 .word 0xff000000 + (t1 - t0) 10309 arm_poke_function_name 10310 mov ip, sp 10311 stmfd sp!, {fp, ip, lr, pc} 10312 sub fp, ip, #4 10313 10314 When performing a stack backtrace, code can inspect the value of 10315 `pc' stored at `fp + 0'. If the trace function then looks at 10316 location `pc - 12' and the top 8 bits are set, then we know that 10317 there is a function name embedded immediately preceding this 10318 location and has length `((pc[-3]) & 0xff000000)'. 10319 10320`-mthumb' 10321 Generate code for the Thumb instruction set. The default is to 10322 use the 32-bit ARM instruction set. This option automatically 10323 enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2 10324 instructions based on the `-mcpu=NAME' and `-march=NAME' options. 10325 This option is not passed to the assembler. If you want to force 10326 assembler files to be interpreted as Thumb code, either add a 10327 `.thumb' directive to the source or pass the `-mthumb' option 10328 directly to the assembler by prefixing it with `-Wa'. 10329 10330`-mtpcs-frame' 10331 Generate a stack frame that is compliant with the Thumb Procedure 10332 Call Standard for all non-leaf functions. (A leaf function is one 10333 that does not call any other functions.) The default is 10334 `-mno-tpcs-frame'. 10335 10336`-mtpcs-leaf-frame' 10337 Generate a stack frame that is compliant with the Thumb Procedure 10338 Call Standard for all leaf functions. (A leaf function is one 10339 that does not call any other functions.) The default is 10340 `-mno-apcs-leaf-frame'. 10341 10342`-mcallee-super-interworking' 10343 Gives all externally visible functions in the file being compiled 10344 an ARM instruction set header which switches to Thumb mode before 10345 executing the rest of the function. This allows these functions 10346 to be called from non-interworking code. This option is not valid 10347 in AAPCS configurations because interworking is enabled by default. 10348 10349`-mcaller-super-interworking' 10350 Allows calls via function pointers (including virtual functions) to 10351 execute correctly regardless of whether the target code has been 10352 compiled for interworking or not. There is a small overhead in 10353 the cost of executing a function pointer if this option is 10354 enabled. This option is not valid in AAPCS configurations because 10355 interworking is enabled by default. 10356 10357`-mtp=NAME' 10358 Specify the access model for the thread local storage pointer. 10359 The valid models are `soft', which generates calls to 10360 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 10361 `cp15' directly (supported in the arm6k architecture), and `auto', 10362 which uses the best available method for the selected processor. 10363 The default setting is `auto'. 10364 10365`-mtls-dialect=DIALECT' 10366 Specify the dialect to use for accessing thread local storage. Two 10367 dialects are supported - `gnu' and `gnu2'. The `gnu' dialect 10368 selects the original GNU scheme for supporting local and global 10369 dynamic TLS models. The `gnu2' dialect selects the GNU descriptor 10370 scheme, which provides better performance for shared libraries. 10371 The GNU descriptor scheme is compatible with the original scheme, 10372 but does require new assembler, linker and library support. 10373 Initial and local exec TLS models are unaffected by this option 10374 and always use the original scheme. 10375 10376`-mword-relocations' 10377 Only generate absolute relocations on word sized values (i.e. 10378 R_ARM_ABS32). This is enabled by default on targets (uClinux, 10379 SymbianOS) where the runtime loader imposes this restriction, and 10380 when `-fpic' or `-fPIC' is specified. 10381 10382`-mfix-cortex-m3-ldrd' 10383 Some Cortex-M3 cores can cause data corruption when `ldrd' 10384 instructions with overlapping destination and base registers are 10385 used. This option avoids generating these instructions. This 10386 option is enabled by default when `-mcpu=cortex-m3' is specified. 10387 10388 10389 10390File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 10391 103923.17.3 AVR Options 10393------------------ 10394 10395These options are defined for AVR implementations: 10396 10397`-mmcu=MCU' 10398 Specify ATMEL AVR instruction set or MCU type. 10399 10400 Instruction set avr1 is for the minimal AVR core, not supported by 10401 the C compiler, only for assembler programs (MCU types: at90s1200, 10402 attiny10, attiny11, attiny12, attiny15, attiny28). 10403 10404 Instruction set avr2 (default) is for the classic AVR core with up 10405 to 8K program memory space (MCU types: at90s2313, at90s2323, 10406 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, 10407 at90s8515, at90c8534, at90s8535). 10408 10409 Instruction set avr3 is for the classic AVR core with up to 128K 10410 program memory space (MCU types: atmega103, atmega603, at43usb320, 10411 at76c711). 10412 10413 Instruction set avr4 is for the enhanced AVR core with up to 8K 10414 program memory space (MCU types: atmega8, atmega83, atmega85). 10415 10416 Instruction set avr5 is for the enhanced AVR core with up to 128K 10417 program memory space (MCU types: atmega16, atmega161, atmega163, 10418 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k). 10419 10420`-mno-interrupts' 10421 Generated code is not compatible with hardware interrupts. Code 10422 size will be smaller. 10423 10424`-mcall-prologues' 10425 Functions prologues/epilogues expanded as call to appropriate 10426 subroutines. Code size will be smaller. 10427 10428`-mtiny-stack' 10429 Change only the low 8 bits of the stack pointer. 10430 10431`-mint8' 10432 Assume int to be 8 bit integer. This affects the sizes of all 10433 types: A char will be 1 byte, an int will be 1 byte, a long will 10434 be 2 bytes and long long will be 4 bytes. Please note that this 10435 option does not comply to the C standards, but it will provide you 10436 with smaller code size. 10437 10438 10439File: gcc.info, Node: Blackfin Options, Next: CRIS Options, Prev: AVR Options, Up: Submodel Options 10440 104413.17.4 Blackfin Options 10442----------------------- 10443 10444`-mcpu=CPU[-SIREVISION]' 10445 Specifies the name of the target Blackfin processor. Currently, 10446 CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522', 10447 `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532', 10448 `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542', 10449 `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m', 10450 `bf548m', `bf549m', `bf561'. The optional SIREVISION specifies 10451 the silicon revision of the target Blackfin processor. Any 10452 workarounds available for the targeted silicon revision will be 10453 enabled. If SIREVISION is `none', no workarounds are enabled. If 10454 SIREVISION is `any', all workarounds for the targeted processor 10455 will be enabled. The `__SILICON_REVISION__' macro is defined to 10456 two hexadecimal digits representing the major and minor numbers in 10457 the silicon revision. If SIREVISION is `none', the 10458 `__SILICON_REVISION__' is not defined. If SIREVISION is `any', the 10459 `__SILICON_REVISION__' is defined to be `0xffff'. If this 10460 optional SIREVISION is not used, GCC assumes the latest known 10461 silicon revision of the targeted Blackfin processor. 10462 10463 Support for `bf561' is incomplete. For `bf561', Only the 10464 processor macro is defined. Without this option, `bf532' is used 10465 as the processor by default. The corresponding predefined 10466 processor macros for CPU is to be defined. And for `bfin-elf' 10467 toolchain, this causes the hardware BSP provided by libgloss to be 10468 linked in if `-msim' is not given. 10469 10470`-msim' 10471 Specifies that the program will be run on the simulator. This 10472 causes the simulator BSP provided by libgloss to be linked in. 10473 This option has effect only for `bfin-elf' toolchain. Certain 10474 other options, such as `-mid-shared-library' and `-mfdpic', imply 10475 `-msim'. 10476 10477`-momit-leaf-frame-pointer' 10478 Don't keep the frame pointer in a register for leaf functions. 10479 This avoids the instructions to save, set up and restore frame 10480 pointers and makes an extra register available in leaf functions. 10481 The option `-fomit-frame-pointer' removes the frame pointer for 10482 all functions which might make debugging harder. 10483 10484`-mspecld-anomaly' 10485 When enabled, the compiler will ensure that the generated code 10486 does not contain speculative loads after jump instructions. If 10487 this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined. 10488 10489`-mno-specld-anomaly' 10490 Don't generate extra code to prevent speculative loads from 10491 occurring. 10492 10493`-mcsync-anomaly' 10494 When enabled, the compiler will ensure that the generated code 10495 does not contain CSYNC or SSYNC instructions too soon after 10496 conditional branches. If this option is used, 10497 `__WORKAROUND_SPECULATIVE_SYNCS' is defined. 10498 10499`-mno-csync-anomaly' 10500 Don't generate extra code to prevent CSYNC or SSYNC instructions 10501 from occurring too soon after a conditional branch. 10502 10503`-mlow-64k' 10504 When enabled, the compiler is free to take advantage of the 10505 knowledge that the entire program fits into the low 64k of memory. 10506 10507`-mno-low-64k' 10508 Assume that the program is arbitrarily large. This is the default. 10509 10510`-mstack-check-l1' 10511 Do stack checking using information placed into L1 scratchpad 10512 memory by the uClinux kernel. 10513 10514`-mid-shared-library' 10515 Generate code that supports shared libraries via the library ID 10516 method. This allows for execute in place and shared libraries in 10517 an environment without virtual memory management. This option 10518 implies `-fPIC'. With a `bfin-elf' target, this option implies 10519 `-msim'. 10520 10521`-mno-id-shared-library' 10522 Generate code that doesn't assume ID based shared libraries are 10523 being used. This is the default. 10524 10525`-mleaf-id-shared-library' 10526 Generate code that supports shared libraries via the library ID 10527 method, but assumes that this library or executable won't link 10528 against any other ID shared libraries. That allows the compiler 10529 to use faster code for jumps and calls. 10530 10531`-mno-leaf-id-shared-library' 10532 Do not assume that the code being compiled won't link against any 10533 ID shared libraries. Slower code will be generated for jump and 10534 call insns. 10535 10536`-mshared-library-id=n' 10537 Specified the identification number of the ID based shared library 10538 being compiled. Specifying a value of 0 will generate more 10539 compact code, specifying other values will force the allocation of 10540 that number to the current library but is no more space or time 10541 efficient than omitting this option. 10542 10543`-msep-data' 10544 Generate code that allows the data segment to be located in a 10545 different area of memory from the text segment. This allows for 10546 execute in place in an environment without virtual memory 10547 management by eliminating relocations against the text section. 10548 10549`-mno-sep-data' 10550 Generate code that assumes that the data segment follows the text 10551 segment. This is the default. 10552 10553`-mlong-calls' 10554`-mno-long-calls' 10555 Tells the compiler to perform function calls by first loading the 10556 address of the function into a register and then performing a 10557 subroutine call on this register. This switch is needed if the 10558 target function will lie outside of the 24 bit addressing range of 10559 the offset based version of subroutine call instruction. 10560 10561 This feature is not enabled by default. Specifying 10562 `-mno-long-calls' will restore the default behavior. Note these 10563 switches have no effect on how the compiler generates code to 10564 handle function calls via function pointers. 10565 10566`-mfast-fp' 10567 Link with the fast floating-point library. This library relaxes 10568 some of the IEEE floating-point standard's rules for checking 10569 inputs against Not-a-Number (NAN), in the interest of performance. 10570 10571`-minline-plt' 10572 Enable inlining of PLT entries in function calls to functions that 10573 are not known to bind locally. It has no effect without `-mfdpic'. 10574 10575`-mmulticore' 10576 Build standalone application for multicore Blackfin processor. 10577 Proper start files and link scripts will be used to support 10578 multicore. This option defines `__BFIN_MULTICORE'. It can only be 10579 used with `-mcpu=bf561[-SIREVISION]'. It can be used with 10580 `-mcorea' or `-mcoreb'. If it's used without `-mcorea' or 10581 `-mcoreb', single application/dual core programming model is used. 10582 In this model, the main function of Core B should be named as 10583 coreb_main. If it's used with `-mcorea' or `-mcoreb', one 10584 application per core programming model is used. If this option is 10585 not used, single core application programming model is used. 10586 10587`-mcorea' 10588 Build standalone application for Core A of BF561 when using one 10589 application per core programming model. Proper start files and 10590 link scripts will be used to support Core A. This option defines 10591 `__BFIN_COREA'. It must be used with `-mmulticore'. 10592 10593`-mcoreb' 10594 Build standalone application for Core B of BF561 when using one 10595 application per core programming model. Proper start files and 10596 link scripts will be used to support Core B. This option defines 10597 `__BFIN_COREB'. When this option is used, coreb_main should be 10598 used instead of main. It must be used with `-mmulticore'. 10599 10600`-msdram' 10601 Build standalone application for SDRAM. Proper start files and 10602 link scripts will be used to put the application into SDRAM. 10603 Loader should initialize SDRAM before loading the application into 10604 SDRAM. This option defines `__BFIN_SDRAM'. 10605 10606`-micplb' 10607 Assume that ICPLBs are enabled at runtime. This has an effect on 10608 certain anomaly workarounds. For Linux targets, the default is to 10609 assume ICPLBs are enabled; for standalone applications the default 10610 is off. 10611 10612 10613File: gcc.info, Node: CRIS Options, Next: CRX Options, Prev: Blackfin Options, Up: Submodel Options 10614 106153.17.5 CRIS Options 10616------------------- 10617 10618These options are defined specifically for the CRIS ports. 10619 10620`-march=ARCHITECTURE-TYPE' 10621`-mcpu=ARCHITECTURE-TYPE' 10622 Generate code for the specified architecture. The choices for 10623 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 10624 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 10625 cris-axis-linux-gnu, where the default is `v10'. 10626 10627`-mtune=ARCHITECTURE-TYPE' 10628 Tune to ARCHITECTURE-TYPE everything applicable about the generated 10629 code, except for the ABI and the set of available instructions. 10630 The choices for ARCHITECTURE-TYPE are the same as for 10631 `-march=ARCHITECTURE-TYPE'. 10632 10633`-mmax-stack-frame=N' 10634 Warn when the stack frame of a function exceeds N bytes. 10635 10636`-metrax4' 10637`-metrax100' 10638 The options `-metrax4' and `-metrax100' are synonyms for 10639 `-march=v3' and `-march=v8' respectively. 10640 10641`-mmul-bug-workaround' 10642`-mno-mul-bug-workaround' 10643 Work around a bug in the `muls' and `mulu' instructions for CPU 10644 models where it applies. This option is active by default. 10645 10646`-mpdebug' 10647 Enable CRIS-specific verbose debug-related information in the 10648 assembly code. This option also has the effect to turn off the 10649 `#NO_APP' formatted-code indicator to the assembler at the 10650 beginning of the assembly file. 10651 10652`-mcc-init' 10653 Do not use condition-code results from previous instruction; 10654 always emit compare and test instructions before use of condition 10655 codes. 10656 10657`-mno-side-effects' 10658 Do not emit instructions with side-effects in addressing modes 10659 other than post-increment. 10660 10661`-mstack-align' 10662`-mno-stack-align' 10663`-mdata-align' 10664`-mno-data-align' 10665`-mconst-align' 10666`-mno-const-align' 10667 These options (no-options) arranges (eliminate arrangements) for 10668 the stack-frame, individual data and constants to be aligned for 10669 the maximum single data access size for the chosen CPU model. The 10670 default is to arrange for 32-bit alignment. ABI details such as 10671 structure layout are not affected by these options. 10672 10673`-m32-bit' 10674`-m16-bit' 10675`-m8-bit' 10676 Similar to the stack- data- and const-align options above, these 10677 options arrange for stack-frame, writable data and constants to 10678 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 10679 alignment. 10680 10681`-mno-prologue-epilogue' 10682`-mprologue-epilogue' 10683 With `-mno-prologue-epilogue', the normal function prologue and 10684 epilogue that sets up the stack-frame are omitted and no return 10685 instructions or return sequences are generated in the code. Use 10686 this option only together with visual inspection of the compiled 10687 code: no warnings or errors are generated when call-saved 10688 registers must be saved, or storage for local variable needs to be 10689 allocated. 10690 10691`-mno-gotplt' 10692`-mgotplt' 10693 With `-fpic' and `-fPIC', don't generate (do generate) instruction 10694 sequences that load addresses for functions from the PLT part of 10695 the GOT rather than (traditional on other architectures) calls to 10696 the PLT. The default is `-mgotplt'. 10697 10698`-melf' 10699 Legacy no-op option only recognized with the cris-axis-elf and 10700 cris-axis-linux-gnu targets. 10701 10702`-mlinux' 10703 Legacy no-op option only recognized with the cris-axis-linux-gnu 10704 target. 10705 10706`-sim' 10707 This option, recognized for the cris-axis-elf arranges to link 10708 with input-output functions from a simulator library. Code, 10709 initialized data and zero-initialized data are allocated 10710 consecutively. 10711 10712`-sim2' 10713 Like `-sim', but pass linker options to locate initialized data at 10714 0x40000000 and zero-initialized data at 0x80000000. 10715 10716 10717File: gcc.info, Node: CRX Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 10718 107193.17.6 CRX Options 10720------------------ 10721 10722These options are defined specifically for the CRX ports. 10723 10724`-mmac' 10725 Enable the use of multiply-accumulate instructions. Disabled by 10726 default. 10727 10728`-mpush-args' 10729 Push instructions will be used to pass outgoing arguments when 10730 functions are called. Enabled by default. 10731 10732 10733File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CRX Options, Up: Submodel Options 10734 107353.17.7 Darwin Options 10736--------------------- 10737 10738These options are defined for all architectures running the Darwin 10739operating system. 10740 10741 FSF GCC on Darwin does not create "fat" object files; it will create 10742an object file for the single architecture that it was built to target. 10743Apple's GCC on Darwin does create "fat" files if multiple `-arch' 10744options are used; it does so by running the compiler or linker multiple 10745times and joining the results together with `lipo'. 10746 10747 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 10748is determined by the flags that specify the ISA that GCC is targetting, 10749like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 10750used to override this. 10751 10752 The Darwin tools vary in their behavior when presented with an ISA 10753mismatch. The assembler, `as', will only permit instructions to be 10754used that are valid for the subtype of the file it is generating, so 10755you cannot put 64-bit instructions in a `ppc750' object file. The 10756linker for shared libraries, `/usr/bin/libtool', will fail and print an 10757error if asked to create a shared library with a less restrictive 10758subtype than its input files (for instance, trying to put a `ppc970' 10759object file in a `ppc7400' library). The linker for executables, `ld', 10760will quietly give the executable the most restrictive subtype of any of 10761its input files. 10762 10763`-FDIR' 10764 Add the framework directory DIR to the head of the list of 10765 directories to be searched for header files. These directories are 10766 interleaved with those specified by `-I' options and are scanned 10767 in a left-to-right order. 10768 10769 A framework directory is a directory with frameworks in it. A 10770 framework is a directory with a `"Headers"' and/or 10771 `"PrivateHeaders"' directory contained directly in it that ends in 10772 `".framework"'. The name of a framework is the name of this 10773 directory excluding the `".framework"'. Headers associated with 10774 the framework are found in one of those two directories, with 10775 `"Headers"' being searched first. A subframework is a framework 10776 directory that is in a framework's `"Frameworks"' directory. 10777 Includes of subframework headers can only appear in a header of a 10778 framework that contains the subframework, or in a sibling 10779 subframework header. Two subframeworks are siblings if they occur 10780 in the same framework. A subframework should not have the same 10781 name as a framework, a warning will be issued if this is violated. 10782 Currently a subframework cannot have subframeworks, in the future, 10783 the mechanism may be extended to support this. The standard 10784 frameworks can be found in `"/System/Library/Frameworks"' and 10785 `"/Library/Frameworks"'. An example include looks like `#include 10786 <Framework/header.h>', where `Framework' denotes the name of the 10787 framework and header.h is found in the `"PrivateHeaders"' or 10788 `"Headers"' directory. 10789 10790`-iframeworkDIR' 10791 Like `-F' except the directory is a treated as a system directory. 10792 The main difference between this `-iframework' and `-F' is that 10793 with `-iframework' the compiler does not warn about constructs 10794 contained within header files found via DIR. This option is valid 10795 only for the C family of languages. 10796 10797`-gused' 10798 Emit debugging information for symbols that are used. For STABS 10799 debugging format, this enables `-feliminate-unused-debug-symbols'. 10800 This is by default ON. 10801 10802`-gfull' 10803 Emit debugging information for all symbols and types. 10804 10805`-mmacosx-version-min=VERSION' 10806 The earliest version of MacOS X that this executable will run on 10807 is VERSION. Typical values of VERSION include `10.1', `10.2', and 10808 `10.3.9'. 10809 10810 If the compiler was built to use the system's headers by default, 10811 then the default for this option is the system version on which the 10812 compiler is running, otherwise the default is to make choices which 10813 are compatible with as many systems and code bases as possible. 10814 10815`-mkernel' 10816 Enable kernel development mode. The `-mkernel' option sets 10817 `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions', 10818 `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and 10819 `-fno-rtti' where applicable. This mode also sets `-mno-altivec', 10820 `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC 10821 targets. 10822 10823`-mone-byte-bool' 10824 Override the defaults for `bool' so that `sizeof(bool)==1'. By 10825 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 10826 and `1' when compiling for Darwin/x86, so this option has no 10827 effect on x86. 10828 10829 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 10830 code that is not binary compatible with code generated without 10831 that switch. Using this switch may require recompiling all other 10832 modules in a program, including system libraries. Use this switch 10833 to conform to a non-default data model. 10834 10835`-mfix-and-continue' 10836`-ffix-and-continue' 10837`-findirect-data' 10838 Generate code suitable for fast turn around development. Needed to 10839 enable gdb to dynamically load `.o' files into already running 10840 programs. `-findirect-data' and `-ffix-and-continue' are provided 10841 for backwards compatibility. 10842 10843`-all_load' 10844 Loads all members of static archive libraries. See man ld(1) for 10845 more information. 10846 10847`-arch_errors_fatal' 10848 Cause the errors having to do with files that have the wrong 10849 architecture to be fatal. 10850 10851`-bind_at_load' 10852 Causes the output file to be marked such that the dynamic linker 10853 will bind all undefined references when the file is loaded or 10854 launched. 10855 10856`-bundle' 10857 Produce a Mach-o bundle format file. See man ld(1) for more 10858 information. 10859 10860`-bundle_loader EXECUTABLE' 10861 This option specifies the EXECUTABLE that will be loading the build 10862 output file being linked. See man ld(1) for more information. 10863 10864`-dynamiclib' 10865 When passed this option, GCC will produce a dynamic library 10866 instead of an executable when linking, using the Darwin `libtool' 10867 command. 10868 10869`-force_cpusubtype_ALL' 10870 This causes GCC's output file to have the ALL subtype, instead of 10871 one controlled by the `-mcpu' or `-march' option. 10872 10873`-allowable_client CLIENT_NAME' 10874`-client_name' 10875`-compatibility_version' 10876`-current_version' 10877`-dead_strip' 10878`-dependency-file' 10879`-dylib_file' 10880`-dylinker_install_name' 10881`-dynamic' 10882`-exported_symbols_list' 10883`-filelist' 10884`-flat_namespace' 10885`-force_flat_namespace' 10886`-headerpad_max_install_names' 10887`-image_base' 10888`-init' 10889`-install_name' 10890`-keep_private_externs' 10891`-multi_module' 10892`-multiply_defined' 10893`-multiply_defined_unused' 10894`-noall_load' 10895`-no_dead_strip_inits_and_terms' 10896`-nofixprebinding' 10897`-nomultidefs' 10898`-noprebind' 10899`-noseglinkedit' 10900`-pagezero_size' 10901`-prebind' 10902`-prebind_all_twolevel_modules' 10903`-private_bundle' 10904`-read_only_relocs' 10905`-sectalign' 10906`-sectobjectsymbols' 10907`-whyload' 10908`-seg1addr' 10909`-sectcreate' 10910`-sectobjectsymbols' 10911`-sectorder' 10912`-segaddr' 10913`-segs_read_only_addr' 10914`-segs_read_write_addr' 10915`-seg_addr_table' 10916`-seg_addr_table_filename' 10917`-seglinkedit' 10918`-segprot' 10919`-segs_read_only_addr' 10920`-segs_read_write_addr' 10921`-single_module' 10922`-static' 10923`-sub_library' 10924`-sub_umbrella' 10925`-twolevel_namespace' 10926`-umbrella' 10927`-undefined' 10928`-unexported_symbols_list' 10929`-weak_reference_mismatches' 10930`-whatsloaded' 10931 These options are passed to the Darwin linker. The Darwin linker 10932 man page describes them in detail. 10933 10934 10935File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Darwin Options, Up: Submodel Options 10936 109373.17.8 DEC Alpha Options 10938------------------------ 10939 10940These `-m' options are defined for the DEC Alpha implementations: 10941 10942`-mno-soft-float' 10943`-msoft-float' 10944 Use (do not use) the hardware floating-point instructions for 10945 floating-point operations. When `-msoft-float' is specified, 10946 functions in `libgcc.a' will be used to perform floating-point 10947 operations. Unless they are replaced by routines that emulate the 10948 floating-point operations, or compiled in such a way as to call 10949 such emulations routines, these routines will issue floating-point 10950 operations. If you are compiling for an Alpha without 10951 floating-point operations, you must ensure that the library is 10952 built so as not to call them. 10953 10954 Note that Alpha implementations without floating-point operations 10955 are required to have floating-point registers. 10956 10957`-mfp-reg' 10958`-mno-fp-regs' 10959 Generate code that uses (does not use) the floating-point register 10960 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 10961 register set is not used, floating point operands are passed in 10962 integer registers as if they were integers and floating-point 10963 results are passed in `$0' instead of `$f0'. This is a 10964 non-standard calling sequence, so any function with a 10965 floating-point argument or return value called by code compiled 10966 with `-mno-fp-regs' must also be compiled with that option. 10967 10968 A typical use of this option is building a kernel that does not 10969 use, and hence need not save and restore, any floating-point 10970 registers. 10971 10972`-mieee' 10973 The Alpha architecture implements floating-point hardware 10974 optimized for maximum performance. It is mostly compliant with 10975 the IEEE floating point standard. However, for full compliance, 10976 software assistance is required. This option generates code fully 10977 IEEE compliant code _except_ that the INEXACT-FLAG is not 10978 maintained (see below). If this option is turned on, the 10979 preprocessor macro `_IEEE_FP' is defined during compilation. The 10980 resulting code is less efficient but is able to correctly support 10981 denormalized numbers and exceptional IEEE values such as 10982 not-a-number and plus/minus infinity. Other Alpha compilers call 10983 this option `-ieee_with_no_inexact'. 10984 10985`-mieee-with-inexact' 10986 This is like `-mieee' except the generated code also maintains the 10987 IEEE INEXACT-FLAG. Turning on this option causes the generated 10988 code to implement fully-compliant IEEE math. In addition to 10989 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 10990 On some Alpha implementations the resulting code may execute 10991 significantly slower than the code generated by default. Since 10992 there is very little code that depends on the INEXACT-FLAG, you 10993 should normally not specify this option. Other Alpha compilers 10994 call this option `-ieee_with_inexact'. 10995 10996`-mfp-trap-mode=TRAP-MODE' 10997 This option controls what floating-point related traps are enabled. 10998 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 10999 trap mode can be set to one of four values: 11000 11001 `n' 11002 This is the default (normal) setting. The only traps that 11003 are enabled are the ones that cannot be disabled in software 11004 (e.g., division by zero trap). 11005 11006 `u' 11007 In addition to the traps enabled by `n', underflow traps are 11008 enabled as well. 11009 11010 `su' 11011 Like `u', but the instructions are marked to be safe for 11012 software completion (see Alpha architecture manual for 11013 details). 11014 11015 `sui' 11016 Like `su', but inexact traps are enabled as well. 11017 11018`-mfp-rounding-mode=ROUNDING-MODE' 11019 Selects the IEEE rounding mode. Other Alpha compilers call this 11020 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 11021 11022 `n' 11023 Normal IEEE rounding mode. Floating point numbers are 11024 rounded towards the nearest machine number or towards the 11025 even machine number in case of a tie. 11026 11027 `m' 11028 Round towards minus infinity. 11029 11030 `c' 11031 Chopped rounding mode. Floating point numbers are rounded 11032 towards zero. 11033 11034 `d' 11035 Dynamic rounding mode. A field in the floating point control 11036 register (FPCR, see Alpha architecture reference manual) 11037 controls the rounding mode in effect. The C library 11038 initializes this register for rounding towards plus infinity. 11039 Thus, unless your program modifies the FPCR, `d' corresponds 11040 to round towards plus infinity. 11041 11042`-mtrap-precision=TRAP-PRECISION' 11043 In the Alpha architecture, floating point traps are imprecise. 11044 This means without software assistance it is impossible to recover 11045 from a floating trap and program execution normally needs to be 11046 terminated. GCC can generate code that can assist operating 11047 system trap handlers in determining the exact location that caused 11048 a floating point trap. Depending on the requirements of an 11049 application, different levels of precisions can be selected: 11050 11051 `p' 11052 Program precision. This option is the default and means a 11053 trap handler can only identify which program caused a 11054 floating point exception. 11055 11056 `f' 11057 Function precision. The trap handler can determine the 11058 function that caused a floating point exception. 11059 11060 `i' 11061 Instruction precision. The trap handler can determine the 11062 exact instruction that caused a floating point exception. 11063 11064 Other Alpha compilers provide the equivalent options called 11065 `-scope_safe' and `-resumption_safe'. 11066 11067`-mieee-conformant' 11068 This option marks the generated code as IEEE conformant. You must 11069 not use this option unless you also specify `-mtrap-precision=i' 11070 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 11071 effect is to emit the line `.eflag 48' in the function prologue of 11072 the generated assembly file. Under DEC Unix, this has the effect 11073 that IEEE-conformant math library routines will be linked in. 11074 11075`-mbuild-constants' 11076 Normally GCC examines a 32- or 64-bit integer constant to see if 11077 it can construct it from smaller constants in two or three 11078 instructions. If it cannot, it will output the constant as a 11079 literal and generate code to load it from the data segment at 11080 runtime. 11081 11082 Use this option to require GCC to construct _all_ integer constants 11083 using code, even if it takes more instructions (the maximum is 11084 six). 11085 11086 You would typically use this option to build a shared library 11087 dynamic loader. Itself a shared library, it must relocate itself 11088 in memory before it can find the variables and constants in its 11089 own data segment. 11090 11091`-malpha-as' 11092`-mgas' 11093 Select whether to generate code to be assembled by the 11094 vendor-supplied assembler (`-malpha-as') or by the GNU assembler 11095 `-mgas'. 11096 11097`-mbwx' 11098`-mno-bwx' 11099`-mcix' 11100`-mno-cix' 11101`-mfix' 11102`-mno-fix' 11103`-mmax' 11104`-mno-max' 11105 Indicate whether GCC should generate code to use the optional BWX, 11106 CIX, FIX and MAX instruction sets. The default is to use the 11107 instruction sets supported by the CPU type specified via `-mcpu=' 11108 option or that of the CPU on which GCC was built if none was 11109 specified. 11110 11111`-mfloat-vax' 11112`-mfloat-ieee' 11113 Generate code that uses (does not use) VAX F and G floating point 11114 arithmetic instead of IEEE single and double precision. 11115 11116`-mexplicit-relocs' 11117`-mno-explicit-relocs' 11118 Older Alpha assemblers provided no way to generate symbol 11119 relocations except via assembler macros. Use of these macros does 11120 not allow optimal instruction scheduling. GNU binutils as of 11121 version 2.12 supports a new syntax that allows the compiler to 11122 explicitly mark which relocations should apply to which 11123 instructions. This option is mostly useful for debugging, as GCC 11124 detects the capabilities of the assembler when it is built and 11125 sets the default accordingly. 11126 11127`-msmall-data' 11128`-mlarge-data' 11129 When `-mexplicit-relocs' is in effect, static data is accessed via 11130 "gp-relative" relocations. When `-msmall-data' is used, objects 8 11131 bytes long or smaller are placed in a "small data area" (the 11132 `.sdata' and `.sbss' sections) and are accessed via 16-bit 11133 relocations off of the `$gp' register. This limits the size of 11134 the small data area to 64KB, but allows the variables to be 11135 directly accessed via a single instruction. 11136 11137 The default is `-mlarge-data'. With this option the data area is 11138 limited to just below 2GB. Programs that require more than 2GB of 11139 data must use `malloc' or `mmap' to allocate the data in the heap 11140 instead of in the program's data segment. 11141 11142 When generating code for shared libraries, `-fpic' implies 11143 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 11144 11145`-msmall-text' 11146`-mlarge-text' 11147 When `-msmall-text' is used, the compiler assumes that the code of 11148 the entire program (or shared library) fits in 4MB, and is thus 11149 reachable with a branch instruction. When `-msmall-data' is used, 11150 the compiler can assume that all local symbols share the same 11151 `$gp' value, and thus reduce the number of instructions required 11152 for a function call from 4 to 1. 11153 11154 The default is `-mlarge-text'. 11155 11156`-mcpu=CPU_TYPE' 11157 Set the instruction set and instruction scheduling parameters for 11158 machine type CPU_TYPE. You can specify either the `EV' style name 11159 or the corresponding chip number. GCC supports scheduling 11160 parameters for the EV4, EV5 and EV6 family of processors and will 11161 choose the default values for the instruction set from the 11162 processor you specify. If you do not specify a processor type, 11163 GCC will default to the processor on which the compiler was built. 11164 11165 Supported values for CPU_TYPE are 11166 11167 `ev4' 11168 `ev45' 11169 `21064' 11170 Schedules as an EV4 and has no instruction set extensions. 11171 11172 `ev5' 11173 `21164' 11174 Schedules as an EV5 and has no instruction set extensions. 11175 11176 `ev56' 11177 `21164a' 11178 Schedules as an EV5 and supports the BWX extension. 11179 11180 `pca56' 11181 `21164pc' 11182 `21164PC' 11183 Schedules as an EV5 and supports the BWX and MAX extensions. 11184 11185 `ev6' 11186 `21264' 11187 Schedules as an EV6 and supports the BWX, FIX, and MAX 11188 extensions. 11189 11190 `ev67' 11191 `21264a' 11192 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 11193 extensions. 11194 11195 Native Linux/GNU toolchains also support the value `native', which 11196 selects the best architecture option for the host processor. 11197 `-mcpu=native' has no effect if GCC does not recognize the 11198 processor. 11199 11200`-mtune=CPU_TYPE' 11201 Set only the instruction scheduling parameters for machine type 11202 CPU_TYPE. The instruction set is not changed. 11203 11204 Native Linux/GNU toolchains also support the value `native', which 11205 selects the best architecture option for the host processor. 11206 `-mtune=native' has no effect if GCC does not recognize the 11207 processor. 11208 11209`-mmemory-latency=TIME' 11210 Sets the latency the scheduler should assume for typical memory 11211 references as seen by the application. This number is highly 11212 dependent on the memory access patterns used by the application 11213 and the size of the external cache on the machine. 11214 11215 Valid options for TIME are 11216 11217 `NUMBER' 11218 A decimal number representing clock cycles. 11219 11220 `L1' 11221 `L2' 11222 `L3' 11223 `main' 11224 The compiler contains estimates of the number of clock cycles 11225 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 11226 (also called Dcache, Scache, and Bcache), as well as to main 11227 memory. Note that L3 is only valid for EV5. 11228 11229 11230 11231File: gcc.info, Node: DEC Alpha/VMS Options, Next: FR30 Options, Prev: DEC Alpha Options, Up: Submodel Options 11232 112333.17.9 DEC Alpha/VMS Options 11234---------------------------- 11235 11236These `-m' options are defined for the DEC Alpha/VMS implementations: 11237 11238`-mvms-return-codes' 11239 Return VMS condition codes from main. The default is to return 11240 POSIX style condition (e.g. error) codes. 11241 11242`-mdebug-main=PREFIX' 11243 Flag the first routine whose name starts with PREFIX as the main 11244 routine for the debugger. 11245 11246`-mmalloc64' 11247 Default to 64bit memory allocation routines. 11248 11249 11250File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options 11251 112523.17.10 FR30 Options 11253-------------------- 11254 11255These options are defined specifically for the FR30 port. 11256 11257`-msmall-model' 11258 Use the small address space model. This can produce smaller code, 11259 but it does assume that all symbolic values and addresses will fit 11260 into a 20-bit range. 11261 11262`-mno-lsim' 11263 Assume that run-time support has been provided and so there is no 11264 need to include the simulator library (`libsim.a') on the linker 11265 command line. 11266 11267 11268 11269File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 11270 112713.17.11 FRV Options 11272------------------- 11273 11274`-mgpr-32' 11275 Only use the first 32 general purpose registers. 11276 11277`-mgpr-64' 11278 Use all 64 general purpose registers. 11279 11280`-mfpr-32' 11281 Use only the first 32 floating point registers. 11282 11283`-mfpr-64' 11284 Use all 64 floating point registers 11285 11286`-mhard-float' 11287 Use hardware instructions for floating point operations. 11288 11289`-msoft-float' 11290 Use library routines for floating point operations. 11291 11292`-malloc-cc' 11293 Dynamically allocate condition code registers. 11294 11295`-mfixed-cc' 11296 Do not try to dynamically allocate condition code registers, only 11297 use `icc0' and `fcc0'. 11298 11299`-mdword' 11300 Change ABI to use double word insns. 11301 11302`-mno-dword' 11303 Do not use double word instructions. 11304 11305`-mdouble' 11306 Use floating point double instructions. 11307 11308`-mno-double' 11309 Do not use floating point double instructions. 11310 11311`-mmedia' 11312 Use media instructions. 11313 11314`-mno-media' 11315 Do not use media instructions. 11316 11317`-mmuladd' 11318 Use multiply and add/subtract instructions. 11319 11320`-mno-muladd' 11321 Do not use multiply and add/subtract instructions. 11322 11323`-mfdpic' 11324 Select the FDPIC ABI, that uses function descriptors to represent 11325 pointers to functions. Without any PIC/PIE-related options, it 11326 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 11327 and small data are within a 12-bit range from the GOT base 11328 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 11329 bits. With a `bfin-elf' target, this option implies `-msim'. 11330 11331`-minline-plt' 11332 Enable inlining of PLT entries in function calls to functions that 11333 are not known to bind locally. It has no effect without `-mfdpic'. 11334 It's enabled by default if optimizing for speed and compiling for 11335 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 11336 optimization option such as `-O3' or above is present in the 11337 command line. 11338 11339`-mTLS' 11340 Assume a large TLS segment when generating thread-local code. 11341 11342`-mtls' 11343 Do not assume a large TLS segment when generating thread-local 11344 code. 11345 11346`-mgprel-ro' 11347 Enable the use of `GPREL' relocations in the FDPIC ABI for data 11348 that is known to be in read-only sections. It's enabled by 11349 default, except for `-fpic' or `-fpie': even though it may help 11350 make the global offset table smaller, it trades 1 instruction for 11351 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 11352 of which may be shared by multiple symbols, and it avoids the need 11353 for a GOT entry for the referenced symbol, so it's more likely to 11354 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 11355 11356`-multilib-library-pic' 11357 Link with the (library, not FD) pic libraries. It's implied by 11358 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 11359 `-mfdpic'. You should never have to use it explicitly. 11360 11361`-mlinked-fp' 11362 Follow the EABI requirement of always creating a frame pointer 11363 whenever a stack frame is allocated. This option is enabled by 11364 default and can be disabled with `-mno-linked-fp'. 11365 11366`-mlong-calls' 11367 Use indirect addressing to call functions outside the current 11368 compilation unit. This allows the functions to be placed anywhere 11369 within the 32-bit address space. 11370 11371`-malign-labels' 11372 Try to align labels to an 8-byte boundary by inserting nops into 11373 the previous packet. This option only has an effect when VLIW 11374 packing is enabled. It doesn't create new packets; it merely adds 11375 nops to existing ones. 11376 11377`-mlibrary-pic' 11378 Generate position-independent EABI code. 11379 11380`-macc-4' 11381 Use only the first four media accumulator registers. 11382 11383`-macc-8' 11384 Use all eight media accumulator registers. 11385 11386`-mpack' 11387 Pack VLIW instructions. 11388 11389`-mno-pack' 11390 Do not pack VLIW instructions. 11391 11392`-mno-eflags' 11393 Do not mark ABI switches in e_flags. 11394 11395`-mcond-move' 11396 Enable the use of conditional-move instructions (default). 11397 11398 This switch is mainly for debugging the compiler and will likely 11399 be removed in a future version. 11400 11401`-mno-cond-move' 11402 Disable the use of conditional-move instructions. 11403 11404 This switch is mainly for debugging the compiler and will likely 11405 be removed in a future version. 11406 11407`-mscc' 11408 Enable the use of conditional set instructions (default). 11409 11410 This switch is mainly for debugging the compiler and will likely 11411 be removed in a future version. 11412 11413`-mno-scc' 11414 Disable the use of conditional set instructions. 11415 11416 This switch is mainly for debugging the compiler and will likely 11417 be removed in a future version. 11418 11419`-mcond-exec' 11420 Enable the use of conditional execution (default). 11421 11422 This switch is mainly for debugging the compiler and will likely 11423 be removed in a future version. 11424 11425`-mno-cond-exec' 11426 Disable the use of conditional execution. 11427 11428 This switch is mainly for debugging the compiler and will likely 11429 be removed in a future version. 11430 11431`-mvliw-branch' 11432 Run a pass to pack branches into VLIW instructions (default). 11433 11434 This switch is mainly for debugging the compiler and will likely 11435 be removed in a future version. 11436 11437`-mno-vliw-branch' 11438 Do not run a pass to pack branches into VLIW instructions. 11439 11440 This switch is mainly for debugging the compiler and will likely 11441 be removed in a future version. 11442 11443`-mmulti-cond-exec' 11444 Enable optimization of `&&' and `||' in conditional execution 11445 (default). 11446 11447 This switch is mainly for debugging the compiler and will likely 11448 be removed in a future version. 11449 11450`-mno-multi-cond-exec' 11451 Disable optimization of `&&' and `||' in conditional execution. 11452 11453 This switch is mainly for debugging the compiler and will likely 11454 be removed in a future version. 11455 11456`-mnested-cond-exec' 11457 Enable nested conditional execution optimizations (default). 11458 11459 This switch is mainly for debugging the compiler and will likely 11460 be removed in a future version. 11461 11462`-mno-nested-cond-exec' 11463 Disable nested conditional execution optimizations. 11464 11465 This switch is mainly for debugging the compiler and will likely 11466 be removed in a future version. 11467 11468`-moptimize-membar' 11469 This switch removes redundant `membar' instructions from the 11470 compiler generated code. It is enabled by default. 11471 11472`-mno-optimize-membar' 11473 This switch disables the automatic removal of redundant `membar' 11474 instructions from the generated code. 11475 11476`-mtomcat-stats' 11477 Cause gas to print out tomcat statistics. 11478 11479`-mcpu=CPU' 11480 Select the processor type for which to generate code. Possible 11481 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 11482 `fr400', `fr300' and `simple'. 11483 11484 11485 11486File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 11487 114883.17.12 GNU/Linux Options 11489------------------------- 11490 11491These `-m' options are defined for GNU/Linux targets: 11492 11493`-mglibc' 11494 Use the GNU C library. This is the default except on 11495 `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets. 11496 11497`-muclibc' 11498 Use uClibc C library. This is the default on `*-*-linux-*uclibc*' 11499 targets. 11500 11501`-mbionic' 11502 Use Bionic C library. This is the default on 11503 `*-*-linux-*android*' targets. 11504 11505`-mandroid' 11506 Compile code compatible with Android platform. This is the 11507 default on `*-*-linux-*android*' targets. 11508 11509 When compiling, this option enables `-mbionic', `-fPIC', 11510 `-fno-exceptions' and `-fno-rtti' by default. When linking, this 11511 option makes the GCC driver pass Android-specific options to the 11512 linker. Finally, this option causes the preprocessor macro 11513 `__ANDROID__' to be defined. 11514 11515`-tno-android-cc' 11516 Disable compilation effects of `-mandroid', i.e., do not enable 11517 `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default. 11518 11519`-tno-android-ld' 11520 Disable linking effects of `-mandroid', i.e., pass standard Linux 11521 linking options to the linker. 11522 11523 11524 11525File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 11526 115273.17.13 H8/300 Options 11528---------------------- 11529 11530These `-m' options are defined for the H8/300 implementations: 11531 11532`-mrelax' 11533 Shorten some address references at link time, when possible; uses 11534 the linker option `-relax'. *Note `ld' and the H8/300: 11535 (ld)H8/300, for a fuller description. 11536 11537`-mh' 11538 Generate code for the H8/300H. 11539 11540`-ms' 11541 Generate code for the H8S. 11542 11543`-mn' 11544 Generate code for the H8S and H8/300H in the normal mode. This 11545 switch must be used either with `-mh' or `-ms'. 11546 11547`-ms2600' 11548 Generate code for the H8S/2600. This switch must be used with 11549 `-ms'. 11550 11551`-mint32' 11552 Make `int' data 32 bits by default. 11553 11554`-malign-300' 11555 On the H8/300H and H8S, use the same alignment rules as for the 11556 H8/300. The default for the H8/300H and H8S is to align longs and 11557 floats on 4 byte boundaries. `-malign-300' causes them to be 11558 aligned on 2 byte boundaries. This option has no effect on the 11559 H8/300. 11560 11561 11562File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 11563 115643.17.14 HPPA Options 11565-------------------- 11566 11567These `-m' options are defined for the HPPA family of computers: 11568 11569`-march=ARCHITECTURE-TYPE' 11570 Generate code for the specified architecture. The choices for 11571 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 11572 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 11573 an HP-UX system to determine the proper architecture option for 11574 your machine. Code compiled for lower numbered architectures will 11575 run on higher numbered architectures, but not the other way around. 11576 11577`-mpa-risc-1-0' 11578`-mpa-risc-1-1' 11579`-mpa-risc-2-0' 11580 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 11581 respectively. 11582 11583`-mbig-switch' 11584 Generate code suitable for big switch tables. Use this option 11585 only if the assembler/linker complain about out of range branches 11586 within a switch table. 11587 11588`-mjump-in-delay' 11589 Fill delay slots of function calls with unconditional jump 11590 instructions by modifying the return pointer for the function call 11591 to be the target of the conditional jump. 11592 11593`-mdisable-fpregs' 11594 Prevent floating point registers from being used in any manner. 11595 This is necessary for compiling kernels which perform lazy context 11596 switching of floating point registers. If you use this option and 11597 attempt to perform floating point operations, the compiler will 11598 abort. 11599 11600`-mdisable-indexing' 11601 Prevent the compiler from using indexing address modes. This 11602 avoids some rather obscure problems when compiling MIG generated 11603 code under MACH. 11604 11605`-mno-space-regs' 11606 Generate code that assumes the target has no space registers. 11607 This allows GCC to generate faster indirect calls and use unscaled 11608 index address modes. 11609 11610 Such code is suitable for level 0 PA systems and kernels. 11611 11612`-mfast-indirect-calls' 11613 Generate code that assumes calls never cross space boundaries. 11614 This allows GCC to emit code which performs faster indirect calls. 11615 11616 This option will not work in the presence of shared libraries or 11617 nested functions. 11618 11619`-mfixed-range=REGISTER-RANGE' 11620 Generate code treating the given register range as fixed registers. 11621 A fixed register is one that the register allocator can not use. 11622 This is useful when compiling kernel code. A register range is 11623 specified as two registers separated by a dash. Multiple register 11624 ranges can be specified separated by a comma. 11625 11626`-mlong-load-store' 11627 Generate 3-instruction load and store sequences as sometimes 11628 required by the HP-UX 10 linker. This is equivalent to the `+k' 11629 option to the HP compilers. 11630 11631`-mportable-runtime' 11632 Use the portable calling conventions proposed by HP for ELF 11633 systems. 11634 11635`-mgas' 11636 Enable the use of assembler directives only GAS understands. 11637 11638`-mschedule=CPU-TYPE' 11639 Schedule code according to the constraints for the machine type 11640 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 11641 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 11642 HP-UX system to determine the proper scheduling option for your 11643 machine. The default scheduling is `8000'. 11644 11645`-mlinker-opt' 11646 Enable the optimization pass in the HP-UX linker. Note this makes 11647 symbolic debugging impossible. It also triggers a bug in the 11648 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 11649 messages when linking some programs. 11650 11651`-msoft-float' 11652 Generate output containing library calls for floating point. 11653 *Warning:* the requisite libraries are not available for all HPPA 11654 targets. Normally the facilities of the machine's usual C 11655 compiler are used, but this cannot be done directly in 11656 cross-compilation. You must make your own arrangements to provide 11657 suitable library functions for cross-compilation. 11658 11659 `-msoft-float' changes the calling convention in the output file; 11660 therefore, it is only useful if you compile _all_ of a program with 11661 this option. In particular, you need to compile `libgcc.a', the 11662 library that comes with GCC, with `-msoft-float' in order for this 11663 to work. 11664 11665`-msio' 11666 Generate the predefine, `_SIO', for server IO. The default is 11667 `-mwsio'. This generates the predefines, `__hp9000s700', 11668 `__hp9000s700__' and `_WSIO', for workstation IO. These options 11669 are available under HP-UX and HI-UX. 11670 11671`-mgnu-ld' 11672 Use GNU ld specific options. This passes `-shared' to ld when 11673 building a shared library. It is the default when GCC is 11674 configured, explicitly or implicitly, with the GNU linker. This 11675 option does not have any affect on which ld is called, it only 11676 changes what parameters are passed to that ld. The ld that is 11677 called is determined by the `--with-ld' configure option, GCC's 11678 program search path, and finally by the user's `PATH'. The linker 11679 used by GCC can be printed using `which `gcc 11680 -print-prog-name=ld`'. This option is only available on the 64 11681 bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'. 11682 11683`-mhp-ld' 11684 Use HP ld specific options. This passes `-b' to ld when building 11685 a shared library and passes `+Accept TypeMismatch' to ld on all 11686 links. It is the default when GCC is configured, explicitly or 11687 implicitly, with the HP linker. This option does not have any 11688 affect on which ld is called, it only changes what parameters are 11689 passed to that ld. The ld that is called is determined by the 11690 `--with-ld' configure option, GCC's program search path, and 11691 finally by the user's `PATH'. The linker used by GCC can be 11692 printed using `which `gcc -print-prog-name=ld`'. This option is 11693 only available on the 64 bit HP-UX GCC, i.e. configured with 11694 `hppa*64*-*-hpux*'. 11695 11696`-mlong-calls' 11697 Generate code that uses long call sequences. This ensures that a 11698 call is always able to reach linker generated stubs. The default 11699 is to generate long calls only when the distance from the call 11700 site to the beginning of the function or translation unit, as the 11701 case may be, exceeds a predefined limit set by the branch type 11702 being used. The limits for normal calls are 7,600,000 and 240,000 11703 bytes, respectively for the PA 2.0 and PA 1.X architectures. 11704 Sibcalls are always limited at 240,000 bytes. 11705 11706 Distances are measured from the beginning of functions when using 11707 the `-ffunction-sections' option, or when using the `-mgas' and 11708 `-mno-portable-runtime' options together under HP-UX with the SOM 11709 linker. 11710 11711 It is normally not desirable to use this option as it will degrade 11712 performance. However, it may be useful in large applications, 11713 particularly when partial linking is used to build the application. 11714 11715 The types of long calls used depends on the capabilities of the 11716 assembler and linker, and the type of code being generated. The 11717 impact on systems that support long absolute calls, and long pic 11718 symbol-difference or pc-relative calls should be relatively small. 11719 However, an indirect call is used on 32-bit ELF systems in pic code 11720 and it is quite long. 11721 11722`-munix=UNIX-STD' 11723 Generate compiler predefines and select a startfile for the 11724 specified UNIX standard. The choices for UNIX-STD are `93', `95' 11725 and `98'. `93' is supported on all HP-UX versions. `95' is 11726 available on HP-UX 10.10 and later. `98' is available on HP-UX 11727 11.11 and later. The default values are `93' for HP-UX 10.00, 11728 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 11729 later. 11730 11731 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 11732 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 11733 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 11734 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 11735 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 11736 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 11737 11738 It is _important_ to note that this option changes the interfaces 11739 for various library routines. It also affects the operational 11740 behavior of the C library. Thus, _extreme_ care is needed in 11741 using this option. 11742 11743 Library code that is intended to operate with more than one UNIX 11744 standard must test, set and restore the variable 11745 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 11746 provide this capability. 11747 11748`-nolibdld' 11749 Suppress the generation of link options to search libdld.sl when 11750 the `-static' option is specified on HP-UX 10 and later. 11751 11752`-static' 11753 The HP-UX implementation of setlocale in libc has a dependency on 11754 libdld.sl. There isn't an archive version of libdld.sl. Thus, 11755 when the `-static' option is specified, special link options are 11756 needed to resolve this dependency. 11757 11758 On HP-UX 10 and later, the GCC driver adds the necessary options to 11759 link with libdld.sl when the `-static' option is specified. This 11760 causes the resulting binary to be dynamic. On the 64-bit port, 11761 the linkers generate dynamic binaries by default in any case. The 11762 `-nolibdld' option can be used to prevent the GCC driver from 11763 adding these link options. 11764 11765`-threads' 11766 Add support for multithreading with the "dce thread" library under 11767 HP-UX. This option sets flags for both the preprocessor and 11768 linker. 11769 11770 11771File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options 11772 117733.17.15 Intel 386 and AMD x86-64 Options 11774---------------------------------------- 11775 11776These `-m' options are defined for the i386 and x86-64 family of 11777computers: 11778 11779`-mtune=CPU-TYPE' 11780 Tune to CPU-TYPE everything applicable about the generated code, 11781 except for the ABI and the set of available instructions. The 11782 choices for CPU-TYPE are: 11783 _generic_ 11784 Produce code optimized for the most common IA32/AMD64/EM64T 11785 processors. If you know the CPU on which your code will run, 11786 then you should use the corresponding `-mtune' option instead 11787 of `-mtune=generic'. But, if you do not know exactly what 11788 CPU users of your application will have, then you should use 11789 this option. 11790 11791 As new processors are deployed in the marketplace, the 11792 behavior of this option will change. Therefore, if you 11793 upgrade to a newer version of GCC, the code generated option 11794 will change to reflect the processors that were most common 11795 when that version of GCC was released. 11796 11797 There is no `-march=generic' option because `-march' 11798 indicates the instruction set the compiler can use, and there 11799 is no generic instruction set applicable to all processors. 11800 In contrast, `-mtune' indicates the processor (or, in this 11801 case, collection of processors) for which the code is 11802 optimized. 11803 11804 _native_ 11805 This selects the CPU to tune for at compilation time by 11806 determining the processor type of the compiling machine. 11807 Using `-mtune=native' will produce code optimized for the 11808 local machine under the constraints of the selected 11809 instruction set. Using `-march=native' will enable all 11810 instruction subsets supported by the local machine (hence the 11811 result might not run on different machines). 11812 11813 _i386_ 11814 Original Intel's i386 CPU. 11815 11816 _i486_ 11817 Intel's i486 CPU. (No scheduling is implemented for this 11818 chip.) 11819 11820 _i586, pentium_ 11821 Intel Pentium CPU with no MMX support. 11822 11823 _pentium-mmx_ 11824 Intel PentiumMMX CPU based on Pentium core with MMX 11825 instruction set support. 11826 11827 _pentiumpro_ 11828 Intel PentiumPro CPU. 11829 11830 _i686_ 11831 Same as `generic', but when used as `march' option, PentiumPro 11832 instruction set will be used, so the code will run on all 11833 i686 family chips. 11834 11835 _pentium2_ 11836 Intel Pentium2 CPU based on PentiumPro core with MMX 11837 instruction set support. 11838 11839 _pentium3, pentium3m_ 11840 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE 11841 instruction set support. 11842 11843 _pentium-m_ 11844 Low power version of Intel Pentium3 CPU with MMX, SSE and 11845 SSE2 instruction set support. Used by Centrino notebooks. 11846 11847 _pentium4, pentium4m_ 11848 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set 11849 support. 11850 11851 _prescott_ 11852 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 11853 and SSE3 instruction set support. 11854 11855 _nocona_ 11856 Improved version of Intel Pentium4 CPU with 64-bit 11857 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 11858 11859 _core2_ 11860 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 11861 and SSSE3 instruction set support. 11862 11863 _corei7_ 11864 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, 11865 SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support. 11866 11867 _corei7-avx_ 11868 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, 11869 SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction 11870 set support. 11871 11872 _atom_ 11873 Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 11874 and SSSE3 instruction set support. 11875 11876 _k6_ 11877 AMD K6 CPU with MMX instruction set support. 11878 11879 _k6-2, k6-3_ 11880 Improved versions of AMD K6 CPU with MMX and 3DNow! 11881 instruction set support. 11882 11883 _athlon, athlon-tbird_ 11884 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE 11885 prefetch instructions support. 11886 11887 _athlon-4, athlon-xp, athlon-mp_ 11888 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and 11889 full SSE instruction set support. 11890 11891 _k8, opteron, athlon64, athlon-fx_ 11892 AMD K8 core based CPUs with x86-64 instruction set support. 11893 (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and 11894 64-bit instruction set extensions.) 11895 11896 _k8-sse3, opteron-sse3, athlon64-sse3_ 11897 Improved versions of k8, opteron and athlon64 with SSE3 11898 instruction set support. 11899 11900 _amdfam10, barcelona_ 11901 AMD Family 10h core based CPUs with x86-64 instruction set 11902 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 11903 3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set 11904 extensions.) 11905 11906 _winchip-c6_ 11907 IDT Winchip C6 CPU, dealt in same way as i486 with additional 11908 MMX instruction set support. 11909 11910 _winchip2_ 11911 IDT Winchip2 CPU, dealt in same way as i486 with additional 11912 MMX and 3DNow! instruction set support. 11913 11914 _c3_ 11915 Via C3 CPU with MMX and 3DNow! instruction set support. (No 11916 scheduling is implemented for this chip.) 11917 11918 _c3-2_ 11919 Via C3-2 CPU with MMX and SSE instruction set support. (No 11920 scheduling is implemented for this chip.) 11921 11922 _geode_ 11923 Embedded AMD CPU with MMX and 3DNow! instruction set support. 11924 11925 While picking a specific CPU-TYPE will schedule things 11926 appropriately for that particular chip, the compiler will not 11927 generate any code that does not run on the i386 without the 11928 `-march=CPU-TYPE' option being used. 11929 11930`-march=CPU-TYPE' 11931 Generate instructions for the machine type CPU-TYPE. The choices 11932 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying 11933 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 11934 11935`-mcpu=CPU-TYPE' 11936 A deprecated synonym for `-mtune'. 11937 11938`-mfpmath=UNIT' 11939 Generate floating point arithmetics for selected unit UNIT. The 11940 choices for UNIT are: 11941 11942 `387' 11943 Use the standard 387 floating point coprocessor present 11944 majority of chips and emulated otherwise. Code compiled with 11945 this option will run almost everywhere. The temporary 11946 results are computed in 80bit precision instead of precision 11947 specified by the type resulting in slightly different results 11948 compared to most of other chips. See `-ffloat-store' for 11949 more detailed description. 11950 11951 This is the default choice for i386 compiler. 11952 11953 `sse' 11954 Use scalar floating point instructions present in the SSE 11955 instruction set. This instruction set is supported by 11956 Pentium3 and newer chips, in the AMD line by Athlon-4, 11957 Athlon-xp and Athlon-mp chips. The earlier version of SSE 11958 instruction set supports only single precision arithmetics, 11959 thus the double and extended precision arithmetics is still 11960 done using 387. Later version, present only in Pentium4 and 11961 the future AMD x86-64 chips supports double precision 11962 arithmetics too. 11963 11964 For the i386 compiler, you need to use `-march=CPU-TYPE', 11965 `-msse' or `-msse2' switches to enable SSE extensions and 11966 make this option effective. For the x86-64 compiler, these 11967 extensions are enabled by default. 11968 11969 The resulting code should be considerably faster in the 11970 majority of cases and avoid the numerical instability 11971 problems of 387 code, but may break some existing code that 11972 expects temporaries to be 80bit. 11973 11974 This is the default choice for the x86-64 compiler. 11975 11976 `sse,387' 11977 `sse+387' 11978 `both' 11979 Attempt to utilize both instruction sets at once. This 11980 effectively double the amount of available registers and on 11981 chips with separate execution units for 387 and SSE the 11982 execution resources too. Use this option with care, as it is 11983 still experimental, because the GCC register allocator does 11984 not model separate functional units well resulting in 11985 instable performance. 11986 11987`-masm=DIALECT' 11988 Output asm instructions using selected DIALECT. Supported choices 11989 are `intel' or `att' (the default one). Darwin does not support 11990 `intel'. 11991 11992`-mieee-fp' 11993`-mno-ieee-fp' 11994 Control whether or not the compiler uses IEEE floating point 11995 comparisons. These handle correctly the case where the result of a 11996 comparison is unordered. 11997 11998`-msoft-float' 11999 Generate output containing library calls for floating point. 12000 *Warning:* the requisite libraries are not part of GCC. Normally 12001 the facilities of the machine's usual C compiler are used, but 12002 this can't be done directly in cross-compilation. You must make 12003 your own arrangements to provide suitable library functions for 12004 cross-compilation. 12005 12006 On machines where a function returns floating point results in the 12007 80387 register stack, some floating point opcodes may be emitted 12008 even if `-msoft-float' is used. 12009 12010`-mno-fp-ret-in-387' 12011 Do not use the FPU registers for return values of functions. 12012 12013 The usual calling convention has functions return values of types 12014 `float' and `double' in an FPU register, even if there is no FPU. 12015 The idea is that the operating system should emulate an FPU. 12016 12017 The option `-mno-fp-ret-in-387' causes such values to be returned 12018 in ordinary CPU registers instead. 12019 12020`-mno-fancy-math-387' 12021 Some 387 emulators do not support the `sin', `cos' and `sqrt' 12022 instructions for the 387. Specify this option to avoid generating 12023 those instructions. This option is the default on FreeBSD, 12024 OpenBSD and NetBSD. This option is overridden when `-march' 12025 indicates that the target CPU will always have an FPU and so the 12026 instruction will not need emulation. As of revision 2.6.1, these 12027 instructions are not generated unless you also use the 12028 `-funsafe-math-optimizations' switch. 12029 12030`-malign-double' 12031`-mno-align-double' 12032 Control whether GCC aligns `double', `long double', and `long 12033 long' variables on a two word boundary or a one word boundary. 12034 Aligning `double' variables on a two word boundary will produce 12035 code that runs somewhat faster on a `Pentium' at the expense of 12036 more memory. 12037 12038 On x86-64, `-malign-double' is enabled by default. 12039 12040 *Warning:* if you use the `-malign-double' switch, structures 12041 containing the above types will be aligned differently than the 12042 published application binary interface specifications for the 386 12043 and will not be binary compatible with structures in code compiled 12044 without that switch. 12045 12046`-m96bit-long-double' 12047`-m128bit-long-double' 12048 These switches control the size of `long double' type. The i386 12049 application binary interface specifies the size to be 96 bits, so 12050 `-m96bit-long-double' is the default in 32 bit mode. 12051 12052 Modern architectures (Pentium and newer) would prefer `long double' 12053 to be aligned to an 8 or 16 byte boundary. In arrays or structures 12054 conforming to the ABI, this would not be possible. So specifying a 12055 `-m128bit-long-double' will align `long double' to a 16 byte 12056 boundary by padding the `long double' with an additional 32 bit 12057 zero. 12058 12059 In the x86-64 compiler, `-m128bit-long-double' is the default 12060 choice as its ABI specifies that `long double' is to be aligned on 12061 16 byte boundary. 12062 12063 Notice that neither of these options enable any extra precision 12064 over the x87 standard of 80 bits for a `long double'. 12065 12066 *Warning:* if you override the default value for your target ABI, 12067 the structures and arrays containing `long double' variables will 12068 change their size as well as function calling convention for 12069 function taking `long double' will be modified. Hence they will 12070 not be binary compatible with arrays or structures in code 12071 compiled without that switch. 12072 12073`-mlarge-data-threshold=NUMBER' 12074 When `-mcmodel=medium' is specified, the data greater than 12075 THRESHOLD are placed in large data section. This value must be the 12076 same across all object linked into the binary and defaults to 12077 65535. 12078 12079`-mrtd' 12080 Use a different function-calling convention, in which functions 12081 that take a fixed number of arguments return with the `ret' NUM 12082 instruction, which pops their arguments while returning. This 12083 saves one instruction in the caller since there is no need to pop 12084 the arguments there. 12085 12086 You can specify that an individual function is called with this 12087 calling sequence with the function attribute `stdcall'. You can 12088 also override the `-mrtd' option by using the function attribute 12089 `cdecl'. *Note Function Attributes::. 12090 12091 *Warning:* this calling convention is incompatible with the one 12092 normally used on Unix, so you cannot use it if you need to call 12093 libraries compiled with the Unix compiler. 12094 12095 Also, you must provide function prototypes for all functions that 12096 take variable numbers of arguments (including `printf'); otherwise 12097 incorrect code will be generated for calls to those functions. 12098 12099 In addition, seriously incorrect code will result if you call a 12100 function with too many arguments. (Normally, extra arguments are 12101 harmlessly ignored.) 12102 12103`-mregparm=NUM' 12104 Control how many registers are used to pass integer arguments. By 12105 default, no registers are used to pass arguments, and at most 3 12106 registers can be used. You can control this behavior for a 12107 specific function by using the function attribute `regparm'. 12108 *Note Function Attributes::. 12109 12110 *Warning:* if you use this switch, and NUM is nonzero, then you 12111 must build all modules with the same value, including any 12112 libraries. This includes the system libraries and startup modules. 12113 12114`-msseregparm' 12115 Use SSE register passing conventions for float and double arguments 12116 and return values. You can control this behavior for a specific 12117 function by using the function attribute `sseregparm'. *Note 12118 Function Attributes::. 12119 12120 *Warning:* if you use this switch then you must build all modules 12121 with the same value, including any libraries. This includes the 12122 system libraries and startup modules. 12123 12124`-mvect8-ret-in-mem' 12125 Return 8-byte vectors in memory instead of MMX registers. This is 12126 the default on Solaris 8 and 9 and VxWorks to match the ABI of the 12127 Sun Studio compilers until version 12. Later compiler versions 12128 (starting with Studio 12 Update 1) follow the ABI used by other 12129 x86 targets, which is the default on Solaris 10 and later. _Only_ 12130 use this option if you need to remain compatible with existing 12131 code produced by those previous compiler versions or older 12132 versions of GCC. 12133 12134`-mpc32' 12135`-mpc64' 12136`-mpc80' 12137 Set 80387 floating-point precision to 32, 64 or 80 bits. When 12138 `-mpc32' is specified, the significands of results of 12139 floating-point operations are rounded to 24 bits (single 12140 precision); `-mpc64' rounds the significands of results of 12141 floating-point operations to 53 bits (double precision) and 12142 `-mpc80' rounds the significands of results of floating-point 12143 operations to 64 bits (extended double precision), which is the 12144 default. When this option is used, floating-point operations in 12145 higher precisions are not available to the programmer without 12146 setting the FPU control word explicitly. 12147 12148 Setting the rounding of floating-point operations to less than the 12149 default 80 bits can speed some programs by 2% or more. Note that 12150 some mathematical libraries assume that extended precision (80 12151 bit) floating-point operations are enabled by default; routines in 12152 such libraries could suffer significant loss of accuracy, 12153 typically through so-called "catastrophic cancellation", when this 12154 option is used to set the precision to less than extended 12155 precision. 12156 12157`-mstackrealign' 12158 Realign the stack at entry. On the Intel x86, the `-mstackrealign' 12159 option will generate an alternate prologue and epilogue that 12160 realigns the runtime stack if necessary. This supports mixing 12161 legacy codes that keep a 4-byte aligned stack with modern codes 12162 that keep a 16-byte stack for SSE compatibility. See also the 12163 attribute `force_align_arg_pointer', applicable to individual 12164 functions. 12165 12166`-mpreferred-stack-boundary=NUM' 12167 Attempt to keep the stack boundary aligned to a 2 raised to NUM 12168 byte boundary. If `-mpreferred-stack-boundary' is not specified, 12169 the default is 4 (16 bytes or 128 bits). 12170 12171`-mincoming-stack-boundary=NUM' 12172 Assume the incoming stack is aligned to a 2 raised to NUM byte 12173 boundary. If `-mincoming-stack-boundary' is not specified, the 12174 one specified by `-mpreferred-stack-boundary' will be used. 12175 12176 On Pentium and PentiumPro, `double' and `long double' values 12177 should be aligned to an 8 byte boundary (see `-malign-double') or 12178 suffer significant run time performance penalties. On Pentium 12179 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 12180 work properly if it is not 16 byte aligned. 12181 12182 To ensure proper alignment of this values on the stack, the stack 12183 boundary must be as aligned as that required by any value stored 12184 on the stack. Further, every function must be generated such that 12185 it keeps the stack aligned. Thus calling a function compiled with 12186 a higher preferred stack boundary from a function compiled with a 12187 lower preferred stack boundary will most likely misalign the 12188 stack. It is recommended that libraries that use callbacks always 12189 use the default setting. 12190 12191 This extra alignment does consume extra stack space, and generally 12192 increases code size. Code that is sensitive to stack space usage, 12193 such as embedded systems and operating system kernels, may want to 12194 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 12195 12196`-mmmx' 12197`-mno-mmx' 12198`-msse' 12199`-mno-sse' 12200`-msse2' 12201`-mno-sse2' 12202`-msse3' 12203`-mno-sse3' 12204`-mssse3' 12205`-mno-ssse3' 12206`-msse4.1' 12207`-mno-sse4.1' 12208`-msse4.2' 12209`-mno-sse4.2' 12210`-msse4' 12211`-mno-sse4' 12212`-mavx' 12213`-mno-avx' 12214`-maes' 12215`-mno-aes' 12216`-mpclmul' 12217`-mno-pclmul' 12218`-mfsgsbase' 12219`-mno-fsgsbase' 12220`-mrdrnd' 12221`-mno-rdrnd' 12222`-mf16c' 12223`-mno-f16c' 12224`-msse4a' 12225`-mno-sse4a' 12226`-mfma4' 12227`-mno-fma4' 12228`-mxop' 12229`-mno-xop' 12230`-mlwp' 12231`-mno-lwp' 12232`-m3dnow' 12233`-mno-3dnow' 12234`-mpopcnt' 12235`-mno-popcnt' 12236`-mabm' 12237`-mno-abm' 12238`-mbmi' 12239`-mno-bmi' 12240`-mtbm' 12241`-mno-tbm' 12242 These switches enable or disable the use of instructions in the 12243 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, FSGSBASE, 12244 RDRND, F16C, SSE4A, FMA4, XOP, LWP, ABM, BMI, or 3DNow! extended 12245 instruction sets. These extensions are also available as built-in 12246 functions: see *note X86 Built-in Functions::, for details of the 12247 functions enabled and disabled by these switches. 12248 12249 To have SSE/SSE2 instructions generated automatically from 12250 floating-point code (as opposed to 387 instructions), see 12251 `-mfpmath=sse'. 12252 12253 GCC depresses SSEx instructions when `-mavx' is used. Instead, it 12254 generates new AVX instructions or AVX equivalence for all SSEx 12255 instructions when needed. 12256 12257 These options will enable GCC to use these extended instructions in 12258 generated code, even without `-mfpmath=sse'. Applications which 12259 perform runtime CPU detection must compile separate files for each 12260 supported architecture, using the appropriate flags. In 12261 particular, the file containing the CPU detection code should be 12262 compiled without these options. 12263 12264`-mfused-madd' 12265`-mno-fused-madd' 12266 Do (don't) generate code that uses the fused multiply/add or 12267 multiply/subtract instructions. The default is to use these 12268 instructions. 12269 12270`-mcld' 12271 This option instructs GCC to emit a `cld' instruction in the 12272 prologue of functions that use string instructions. String 12273 instructions depend on the DF flag to select between autoincrement 12274 or autodecrement mode. While the ABI specifies the DF flag to be 12275 cleared on function entry, some operating systems violate this 12276 specification by not clearing the DF flag in their exception 12277 dispatchers. The exception handler can be invoked with the DF flag 12278 set which leads to wrong direction mode, when string instructions 12279 are used. This option can be enabled by default on 32-bit x86 12280 targets by configuring GCC with the `--enable-cld' configure 12281 option. Generation of `cld' instructions can be suppressed with 12282 the `-mno-cld' compiler option in this case. 12283 12284`-mvzeroupper' 12285 This option instructs GCC to emit a `vzeroupper' instruction 12286 before a transfer of control flow out of the function to minimize 12287 AVX to SSE transition penalty as well as remove unnecessary 12288 zeroupper intrinsics. 12289 12290`-mcx16' 12291 This option will enable GCC to use CMPXCHG16B instruction in 12292 generated code. CMPXCHG16B allows for atomic operations on 12293 128-bit double quadword (or oword) data types. This is useful for 12294 high resolution counters that could be updated by multiple 12295 processors (or cores). This instruction is generated as part of 12296 atomic built-in functions: see *note Atomic Builtins:: for details. 12297 12298`-msahf' 12299 This option will enable GCC to use SAHF instruction in generated 12300 64-bit code. Early Intel CPUs with Intel 64 lacked LAHF and SAHF 12301 instructions supported by AMD64 until introduction of Pentium 4 G1 12302 step in December 2005. LAHF and SAHF are load and store 12303 instructions, respectively, for certain status flags. In 64-bit 12304 mode, SAHF instruction is used to optimize `fmod', `drem' or 12305 `remainder' built-in functions: see *note Other Builtins:: for 12306 details. 12307 12308`-mmovbe' 12309 This option will enable GCC to use movbe instruction to implement 12310 `__builtin_bswap32' and `__builtin_bswap64'. 12311 12312`-mcrc32' 12313 This option will enable built-in functions, 12314 `__builtin_ia32_crc32qi', `__builtin_ia32_crc32hi'. 12315 `__builtin_ia32_crc32si' and `__builtin_ia32_crc32di' to generate 12316 the crc32 machine instruction. 12317 12318`-mrecip' 12319 This option will enable GCC to use RCPSS and RSQRTSS instructions 12320 (and their vectorized variants RCPPS and RSQRTPS) with an 12321 additional Newton-Raphson step to increase precision instead of 12322 DIVSS and SQRTSS (and their vectorized variants) for single 12323 precision floating point arguments. These instructions are 12324 generated only when `-funsafe-math-optimizations' is enabled 12325 together with `-finite-math-only' and `-fno-trapping-math'. Note 12326 that while the throughput of the sequence is higher than the 12327 throughput of the non-reciprocal instruction, the precision of the 12328 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 12329 equals 0.99999994). 12330 12331 Note that GCC implements 1.0f/sqrtf(x) in terms of RSQRTSS (or 12332 RSQRTPS) already with `-ffast-math' (or the above option 12333 combination), and doesn't need `-mrecip'. 12334 12335`-mveclibabi=TYPE' 12336 Specifies the ABI type to use for vectorizing intrinsics using an 12337 external library. Supported types are `svml' for the Intel short 12338 vector math library and `acml' for the AMD math core library style 12339 of interfacing. GCC will currently emit calls to `vmldExp2', 12340 `vmldLn2', `vmldLog102', `vmldLog102', `vmldPow2', `vmldTanh2', 12341 `vmldTan2', `vmldAtan2', `vmldAtanh2', `vmldCbrt2', `vmldSinh2', 12342 `vmldSin2', `vmldAsinh2', `vmldAsin2', `vmldCosh2', `vmldCos2', 12343 `vmldAcosh2', `vmldAcos2', `vmlsExp4', `vmlsLn4', `vmlsLog104', 12344 `vmlsLog104', `vmlsPow4', `vmlsTanh4', `vmlsTan4', `vmlsAtan4', 12345 `vmlsAtanh4', `vmlsCbrt4', `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', 12346 `vmlsAsin4', `vmlsCosh4', `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' 12347 for corresponding function type when `-mveclibabi=svml' is used 12348 and `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log', 12349 `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', 12350 `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and 12351 `__vrs4_powf' for corresponding function type when 12352 `-mveclibabi=acml' is used. Both `-ftree-vectorize' and 12353 `-funsafe-math-optimizations' have to be enabled. A SVML or ACML 12354 ABI compatible library will have to be specified at link time. 12355 12356`-mabi=NAME' 12357 Generate code for the specified calling convention. Permissible 12358 values are: `sysv' for the ABI used on GNU/Linux and other systems 12359 and `ms' for the Microsoft ABI. The default is to use the 12360 Microsoft ABI when targeting Windows. On all other systems, the 12361 default is the SYSV ABI. You can control this behavior for a 12362 specific function by using the function attribute 12363 `ms_abi'/`sysv_abi'. *Note Function Attributes::. 12364 12365`-mpush-args' 12366`-mno-push-args' 12367 Use PUSH operations to store outgoing parameters. This method is 12368 shorter and usually equally fast as method using SUB/MOV 12369 operations and is enabled by default. In some cases disabling it 12370 may improve performance because of improved scheduling and reduced 12371 dependencies. 12372 12373`-maccumulate-outgoing-args' 12374 If enabled, the maximum amount of space required for outgoing 12375 arguments will be computed in the function prologue. This is 12376 faster on most modern CPUs because of reduced dependencies, 12377 improved scheduling and reduced stack usage when preferred stack 12378 boundary is not equal to 2. The drawback is a notable increase in 12379 code size. This switch implies `-mno-push-args'. 12380 12381`-mthreads' 12382 Support thread-safe exception handling on `Mingw32'. Code that 12383 relies on thread-safe exception handling must compile and link all 12384 code with the `-mthreads' option. When compiling, `-mthreads' 12385 defines `-D_MT'; when linking, it links in a special thread helper 12386 library `-lmingwthrd' which cleans up per thread exception 12387 handling data. 12388 12389`-mno-align-stringops' 12390 Do not align destination of inlined string operations. This 12391 switch reduces code size and improves performance in case the 12392 destination is already aligned, but GCC doesn't know about it. 12393 12394`-minline-all-stringops' 12395 By default GCC inlines string operations only when destination is 12396 known to be aligned at least to 4 byte boundary. This enables 12397 more inlining, increase code size, but may improve performance of 12398 code that depends on fast memcpy, strlen and memset for short 12399 lengths. 12400 12401`-minline-stringops-dynamically' 12402 For string operation of unknown size, inline runtime checks so for 12403 small blocks inline code is used, while for large blocks library 12404 call is used. 12405 12406`-mstringop-strategy=ALG' 12407 Overwrite internal decision heuristic about particular algorithm 12408 to inline string operation with. The allowed values are 12409 `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386 12410 `rep' prefix of specified size, `byte_loop', `loop', 12411 `unrolled_loop' for expanding inline loop, `libcall' for always 12412 expanding library call. 12413 12414`-momit-leaf-frame-pointer' 12415 Don't keep the frame pointer in a register for leaf functions. 12416 This avoids the instructions to save, set up and restore frame 12417 pointers and makes an extra register available in leaf functions. 12418 The option `-fomit-frame-pointer' removes the frame pointer for 12419 all functions which might make debugging harder. 12420 12421`-mtls-direct-seg-refs' 12422`-mno-tls-direct-seg-refs' 12423 Controls whether TLS variables may be accessed with offsets from 12424 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 12425 whether the thread base pointer must be added. Whether or not this 12426 is legal depends on the operating system, and whether it maps the 12427 segment to cover the entire TLS area. 12428 12429 For systems that use GNU libc, the default is on. 12430 12431`-msse2avx' 12432`-mno-sse2avx' 12433 Specify that the assembler should encode SSE instructions with VEX 12434 prefix. The option `-mavx' turns this on by default. 12435 12436`-mfentry' 12437`-mno-fentry' 12438 If profiling is active `-pg' put the profiling counter call before 12439 prologue. Note: On x86 architectures the attribute 12440 `ms_hook_prologue' isn't possible at the moment for `-mfentry' and 12441 `-pg'. 12442 12443`-m8bit-idiv' 12444`-mno-8bit-idiv' 12445 On some processors, like Intel Atom, 8bit unsigned integer divide 12446 is much faster than 32bit/64bit integer divide. This option will 12447 generate a runt-time check. If both dividend and divisor are 12448 within range of 0 to 255, 8bit unsigned integer divide will be 12449 used instead of 32bit/64bit integer divide. 12450 12451 12452 These `-m' switches are supported in addition to the above on AMD 12453x86-64 processors in 64-bit environments. 12454 12455`-m32' 12456`-m64' 12457 Generate code for a 32-bit or 64-bit environment. The 32-bit 12458 environment sets int, long and pointer to 32 bits and generates 12459 code that runs on any i386 system. The 64-bit environment sets 12460 int to 32 bits and long and pointer to 64 bits and generates code 12461 for AMD's x86-64 architecture. For darwin only the -m64 option 12462 turns off the `-fno-pic' and `-mdynamic-no-pic' options. 12463 12464`-mno-red-zone' 12465 Do not use a so called red zone for x86-64 code. The red zone is 12466 mandated by the x86-64 ABI, it is a 128-byte area beyond the 12467 location of the stack pointer that will not be modified by signal 12468 or interrupt handlers and therefore can be used for temporary data 12469 without adjusting the stack pointer. The flag `-mno-red-zone' 12470 disables this red zone. 12471 12472`-mcmodel=small' 12473 Generate code for the small code model: the program and its 12474 symbols must be linked in the lower 2 GB of the address space. 12475 Pointers are 64 bits. Programs can be statically or dynamically 12476 linked. This is the default code model. 12477 12478`-mcmodel=kernel' 12479 Generate code for the kernel code model. The kernel runs in the 12480 negative 2 GB of the address space. This model has to be used for 12481 Linux kernel code. 12482 12483`-mcmodel=medium' 12484 Generate code for the medium model: The program is linked in the 12485 lower 2 GB of the address space. Small symbols are also placed 12486 there. Symbols with sizes larger than `-mlarge-data-threshold' 12487 are put into large data or bss sections and can be located above 12488 2GB. Programs can be statically or dynamically linked. 12489 12490`-mcmodel=large' 12491 Generate code for the large model: This model makes no assumptions 12492 about addresses and sizes of sections. 12493 12494 12495File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options 12496 124973.17.16 i386 and x86-64 Windows Options 12498--------------------------------------- 12499 12500These additional options are available for Windows targets: 12501 12502`-mconsole' 12503 This option is available for Cygwin and MinGW targets. It 12504 specifies that a console application is to be generated, by 12505 instructing the linker to set the PE header subsystem type 12506 required for console applications. This is the default behavior 12507 for Cygwin and MinGW targets. 12508 12509`-mdll' 12510 This option is available for Cygwin and MinGW targets. It 12511 specifies that a DLL - a dynamic link library - is to be 12512 generated, enabling the selection of the required runtime startup 12513 object and entry point. 12514 12515`-mnop-fun-dllimport' 12516 This option is available for Cygwin and MinGW targets. It 12517 specifies that the dllimport attribute should be ignored. 12518 12519`-mthread' 12520 This option is available for MinGW targets. It specifies that 12521 MinGW-specific thread support is to be used. 12522 12523`-municode' 12524 This option is available for mingw-w64 targets. It specifies that 12525 the UNICODE macro is getting pre-defined and that the unicode 12526 capable runtime startup code is chosen. 12527 12528`-mwin32' 12529 This option is available for Cygwin and MinGW targets. It 12530 specifies that the typical Windows pre-defined macros are to be 12531 set in the pre-processor, but does not influence the choice of 12532 runtime library/startup code. 12533 12534`-mwindows' 12535 This option is available for Cygwin and MinGW targets. It 12536 specifies that a GUI application is to be generated by instructing 12537 the linker to set the PE header subsystem type appropriately. 12538 12539`-fno-set-stack-executable' 12540 This option is available for MinGW targets. It specifies that the 12541 executable flag for stack used by nested functions isn't set. This 12542 is necessary for binaries running in kernel mode of Windows, as 12543 there the user32 API, which is used to set executable privileges, 12544 isn't available. 12545 12546`-mpe-aligned-commons' 12547 This option is available for Cygwin and MinGW targets. It 12548 specifies that the GNU extension to the PE file format that 12549 permits the correct alignment of COMMON variables should be used 12550 when generating code. It will be enabled by default if GCC 12551 detects that the target assembler found during configuration 12552 supports the feature. 12553 12554 See also under *note i386 and x86-64 Options:: for standard options. 12555 12556 12557File: gcc.info, Node: IA-64 Options, Next: IA-64/VMS Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options 12558 125593.17.17 IA-64 Options 12560--------------------- 12561 12562These are the `-m' options defined for the Intel IA-64 architecture. 12563 12564`-mbig-endian' 12565 Generate code for a big endian target. This is the default for 12566 HP-UX. 12567 12568`-mlittle-endian' 12569 Generate code for a little endian target. This is the default for 12570 AIX5 and GNU/Linux. 12571 12572`-mgnu-as' 12573`-mno-gnu-as' 12574 Generate (or don't) code for the GNU assembler. This is the 12575 default. 12576 12577`-mgnu-ld' 12578`-mno-gnu-ld' 12579 Generate (or don't) code for the GNU linker. This is the default. 12580 12581`-mno-pic' 12582 Generate code that does not use a global pointer register. The 12583 result is not position independent code, and violates the IA-64 12584 ABI. 12585 12586`-mvolatile-asm-stop' 12587`-mno-volatile-asm-stop' 12588 Generate (or don't) a stop bit immediately before and after 12589 volatile asm statements. 12590 12591`-mregister-names' 12592`-mno-register-names' 12593 Generate (or don't) `in', `loc', and `out' register names for the 12594 stacked registers. This may make assembler output more readable. 12595 12596`-mno-sdata' 12597`-msdata' 12598 Disable (or enable) optimizations that use the small data section. 12599 This may be useful for working around optimizer bugs. 12600 12601`-mconstant-gp' 12602 Generate code that uses a single constant global pointer value. 12603 This is useful when compiling kernel code. 12604 12605`-mauto-pic' 12606 Generate code that is self-relocatable. This implies 12607 `-mconstant-gp'. This is useful when compiling firmware code. 12608 12609`-minline-float-divide-min-latency' 12610 Generate code for inline divides of floating point values using 12611 the minimum latency algorithm. 12612 12613`-minline-float-divide-max-throughput' 12614 Generate code for inline divides of floating point values using 12615 the maximum throughput algorithm. 12616 12617`-mno-inline-float-divide' 12618 Do not generate inline code for divides of floating point values. 12619 12620`-minline-int-divide-min-latency' 12621 Generate code for inline divides of integer values using the 12622 minimum latency algorithm. 12623 12624`-minline-int-divide-max-throughput' 12625 Generate code for inline divides of integer values using the 12626 maximum throughput algorithm. 12627 12628`-mno-inline-int-divide' 12629 Do not generate inline code for divides of integer values. 12630 12631`-minline-sqrt-min-latency' 12632 Generate code for inline square roots using the minimum latency 12633 algorithm. 12634 12635`-minline-sqrt-max-throughput' 12636 Generate code for inline square roots using the maximum throughput 12637 algorithm. 12638 12639`-mno-inline-sqrt' 12640 Do not generate inline code for sqrt. 12641 12642`-mfused-madd' 12643`-mno-fused-madd' 12644 Do (don't) generate code that uses the fused multiply/add or 12645 multiply/subtract instructions. The default is to use these 12646 instructions. 12647 12648`-mno-dwarf2-asm' 12649`-mdwarf2-asm' 12650 Don't (or do) generate assembler code for the DWARF2 line number 12651 debugging info. This may be useful when not using the GNU 12652 assembler. 12653 12654`-mearly-stop-bits' 12655`-mno-early-stop-bits' 12656 Allow stop bits to be placed earlier than immediately preceding the 12657 instruction that triggered the stop bit. This can improve 12658 instruction scheduling, but does not always do so. 12659 12660`-mfixed-range=REGISTER-RANGE' 12661 Generate code treating the given register range as fixed registers. 12662 A fixed register is one that the register allocator can not use. 12663 This is useful when compiling kernel code. A register range is 12664 specified as two registers separated by a dash. Multiple register 12665 ranges can be specified separated by a comma. 12666 12667`-mtls-size=TLS-SIZE' 12668 Specify bit size of immediate TLS offsets. Valid values are 14, 12669 22, and 64. 12670 12671`-mtune=CPU-TYPE' 12672 Tune the instruction scheduling for a particular CPU, Valid values 12673 are itanium, itanium1, merced, itanium2, and mckinley. 12674 12675`-milp32' 12676`-mlp64' 12677 Generate code for a 32-bit or 64-bit environment. The 32-bit 12678 environment sets int, long and pointer to 32 bits. The 64-bit 12679 environment sets int to 32 bits and long and pointer to 64 bits. 12680 These are HP-UX specific flags. 12681 12682`-mno-sched-br-data-spec' 12683`-msched-br-data-spec' 12684 (Dis/En)able data speculative scheduling before reload. This will 12685 result in generation of the ld.a instructions and the 12686 corresponding check instructions (ld.c / chk.a). The default is 12687 'disable'. 12688 12689`-msched-ar-data-spec' 12690`-mno-sched-ar-data-spec' 12691 (En/Dis)able data speculative scheduling after reload. This will 12692 result in generation of the ld.a instructions and the 12693 corresponding check instructions (ld.c / chk.a). The default is 12694 'enable'. 12695 12696`-mno-sched-control-spec' 12697`-msched-control-spec' 12698 (Dis/En)able control speculative scheduling. This feature is 12699 available only during region scheduling (i.e. before reload). 12700 This will result in generation of the ld.s instructions and the 12701 corresponding check instructions chk.s . The default is 'disable'. 12702 12703`-msched-br-in-data-spec' 12704`-mno-sched-br-in-data-spec' 12705 (En/Dis)able speculative scheduling of the instructions that are 12706 dependent on the data speculative loads before reload. This is 12707 effective only with `-msched-br-data-spec' enabled. The default 12708 is 'enable'. 12709 12710`-msched-ar-in-data-spec' 12711`-mno-sched-ar-in-data-spec' 12712 (En/Dis)able speculative scheduling of the instructions that are 12713 dependent on the data speculative loads after reload. This is 12714 effective only with `-msched-ar-data-spec' enabled. The default 12715 is 'enable'. 12716 12717`-msched-in-control-spec' 12718`-mno-sched-in-control-spec' 12719 (En/Dis)able speculative scheduling of the instructions that are 12720 dependent on the control speculative loads. This is effective 12721 only with `-msched-control-spec' enabled. The default is 'enable'. 12722 12723`-mno-sched-prefer-non-data-spec-insns' 12724`-msched-prefer-non-data-spec-insns' 12725 If enabled, data speculative instructions will be chosen for 12726 schedule only if there are no other choices at the moment. This 12727 will make the use of the data speculation much more conservative. 12728 The default is 'disable'. 12729 12730`-mno-sched-prefer-non-control-spec-insns' 12731`-msched-prefer-non-control-spec-insns' 12732 If enabled, control speculative instructions will be chosen for 12733 schedule only if there are no other choices at the moment. This 12734 will make the use of the control speculation much more 12735 conservative. The default is 'disable'. 12736 12737`-mno-sched-count-spec-in-critical-path' 12738`-msched-count-spec-in-critical-path' 12739 If enabled, speculative dependencies will be considered during 12740 computation of the instructions priorities. This will make the 12741 use of the speculation a bit more conservative. The default is 12742 'disable'. 12743 12744`-msched-spec-ldc' 12745 Use a simple data speculation check. This option is on by default. 12746 12747`-msched-control-spec-ldc' 12748 Use a simple check for control speculation. This option is on by 12749 default. 12750 12751`-msched-stop-bits-after-every-cycle' 12752 Place a stop bit after every cycle when scheduling. This option 12753 is on by default. 12754 12755`-msched-fp-mem-deps-zero-cost' 12756 Assume that floating-point stores and loads are not likely to 12757 cause a conflict when placed into the same instruction group. 12758 This option is disabled by default. 12759 12760`-msel-sched-dont-check-control-spec' 12761 Generate checks for control speculation in selective scheduling. 12762 This flag is disabled by default. 12763 12764`-msched-max-memory-insns=MAX-INSNS' 12765 Limit on the number of memory insns per instruction group, giving 12766 lower priority to subsequent memory insns attempting to schedule 12767 in the same instruction group. Frequently useful to prevent cache 12768 bank conflicts. The default value is 1. 12769 12770`-msched-max-memory-insns-hard-limit' 12771 Disallow more than `msched-max-memory-insns' in instruction group. 12772 Otherwise, limit is `soft' meaning that we would prefer non-memory 12773 operations when limit is reached but may still schedule memory 12774 operations. 12775 12776 12777 12778File: gcc.info, Node: IA-64/VMS Options, Next: LM32 Options, Prev: IA-64 Options, Up: Submodel Options 12779 127803.17.18 IA-64/VMS Options 12781------------------------- 12782 12783These `-m' options are defined for the IA-64/VMS implementations: 12784 12785`-mvms-return-codes' 12786 Return VMS condition codes from main. The default is to return 12787 POSIX style condition (e.g. error) codes. 12788 12789`-mdebug-main=PREFIX' 12790 Flag the first routine whose name starts with PREFIX as the main 12791 routine for the debugger. 12792 12793`-mmalloc64' 12794 Default to 64bit memory allocation routines. 12795 12796 12797File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64/VMS Options, Up: Submodel Options 12798 127993.17.19 LM32 Options 12800-------------------- 12801 12802These `-m' options are defined for the Lattice Mico32 architecture: 12803 12804`-mbarrel-shift-enabled' 12805 Enable barrel-shift instructions. 12806 12807`-mdivide-enabled' 12808 Enable divide and modulus instructions. 12809 12810`-mmultiply-enabled' 12811 Enable multiply instructions. 12812 12813`-msign-extend-enabled' 12814 Enable sign extend instructions. 12815 12816`-muser-enabled' 12817 Enable user-defined instructions. 12818 12819 12820 12821File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options 12822 128233.17.20 M32C Options 12824-------------------- 12825 12826`-mcpu=NAME' 12827 Select the CPU for which code is generated. NAME may be one of 12828 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 12829 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 12830 series. 12831 12832`-msim' 12833 Specifies that the program will be run on the simulator. This 12834 causes an alternate runtime library to be linked in which 12835 supports, for example, file I/O. You must not use this option 12836 when generating programs that will run on real hardware; you must 12837 provide your own runtime library for whatever I/O functions are 12838 needed. 12839 12840`-memregs=NUMBER' 12841 Specifies the number of memory-based pseudo-registers GCC will use 12842 during code generation. These pseudo-registers will be used like 12843 real registers, so there is a tradeoff between GCC's ability to 12844 fit the code into available registers, and the performance penalty 12845 of using memory instead of registers. Note that all modules in a 12846 program must be compiled with the same value for this option. 12847 Because of that, you must not use this option with the default 12848 runtime libraries gcc builds. 12849 12850 12851 12852File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 12853 128543.17.21 M32R/D Options 12855---------------------- 12856 12857These `-m' options are defined for Renesas M32R/D architectures: 12858 12859`-m32r2' 12860 Generate code for the M32R/2. 12861 12862`-m32rx' 12863 Generate code for the M32R/X. 12864 12865`-m32r' 12866 Generate code for the M32R. This is the default. 12867 12868`-mmodel=small' 12869 Assume all objects live in the lower 16MB of memory (so that their 12870 addresses can be loaded with the `ld24' instruction), and assume 12871 all subroutines are reachable with the `bl' instruction. This is 12872 the default. 12873 12874 The addressability of a particular object can be set with the 12875 `model' attribute. 12876 12877`-mmodel=medium' 12878 Assume objects may be anywhere in the 32-bit address space (the 12879 compiler will generate `seth/add3' instructions to load their 12880 addresses), and assume all subroutines are reachable with the `bl' 12881 instruction. 12882 12883`-mmodel=large' 12884 Assume objects may be anywhere in the 32-bit address space (the 12885 compiler will generate `seth/add3' instructions to load their 12886 addresses), and assume subroutines may not be reachable with the 12887 `bl' instruction (the compiler will generate the much slower 12888 `seth/add3/jl' instruction sequence). 12889 12890`-msdata=none' 12891 Disable use of the small data area. Variables will be put into 12892 one of `.data', `bss', or `.rodata' (unless the `section' 12893 attribute has been specified). This is the default. 12894 12895 The small data area consists of sections `.sdata' and `.sbss'. 12896 Objects may be explicitly put in the small data area with the 12897 `section' attribute using one of these sections. 12898 12899`-msdata=sdata' 12900 Put small global and static data in the small data area, but do not 12901 generate special code to reference them. 12902 12903`-msdata=use' 12904 Put small global and static data in the small data area, and 12905 generate special instructions to reference them. 12906 12907`-G NUM' 12908 Put global and static objects less than or equal to NUM bytes into 12909 the small data or bss sections instead of the normal data or bss 12910 sections. The default value of NUM is 8. The `-msdata' option 12911 must be set to one of `sdata' or `use' for this option to have any 12912 effect. 12913 12914 All modules should be compiled with the same `-G NUM' value. 12915 Compiling with different values of NUM may or may not work; if it 12916 doesn't the linker will give an error message--incorrect code will 12917 not be generated. 12918 12919`-mdebug' 12920 Makes the M32R specific code in the compiler display some 12921 statistics that might help in debugging programs. 12922 12923`-malign-loops' 12924 Align all loops to a 32-byte boundary. 12925 12926`-mno-align-loops' 12927 Do not enforce a 32-byte alignment for loops. This is the default. 12928 12929`-missue-rate=NUMBER' 12930 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 12931 12932`-mbranch-cost=NUMBER' 12933 NUMBER can only be 1 or 2. If it is 1 then branches will be 12934 preferred over conditional code, if it is 2, then the opposite will 12935 apply. 12936 12937`-mflush-trap=NUMBER' 12938 Specifies the trap number to use to flush the cache. The default 12939 is 12. Valid numbers are between 0 and 15 inclusive. 12940 12941`-mno-flush-trap' 12942 Specifies that the cache cannot be flushed by using a trap. 12943 12944`-mflush-func=NAME' 12945 Specifies the name of the operating system function to call to 12946 flush the cache. The default is __flush_cache_, but a function 12947 call will only be used if a trap is not available. 12948 12949`-mno-flush-func' 12950 Indicates that there is no OS function for flushing the cache. 12951 12952 12953 12954File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Prev: M32R/D Options, Up: Submodel Options 12955 129563.17.22 M680x0 Options 12957---------------------- 12958 12959These are the `-m' options defined for M680x0 and ColdFire processors. 12960The default settings depend on which architecture was selected when the 12961compiler was configured; the defaults for the most common choices are 12962given below. 12963 12964`-march=ARCH' 12965 Generate code for a specific M680x0 or ColdFire instruction set 12966 architecture. Permissible values of ARCH for M680x0 architectures 12967 are: `68000', `68010', `68020', `68030', `68040', `68060' and 12968 `cpu32'. ColdFire architectures are selected according to 12969 Freescale's ISA classification and the permissible values are: 12970 `isaa', `isaaplus', `isab' and `isac'. 12971 12972 gcc defines a macro `__mcfARCH__' whenever it is generating code 12973 for a ColdFire target. The ARCH in this macro is one of the 12974 `-march' arguments given above. 12975 12976 When used together, `-march' and `-mtune' select code that runs on 12977 a family of similar processors but that is optimized for a 12978 particular microarchitecture. 12979 12980`-mcpu=CPU' 12981 Generate code for a specific M680x0 or ColdFire processor. The 12982 M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040', 12983 `68060', `68302', `68332' and `cpu32'. The ColdFire CPUs are 12984 given by the table below, which also classifies the CPUs into 12985 families: 12986 12987 *Family* *`-mcpu' arguments* 12988 `51' `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg' 12989 `51jm' `51mm' `51qe' `51qm' 12990 `5206' `5202' `5204' `5206' 12991 `5206e' `5206e' 12992 `5208' `5207' `5208' 12993 `5211a' `5210a' `5211a' 12994 `5213' `5211' `5212' `5213' 12995 `5216' `5214' `5216' 12996 `52235' `52230' `52231' `52232' `52233' `52234' `52235' 12997 `5225' `5224' `5225' 12998 `52259' `52252' `52254' `52255' `52256' `52258' `52259' 12999 `5235' `5232' `5233' `5234' `5235' `523x' 13000 `5249' `5249' 13001 `5250' `5250' 13002 `5271' `5270' `5271' 13003 `5272' `5272' 13004 `5275' `5274' `5275' 13005 `5282' `5280' `5281' `5282' `528x' 13006 `53017' `53011' `53012' `53013' `53014' `53015' `53016' 13007 `53017' 13008 `5307' `5307' 13009 `5329' `5327' `5328' `5329' `532x' 13010 `5373' `5372' `5373' `537x' 13011 `5407' `5407' 13012 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x' 13013 `5480' `5481' `5482' `5483' `5484' `5485' 13014 13015 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with 13016 CPU. Other combinations of `-mcpu' and `-march' are rejected. 13017 13018 gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is 13019 selected. It also defines `__mcf_family_FAMILY', where the value 13020 of FAMILY is given by the table above. 13021 13022`-mtune=TUNE' 13023 Tune the code for a particular microarchitecture, within the 13024 constraints set by `-march' and `-mcpu'. The M680x0 13025 microarchitectures are: `68000', `68010', `68020', `68030', 13026 `68040', `68060' and `cpu32'. The ColdFire microarchitectures 13027 are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'. 13028 13029 You can also use `-mtune=68020-40' for code that needs to run 13030 relatively well on 68020, 68030 and 68040 targets. 13031 `-mtune=68020-60' is similar but includes 68060 targets as well. 13032 These two options select the same tuning decisions as `-m68020-40' 13033 and `-m68020-60' respectively. 13034 13035 gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for 13036 680x0 architecture ARCH. It also defines `mcARCH' unless either 13037 `-ansi' or a non-GNU `-std' option is used. If gcc is tuning for 13038 a range of architectures, as selected by `-mtune=68020-40' or 13039 `-mtune=68020-60', it defines the macros for every architecture in 13040 the range. 13041 13042 gcc also defines the macro `__mUARCH__' when tuning for ColdFire 13043 microarchitecture UARCH, where UARCH is one of the arguments given 13044 above. 13045 13046`-m68000' 13047`-mc68000' 13048 Generate output for a 68000. This is the default when the 13049 compiler is configured for 68000-based systems. It is equivalent 13050 to `-march=68000'. 13051 13052 Use this option for microcontrollers with a 68000 or EC000 core, 13053 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 13054 13055`-m68010' 13056 Generate output for a 68010. This is the default when the 13057 compiler is configured for 68010-based systems. It is equivalent 13058 to `-march=68010'. 13059 13060`-m68020' 13061`-mc68020' 13062 Generate output for a 68020. This is the default when the 13063 compiler is configured for 68020-based systems. It is equivalent 13064 to `-march=68020'. 13065 13066`-m68030' 13067 Generate output for a 68030. This is the default when the 13068 compiler is configured for 68030-based systems. It is equivalent 13069 to `-march=68030'. 13070 13071`-m68040' 13072 Generate output for a 68040. This is the default when the 13073 compiler is configured for 68040-based systems. It is equivalent 13074 to `-march=68040'. 13075 13076 This option inhibits the use of 68881/68882 instructions that have 13077 to be emulated by software on the 68040. Use this option if your 13078 68040 does not have code to emulate those instructions. 13079 13080`-m68060' 13081 Generate output for a 68060. This is the default when the 13082 compiler is configured for 68060-based systems. It is equivalent 13083 to `-march=68060'. 13084 13085 This option inhibits the use of 68020 and 68881/68882 instructions 13086 that have to be emulated by software on the 68060. Use this 13087 option if your 68060 does not have code to emulate those 13088 instructions. 13089 13090`-mcpu32' 13091 Generate output for a CPU32. This is the default when the 13092 compiler is configured for CPU32-based systems. It is equivalent 13093 to `-march=cpu32'. 13094 13095 Use this option for microcontrollers with a CPU32 or CPU32+ core, 13096 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 13097 68341, 68349 and 68360. 13098 13099`-m5200' 13100 Generate output for a 520X ColdFire CPU. This is the default when 13101 the compiler is configured for 520X-based systems. It is 13102 equivalent to `-mcpu=5206', and is now deprecated in favor of that 13103 option. 13104 13105 Use this option for microcontroller with a 5200 core, including 13106 the MCF5202, MCF5203, MCF5204 and MCF5206. 13107 13108`-m5206e' 13109 Generate output for a 5206e ColdFire CPU. The option is now 13110 deprecated in favor of the equivalent `-mcpu=5206e'. 13111 13112`-m528x' 13113 Generate output for a member of the ColdFire 528X family. The 13114 option is now deprecated in favor of the equivalent `-mcpu=528x'. 13115 13116`-m5307' 13117 Generate output for a ColdFire 5307 CPU. The option is now 13118 deprecated in favor of the equivalent `-mcpu=5307'. 13119 13120`-m5407' 13121 Generate output for a ColdFire 5407 CPU. The option is now 13122 deprecated in favor of the equivalent `-mcpu=5407'. 13123 13124`-mcfv4e' 13125 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 13126 This includes use of hardware floating point instructions. The 13127 option is equivalent to `-mcpu=547x', and is now deprecated in 13128 favor of that option. 13129 13130`-m68020-40' 13131 Generate output for a 68040, without using any of the new 13132 instructions. This results in code which can run relatively 13133 efficiently on either a 68020/68881 or a 68030 or a 68040. The 13134 generated code does use the 68881 instructions that are emulated 13135 on the 68040. 13136 13137 The option is equivalent to `-march=68020' `-mtune=68020-40'. 13138 13139`-m68020-60' 13140 Generate output for a 68060, without using any of the new 13141 instructions. This results in code which can run relatively 13142 efficiently on either a 68020/68881 or a 68030 or a 68040. The 13143 generated code does use the 68881 instructions that are emulated 13144 on the 68060. 13145 13146 The option is equivalent to `-march=68020' `-mtune=68020-60'. 13147 13148`-mhard-float' 13149`-m68881' 13150 Generate floating-point instructions. This is the default for 13151 68020 and above, and for ColdFire devices that have an FPU. It 13152 defines the macro `__HAVE_68881__' on M680x0 targets and 13153 `__mcffpu__' on ColdFire targets. 13154 13155`-msoft-float' 13156 Do not generate floating-point instructions; use library calls 13157 instead. This is the default for 68000, 68010, and 68832 targets. 13158 It is also the default for ColdFire devices that have no FPU. 13159 13160`-mdiv' 13161`-mno-div' 13162 Generate (do not generate) ColdFire hardware divide and remainder 13163 instructions. If `-march' is used without `-mcpu', the default is 13164 "on" for ColdFire architectures and "off" for M680x0 13165 architectures. Otherwise, the default is taken from the target CPU 13166 (either the default CPU, or the one specified by `-mcpu'). For 13167 example, the default is "off" for `-mcpu=5206' and "on" for 13168 `-mcpu=5206e'. 13169 13170 gcc defines the macro `__mcfhwdiv__' when this option is enabled. 13171 13172`-mshort' 13173 Consider type `int' to be 16 bits wide, like `short int'. 13174 Additionally, parameters passed on the stack are also aligned to a 13175 16-bit boundary even on targets whose API mandates promotion to 13176 32-bit. 13177 13178`-mno-short' 13179 Do not consider type `int' to be 16 bits wide. This is the 13180 default. 13181 13182`-mnobitfield' 13183`-mno-bitfield' 13184 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 13185 and `-m5200' options imply `-mnobitfield'. 13186 13187`-mbitfield' 13188 Do use the bit-field instructions. The `-m68020' option implies 13189 `-mbitfield'. This is the default if you use a configuration 13190 designed for a 68020. 13191 13192`-mrtd' 13193 Use a different function-calling convention, in which functions 13194 that take a fixed number of arguments return with the `rtd' 13195 instruction, which pops their arguments while returning. This 13196 saves one instruction in the caller since there is no need to pop 13197 the arguments there. 13198 13199 This calling convention is incompatible with the one normally used 13200 on Unix, so you cannot use it if you need to call libraries 13201 compiled with the Unix compiler. 13202 13203 Also, you must provide function prototypes for all functions that 13204 take variable numbers of arguments (including `printf'); otherwise 13205 incorrect code will be generated for calls to those functions. 13206 13207 In addition, seriously incorrect code will result if you call a 13208 function with too many arguments. (Normally, extra arguments are 13209 harmlessly ignored.) 13210 13211 The `rtd' instruction is supported by the 68010, 68020, 68030, 13212 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 13213 13214`-mno-rtd' 13215 Do not use the calling conventions selected by `-mrtd'. This is 13216 the default. 13217 13218`-malign-int' 13219`-mno-align-int' 13220 Control whether GCC aligns `int', `long', `long long', `float', 13221 `double', and `long double' variables on a 32-bit boundary 13222 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 13223 variables on 32-bit boundaries produces code that runs somewhat 13224 faster on processors with 32-bit busses at the expense of more 13225 memory. 13226 13227 *Warning:* if you use the `-malign-int' switch, GCC will align 13228 structures containing the above types differently than most 13229 published application binary interface specifications for the m68k. 13230 13231`-mpcrel' 13232 Use the pc-relative addressing mode of the 68000 directly, instead 13233 of using a global offset table. At present, this option implies 13234 `-fpic', allowing at most a 16-bit offset for pc-relative 13235 addressing. `-fPIC' is not presently supported with `-mpcrel', 13236 though this could be supported for 68020 and higher processors. 13237 13238`-mno-strict-align' 13239`-mstrict-align' 13240 Do not (do) assume that unaligned memory references will be 13241 handled by the system. 13242 13243`-msep-data' 13244 Generate code that allows the data segment to be located in a 13245 different area of memory from the text segment. This allows for 13246 execute in place in an environment without virtual memory 13247 management. This option implies `-fPIC'. 13248 13249`-mno-sep-data' 13250 Generate code that assumes that the data segment follows the text 13251 segment. This is the default. 13252 13253`-mid-shared-library' 13254 Generate code that supports shared libraries via the library ID 13255 method. This allows for execute in place and shared libraries in 13256 an environment without virtual memory management. This option 13257 implies `-fPIC'. 13258 13259`-mno-id-shared-library' 13260 Generate code that doesn't assume ID based shared libraries are 13261 being used. This is the default. 13262 13263`-mshared-library-id=n' 13264 Specified the identification number of the ID based shared library 13265 being compiled. Specifying a value of 0 will generate more 13266 compact code, specifying other values will force the allocation of 13267 that number to the current library but is no more space or time 13268 efficient than omitting this option. 13269 13270`-mxgot' 13271`-mno-xgot' 13272 When generating position-independent code for ColdFire, generate 13273 code that works if the GOT has more than 8192 entries. This code 13274 is larger and slower than code generated without this option. On 13275 M680x0 processors, this option is not needed; `-fPIC' suffices. 13276 13277 GCC normally uses a single instruction to load values from the GOT. 13278 While this is relatively efficient, it only works if the GOT is 13279 smaller than about 64k. Anything larger causes the linker to 13280 report an error such as: 13281 13282 relocation truncated to fit: R_68K_GOT16O foobar 13283 13284 If this happens, you should recompile your code with `-mxgot'. It 13285 should then work with very large GOTs. However, code generated 13286 with `-mxgot' is less efficient, since it takes 4 instructions to 13287 fetch the value of a global symbol. 13288 13289 Note that some linkers, including newer versions of the GNU linker, 13290 can create multiple GOTs and sort GOT entries. If you have such a 13291 linker, you should only need to use `-mxgot' when compiling a 13292 single object file that accesses more than 8192 GOT entries. Very 13293 few do. 13294 13295 These options have no effect unless GCC is generating 13296 position-independent code. 13297 13298 13299 13300File: gcc.info, Node: M68hc1x Options, Next: MCore Options, Prev: M680x0 Options, Up: Submodel Options 13301 133023.17.23 M68hc1x Options 13303----------------------- 13304 13305These are the `-m' options defined for the 68hc11 and 68hc12 13306microcontrollers. The default values for these options depends on 13307which style of microcontroller was selected when the compiler was 13308configured; the defaults for the most common choices are given below. 13309 13310`-m6811' 13311`-m68hc11' 13312 Generate output for a 68HC11. This is the default when the 13313 compiler is configured for 68HC11-based systems. 13314 13315`-m6812' 13316`-m68hc12' 13317 Generate output for a 68HC12. This is the default when the 13318 compiler is configured for 68HC12-based systems. 13319 13320`-m68S12' 13321`-m68hcs12' 13322 Generate output for a 68HCS12. 13323 13324`-mauto-incdec' 13325 Enable the use of 68HC12 pre and post auto-increment and 13326 auto-decrement addressing modes. 13327 13328`-minmax' 13329`-mnominmax' 13330 Enable the use of 68HC12 min and max instructions. 13331 13332`-mlong-calls' 13333`-mno-long-calls' 13334 Treat all calls as being far away (near). If calls are assumed to 13335 be far away, the compiler will use the `call' instruction to call 13336 a function and the `rtc' instruction for returning. 13337 13338`-mshort' 13339 Consider type `int' to be 16 bits wide, like `short int'. 13340 13341`-msoft-reg-count=COUNT' 13342 Specify the number of pseudo-soft registers which are used for the 13343 code generation. The maximum number is 32. Using more pseudo-soft 13344 register may or may not result in better code depending on the 13345 program. The default is 4 for 68HC11 and 2 for 68HC12. 13346 13347 13348 13349File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M68hc1x Options, Up: Submodel Options 13350 133513.17.24 MCore Options 13352--------------------- 13353 13354These are the `-m' options defined for the Motorola M*Core processors. 13355 13356`-mhardlit' 13357`-mno-hardlit' 13358 Inline constants into the code stream if it can be done in two 13359 instructions or less. 13360 13361`-mdiv' 13362`-mno-div' 13363 Use the divide instruction. (Enabled by default). 13364 13365`-mrelax-immediate' 13366`-mno-relax-immediate' 13367 Allow arbitrary sized immediates in bit operations. 13368 13369`-mwide-bitfields' 13370`-mno-wide-bitfields' 13371 Always treat bit-fields as int-sized. 13372 13373`-m4byte-functions' 13374`-mno-4byte-functions' 13375 Force all functions to be aligned to a four byte boundary. 13376 13377`-mcallgraph-data' 13378`-mno-callgraph-data' 13379 Emit callgraph information. 13380 13381`-mslow-bytes' 13382`-mno-slow-bytes' 13383 Prefer word access when reading byte quantities. 13384 13385`-mlittle-endian' 13386`-mbig-endian' 13387 Generate code for a little endian target. 13388 13389`-m210' 13390`-m340' 13391 Generate code for the 210 processor. 13392 13393`-mno-lsim' 13394 Assume that run-time support has been provided and so omit the 13395 simulator library (`libsim.a)' from the linker command line. 13396 13397`-mstack-increment=SIZE' 13398 Set the maximum amount for a single stack increment operation. 13399 Large values can increase the speed of programs which contain 13400 functions that need a large amount of stack space, but they can 13401 also trigger a segmentation fault if the stack is extended too 13402 much. The default value is 0x1000. 13403 13404 13405 13406File: gcc.info, Node: MeP Options, Next: MicroBlaze Options, Prev: MCore Options, Up: Submodel Options 13407 134083.17.25 MeP Options 13409------------------- 13410 13411`-mabsdiff' 13412 Enables the `abs' instruction, which is the absolute difference 13413 between two registers. 13414 13415`-mall-opts' 13416 Enables all the optional instructions - average, multiply, divide, 13417 bit operations, leading zero, absolute difference, min/max, clip, 13418 and saturation. 13419 13420`-maverage' 13421 Enables the `ave' instruction, which computes the average of two 13422 registers. 13423 13424`-mbased=N' 13425 Variables of size N bytes or smaller will be placed in the 13426 `.based' section by default. Based variables use the `$tp' 13427 register as a base register, and there is a 128 byte limit to the 13428 `.based' section. 13429 13430`-mbitops' 13431 Enables the bit operation instructions - bit test (`btstm'), set 13432 (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set 13433 (`tas'). 13434 13435`-mc=NAME' 13436 Selects which section constant data will be placed in. NAME may 13437 be `tiny', `near', or `far'. 13438 13439`-mclip' 13440 Enables the `clip' instruction. Note that `-mclip' is not useful 13441 unless you also provide `-mminmax'. 13442 13443`-mconfig=NAME' 13444 Selects one of the build-in core configurations. Each MeP chip has 13445 one or more modules in it; each module has a core CPU and a 13446 variety of coprocessors, optional instructions, and peripherals. 13447 The `MeP-Integrator' tool, not part of GCC, provides these 13448 configurations through this option; using this option is the same 13449 as using all the corresponding command line options. The default 13450 configuration is `default'. 13451 13452`-mcop' 13453 Enables the coprocessor instructions. By default, this is a 32-bit 13454 coprocessor. Note that the coprocessor is normally enabled via the 13455 `-mconfig=' option. 13456 13457`-mcop32' 13458 Enables the 32-bit coprocessor's instructions. 13459 13460`-mcop64' 13461 Enables the 64-bit coprocessor's instructions. 13462 13463`-mivc2' 13464 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. 13465 13466`-mdc' 13467 Causes constant variables to be placed in the `.near' section. 13468 13469`-mdiv' 13470 Enables the `div' and `divu' instructions. 13471 13472`-meb' 13473 Generate big-endian code. 13474 13475`-mel' 13476 Generate little-endian code. 13477 13478`-mio-volatile' 13479 Tells the compiler that any variable marked with the `io' 13480 attribute is to be considered volatile. 13481 13482`-ml' 13483 Causes variables to be assigned to the `.far' section by default. 13484 13485`-mleadz' 13486 Enables the `leadz' (leading zero) instruction. 13487 13488`-mm' 13489 Causes variables to be assigned to the `.near' section by default. 13490 13491`-mminmax' 13492 Enables the `min' and `max' instructions. 13493 13494`-mmult' 13495 Enables the multiplication and multiply-accumulate instructions. 13496 13497`-mno-opts' 13498 Disables all the optional instructions enabled by `-mall-opts'. 13499 13500`-mrepeat' 13501 Enables the `repeat' and `erepeat' instructions, used for 13502 low-overhead looping. 13503 13504`-ms' 13505 Causes all variables to default to the `.tiny' section. Note that 13506 there is a 65536 byte limit to this section. Accesses to these 13507 variables use the `%gp' base register. 13508 13509`-msatur' 13510 Enables the saturation instructions. Note that the compiler does 13511 not currently generate these itself, but this option is included 13512 for compatibility with other tools, like `as'. 13513 13514`-msdram' 13515 Link the SDRAM-based runtime instead of the default ROM-based 13516 runtime. 13517 13518`-msim' 13519 Link the simulator runtime libraries. 13520 13521`-msimnovec' 13522 Link the simulator runtime libraries, excluding built-in support 13523 for reset and exception vectors and tables. 13524 13525`-mtf' 13526 Causes all functions to default to the `.far' section. Without 13527 this option, functions default to the `.near' section. 13528 13529`-mtiny=N' 13530 Variables that are N bytes or smaller will be allocated to the 13531 `.tiny' section. These variables use the `$gp' base register. 13532 The default for this option is 4, but note that there's a 65536 13533 byte limit to the `.tiny' section. 13534 13535 13536 13537File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Options, Up: Submodel Options 13538 135393.17.26 MicroBlaze Options 13540-------------------------- 13541 13542`-msoft-float' 13543 Use software emulation for floating point (default). 13544 13545`-mhard-float' 13546 Use hardware floating point instructions. 13547 13548`-mmemcpy' 13549 Do not optimize block moves, use `memcpy'. 13550 13551`-mno-clearbss' 13552 This option is deprecated. Use `-fno-zero-initialized-in-bss' 13553 instead. 13554 13555`-mcpu=CPU-TYPE' 13556 Use features of and schedule code for given CPU. Supported values 13557 are in the format `vX.YY.Z', where X is a major version, YY is the 13558 minor version, and Z is compatibility code. Example values are 13559 `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b', `v6.00.a'. 13560 13561`-mxl-soft-mul' 13562 Use software multiply emulation (default). 13563 13564`-mxl-soft-div' 13565 Use software emulation for divides (default). 13566 13567`-mxl-barrel-shift' 13568 Use the hardware barrel shifter. 13569 13570`-mxl-pattern-compare' 13571 Use pattern compare instructions. 13572 13573`-msmall-divides' 13574 Use table lookup optimization for small signed integer divisions. 13575 13576`-mxl-stack-check' 13577 This option is deprecated. Use -fstack-check instead. 13578 13579`-mxl-gp-opt' 13580 Use GP relative sdata/sbss sections. 13581 13582`-mxl-multiply-high' 13583 Use multiply high instructions for high part of 32x32 multiply. 13584 13585`-mxl-float-convert' 13586 Use hardware floating point conversion instructions. 13587 13588`-mxl-float-sqrt' 13589 Use hardware floating point square root instruction. 13590 13591`-mxl-mode-APP-MODEL' 13592 Select application model APP-MODEL. Valid models are 13593 `executable' 13594 normal executable (default), uses startup code `crt0.o'. 13595 13596 `xmdstub' 13597 for use with Xilinx Microprocessor Debugger (XMD) based 13598 software intrusive debug agent called xmdstub. This uses 13599 startup file `crt1.o' and sets the start address of the 13600 program to be 0x800. 13601 13602 `bootstrap' 13603 for applications that are loaded using a bootloader. This 13604 model uses startup file `crt2.o' which does not contain a 13605 processor reset vector handler. This is suitable for 13606 transferring control on a processor reset to the bootloader 13607 rather than the application. 13608 13609 `novectors' 13610 for applications that do not require any of the MicroBlaze 13611 vectors. This option may be useful for applications running 13612 within a monitoring application. This model uses `crt3.o' as 13613 a startup file. 13614 13615 Option `-xl-mode-APP-MODEL' is a deprecated alias for 13616 `-mxl-mode-APP-MODEL'. 13617 13618 13619 13620File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MicroBlaze Options, Up: Submodel Options 13621 136223.17.27 MIPS Options 13623-------------------- 13624 13625`-EB' 13626 Generate big-endian code. 13627 13628`-EL' 13629 Generate little-endian code. This is the default for `mips*el-*-*' 13630 configurations. 13631 13632`-march=ARCH' 13633 Generate code that will run on ARCH, which can be the name of a 13634 generic MIPS ISA, or the name of a particular processor. The ISA 13635 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 13636 `mips32r2', `mips64' and `mips64r2'. The processor names are: 13637 `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd', 13638 `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec', 13639 `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc', 13640 `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1', 13641 `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', `m4k', 13642 `m14ke', `m14kec', `octeon', `orion', `r2000', `r3000', `r3900', 13643 `r4000', `r4400', `r4600', `r4650', `r6000', `r8000', `rm7000', 13644 `rm9000', `r10000', `r12000', `r14000', `r16000', `sb1', `sr71000', 13645 `vr4100', `vr4111', `vr4120', `vr4130', `vr4300', `vr5000', 13646 `vr5400', `vr5500' and `xlr'. The special value `from-abi' 13647 selects the most compatible architecture for the selected ABI 13648 (that is, `mips1' for 32-bit ABIs and `mips3' for 64-bit ABIs). 13649 13650 Native Linux/GNU toolchains also support the value `native', which 13651 selects the best architecture option for the host processor. 13652 `-march=native' has no effect if GCC does not recognize the 13653 processor. 13654 13655 In processor names, a final `000' can be abbreviated as `k' (for 13656 example, `-march=r2k'). Prefixes are optional, and `vr' may be 13657 written `r'. 13658 13659 Names of the form `Nf2_1' refer to processors with FPUs clocked at 13660 half the rate of the core, names of the form `Nf1_1' refer to 13661 processors with FPUs clocked at the same rate as the core, and 13662 names of the form `Nf3_2' refer to processors with FPUs clocked a 13663 ratio of 3:2 with respect to the core. For compatibility reasons, 13664 `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are 13665 accepted as synonyms for `Nf1_1'. 13666 13667 GCC defines two macros based on the value of this option. The 13668 first is `_MIPS_ARCH', which gives the name of target 13669 architecture, as a string. The second has the form 13670 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 13671 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH' 13672 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'. 13673 13674 Note that the `_MIPS_ARCH' macro uses the processor names given 13675 above. In other words, it will have the full prefix and will not 13676 abbreviate `000' as `k'. In the case of `from-abi', the macro 13677 names the resolved architecture (either `"mips1"' or `"mips3"'). 13678 It names the default architecture when no `-march' option is given. 13679 13680`-mtune=ARCH' 13681 Optimize for ARCH. Among other things, this option controls the 13682 way instructions are scheduled, and the perceived cost of 13683 arithmetic operations. The list of ARCH values is the same as for 13684 `-march'. 13685 13686 When this option is not used, GCC will optimize for the processor 13687 specified by `-march'. By using `-march' and `-mtune' together, 13688 it is possible to generate code that will run on a family of 13689 processors, but optimize the code for one particular member of 13690 that family. 13691 13692 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 13693 which work in the same way as the `-march' ones described above. 13694 13695`-mips1' 13696 Equivalent to `-march=mips1'. 13697 13698`-mips2' 13699 Equivalent to `-march=mips2'. 13700 13701`-mips3' 13702 Equivalent to `-march=mips3'. 13703 13704`-mips4' 13705 Equivalent to `-march=mips4'. 13706 13707`-mips32' 13708 Equivalent to `-march=mips32'. 13709 13710`-mips32r2' 13711 Equivalent to `-march=mips32r2'. 13712 13713`-mips64' 13714 Equivalent to `-march=mips64'. 13715 13716`-mips64r2' 13717 Equivalent to `-march=mips64r2'. 13718 13719`-mips16' 13720`-mips16e' 13721`-mno-mips16' 13722 Generate (do not generate) MIPS16 code. If GCC is targetting a 13723 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE. 13724 `-mips16e' is a deprecated alias for `-mips16'. 13725 13726 MIPS16 code generation can also be controlled on a per-function 13727 basis by means of `mips16' and `nomips16' attributes. *Note 13728 Function Attributes::, for more information. 13729 13730`-mflip-mips16' 13731 Generate MIPS16 code on alternating functions. This option is 13732 provided for regression testing of mixed MIPS16/non-MIPS16 code 13733 generation, and is not intended for ordinary use in compiling user 13734 code. 13735 13736`-minterlink-mips16' 13737`-mno-interlink-mips16' 13738 Require (do not require) that non-MIPS16 code be link-compatible 13739 with MIPS16 code. 13740 13741 For example, non-MIPS16 code cannot jump directly to MIPS16 code; 13742 it must either use a call or an indirect jump. 13743 `-minterlink-mips16' therefore disables direct jumps unless GCC 13744 knows that the target of the jump is not MIPS16. 13745 13746`-mabi=32' 13747`-mabi=o64' 13748`-mabi=n32' 13749`-mabi=64' 13750`-mabi=eabi' 13751 Generate code for the given ABI. 13752 13753 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 13754 generates 64-bit code when you select a 64-bit architecture, but 13755 you can use `-mgp32' to get 32-bit code instead. 13756 13757 For information about the O64 ABI, see 13758 `http://gcc.gnu.org/projects/mipso64-abi.html'. 13759 13760 GCC supports a variant of the o32 ABI in which floating-point 13761 registers are 64 rather than 32 bits wide. You can select this 13762 combination with `-mabi=32' `-mfp64'. This ABI relies on the 13763 `mthc1' and `mfhc1' instructions and is therefore only supported 13764 for MIPS32R2 processors. 13765 13766 The register assignments for arguments and return values remain the 13767 same, but each scalar value is passed in a single 64-bit register 13768 rather than a pair of 32-bit registers. For example, scalar 13769 floating-point values are returned in `$f0' only, not a 13770 `$f0'/`$f1' pair. The set of call-saved registers also remains 13771 the same, but all 64 bits are saved. 13772 13773`-mabicalls' 13774`-mno-abicalls' 13775 Generate (do not generate) code that is suitable for SVR4-style 13776 dynamic objects. `-mabicalls' is the default for SVR4-based 13777 systems. 13778 13779`-mshared' 13780`-mno-shared' 13781 Generate (do not generate) code that is fully position-independent, 13782 and that can therefore be linked into shared libraries. This 13783 option only affects `-mabicalls'. 13784 13785 All `-mabicalls' code has traditionally been position-independent, 13786 regardless of options like `-fPIC' and `-fpic'. However, as an 13787 extension, the GNU toolchain allows executables to use absolute 13788 accesses for locally-binding symbols. It can also use shorter GP 13789 initialization sequences and generate direct calls to 13790 locally-defined functions. This mode is selected by `-mno-shared'. 13791 13792 `-mno-shared' depends on binutils 2.16 or higher and generates 13793 objects that can only be linked by the GNU linker. However, the 13794 option does not affect the ABI of the final executable; it only 13795 affects the ABI of relocatable objects. Using `-mno-shared' will 13796 generally make executables both smaller and quicker. 13797 13798 `-mshared' is the default. 13799 13800`-mplt' 13801`-mno-plt' 13802 Assume (do not assume) that the static and dynamic linkers support 13803 PLTs and copy relocations. This option only affects `-mno-shared 13804 -mabicalls'. For the n64 ABI, this option has no effect without 13805 `-msym32'. 13806 13807 You can make `-mplt' the default by configuring GCC with 13808 `--with-mips-plt'. The default is `-mno-plt' otherwise. 13809 13810`-mxgot' 13811`-mno-xgot' 13812 Lift (do not lift) the usual restrictions on the size of the global 13813 offset table. 13814 13815 GCC normally uses a single instruction to load values from the GOT. 13816 While this is relatively efficient, it will only work if the GOT 13817 is smaller than about 64k. Anything larger will cause the linker 13818 to report an error such as: 13819 13820 relocation truncated to fit: R_MIPS_GOT16 foobar 13821 13822 If this happens, you should recompile your code with `-mxgot'. It 13823 should then work with very large GOTs, although it will also be 13824 less efficient, since it will take three instructions to fetch the 13825 value of a global symbol. 13826 13827 Note that some linkers can create multiple GOTs. If you have such 13828 a linker, you should only need to use `-mxgot' when a single object 13829 file accesses more than 64k's worth of GOT entries. Very few do. 13830 13831 These options have no effect unless GCC is generating position 13832 independent code. 13833 13834`-mgp32' 13835 Assume that general-purpose registers are 32 bits wide. 13836 13837`-mgp64' 13838 Assume that general-purpose registers are 64 bits wide. 13839 13840`-mfp32' 13841 Assume that floating-point registers are 32 bits wide. 13842 13843`-mfp64' 13844 Assume that floating-point registers are 64 bits wide. 13845 13846`-mhard-float' 13847 Use floating-point coprocessor instructions. 13848 13849`-msoft-float' 13850 Do not use floating-point coprocessor instructions. Implement 13851 floating-point calculations using library calls instead. 13852 13853`-msingle-float' 13854 Assume that the floating-point coprocessor only supports 13855 single-precision operations. 13856 13857`-mdouble-float' 13858 Assume that the floating-point coprocessor supports 13859 double-precision operations. This is the default. 13860 13861`-mllsc' 13862`-mno-llsc' 13863 Use (do not use) `ll', `sc', and `sync' instructions to implement 13864 atomic memory built-in functions. When neither option is 13865 specified, GCC will use the instructions if the target architecture 13866 supports them. 13867 13868 `-mllsc' is useful if the runtime environment can emulate the 13869 instructions and `-mno-llsc' can be useful when compiling for 13870 nonstandard ISAs. You can make either option the default by 13871 configuring GCC with `--with-llsc' and `--without-llsc' 13872 respectively. `--with-llsc' is the default for some 13873 configurations; see the installation documentation for details. 13874 13875`-mdsp' 13876`-mno-dsp' 13877 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 13878 Built-in Functions::. This option defines the preprocessor macro 13879 `__mips_dsp'. It also defines `__mips_dsp_rev' to 1. 13880 13881`-mdspr2' 13882`-mno-dspr2' 13883 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 13884 Built-in Functions::. This option defines the preprocessor macros 13885 `__mips_dsp' and `__mips_dspr2'. It also defines `__mips_dsp_rev' 13886 to 2. 13887 13888`-msmartmips' 13889`-mno-smartmips' 13890 Use (do not use) the MIPS SmartMIPS ASE. 13891 13892`-mpaired-single' 13893`-mno-paired-single' 13894 Use (do not use) paired-single floating-point instructions. *Note 13895 MIPS Paired-Single Support::. This option requires hardware 13896 floating-point support to be enabled. 13897 13898`-mdmx' 13899`-mno-mdmx' 13900 Use (do not use) MIPS Digital Media Extension instructions. This 13901 option can only be used when generating 64-bit code and requires 13902 hardware floating-point support to be enabled. 13903 13904`-mips3d' 13905`-mno-mips3d' 13906 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 13907 Functions::. The option `-mips3d' implies `-mpaired-single'. 13908 13909`-mmt' 13910`-mno-mt' 13911 Use (do not use) MT Multithreading instructions. 13912 13913`-mlong64' 13914 Force `long' types to be 64 bits wide. See `-mlong32' for an 13915 explanation of the default and the way that the pointer size is 13916 determined. 13917 13918`-mlong32' 13919 Force `long', `int', and pointer types to be 32 bits wide. 13920 13921 The default size of `int's, `long's and pointers depends on the 13922 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 13923 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 13924 `long's. Pointers are the same size as `long's, or the same size 13925 as integer registers, whichever is smaller. 13926 13927`-msym32' 13928`-mno-sym32' 13929 Assume (do not assume) that all symbols have 32-bit values, 13930 regardless of the selected ABI. This option is useful in 13931 combination with `-mabi=64' and `-mno-abicalls' because it allows 13932 GCC to generate shorter and faster references to symbolic 13933 addresses. 13934 13935`-G NUM' 13936 Put definitions of externally-visible data in a small data section 13937 if that data is no bigger than NUM bytes. GCC can then access the 13938 data more efficiently; see `-mgpopt' for details. 13939 13940 The default `-G' option depends on the configuration. 13941 13942`-mlocal-sdata' 13943`-mno-local-sdata' 13944 Extend (do not extend) the `-G' behavior to local data too, such 13945 as to static variables in C. `-mlocal-sdata' is the default for 13946 all configurations. 13947 13948 If the linker complains that an application is using too much 13949 small data, you might want to try rebuilding the less 13950 performance-critical parts with `-mno-local-sdata'. You might 13951 also want to build large libraries with `-mno-local-sdata', so 13952 that the libraries leave more room for the main program. 13953 13954`-mextern-sdata' 13955`-mno-extern-sdata' 13956 Assume (do not assume) that externally-defined data will be in a 13957 small data section if that data is within the `-G' limit. 13958 `-mextern-sdata' is the default for all configurations. 13959 13960 If you compile a module MOD with `-mextern-sdata' `-G NUM' 13961 `-mgpopt', and MOD references a variable VAR that is no bigger 13962 than NUM bytes, you must make sure that VAR is placed in a small 13963 data section. If VAR is defined by another module, you must 13964 either compile that module with a high-enough `-G' setting or 13965 attach a `section' attribute to VAR's definition. If VAR is 13966 common, you must link the application with a high-enough `-G' 13967 setting. 13968 13969 The easiest way of satisfying these restrictions is to compile and 13970 link every module with the same `-G' option. However, you may 13971 wish to build a library that supports several different small data 13972 limits. You can do this by compiling the library with the highest 13973 supported `-G' setting and additionally using `-mno-extern-sdata' 13974 to stop the library from making assumptions about 13975 externally-defined data. 13976 13977`-mgpopt' 13978`-mno-gpopt' 13979 Use (do not use) GP-relative accesses for symbols that are known 13980 to be in a small data section; see `-G', `-mlocal-sdata' and 13981 `-mextern-sdata'. `-mgpopt' is the default for all configurations. 13982 13983 `-mno-gpopt' is useful for cases where the `$gp' register might 13984 not hold the value of `_gp'. For example, if the code is part of 13985 a library that might be used in a boot monitor, programs that call 13986 boot monitor routines will pass an unknown value in `$gp'. (In 13987 such situations, the boot monitor itself would usually be compiled 13988 with `-G0'.) 13989 13990 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'. 13991 13992`-membedded-data' 13993`-mno-embedded-data' 13994 Allocate variables to the read-only data section first if 13995 possible, then next in the small data section if possible, 13996 otherwise in data. This gives slightly slower code than the 13997 default, but reduces the amount of RAM required when executing, 13998 and thus may be preferred for some embedded systems. 13999 14000`-muninit-const-in-rodata' 14001`-mno-uninit-const-in-rodata' 14002 Put uninitialized `const' variables in the read-only data section. 14003 This option is only meaningful in conjunction with 14004 `-membedded-data'. 14005 14006`-mcode-readable=SETTING' 14007 Specify whether GCC may generate code that reads from executable 14008 sections. There are three possible settings: 14009 14010 `-mcode-readable=yes' 14011 Instructions may freely access executable sections. This is 14012 the default setting. 14013 14014 `-mcode-readable=pcrel' 14015 MIPS16 PC-relative load instructions can access executable 14016 sections, but other instructions must not do so. This option 14017 is useful on 4KSc and 4KSd processors when the code TLBs have 14018 the Read Inhibit bit set. It is also useful on processors 14019 that can be configured to have a dual instruction/data SRAM 14020 interface and that, like the M4K, automatically redirect 14021 PC-relative loads to the instruction RAM. 14022 14023 `-mcode-readable=no' 14024 Instructions must not access executable sections. This 14025 option can be useful on targets that are configured to have a 14026 dual instruction/data SRAM interface but that (unlike the 14027 M4K) do not automatically redirect PC-relative loads to the 14028 instruction RAM. 14029 14030`-msplit-addresses' 14031`-mno-split-addresses' 14032 Enable (disable) use of the `%hi()' and `%lo()' assembler 14033 relocation operators. This option has been superseded by 14034 `-mexplicit-relocs' but is retained for backwards compatibility. 14035 14036`-mexplicit-relocs' 14037`-mno-explicit-relocs' 14038 Use (do not use) assembler relocation operators when dealing with 14039 symbolic addresses. The alternative, selected by 14040 `-mno-explicit-relocs', is to use assembler macros instead. 14041 14042 `-mexplicit-relocs' is the default if GCC was configured to use an 14043 assembler that supports relocation operators. 14044 14045`-mcheck-zero-division' 14046`-mno-check-zero-division' 14047 Trap (do not trap) on integer division by zero. 14048 14049 The default is `-mcheck-zero-division'. 14050 14051`-mdivide-traps' 14052`-mdivide-breaks' 14053 MIPS systems check for division by zero by generating either a 14054 conditional trap or a break instruction. Using traps results in 14055 smaller code, but is only supported on MIPS II and later. Also, 14056 some versions of the Linux kernel have a bug that prevents trap 14057 from generating the proper signal (`SIGFPE'). Use 14058 `-mdivide-traps' to allow conditional traps on architectures that 14059 support them and `-mdivide-breaks' to force the use of breaks. 14060 14061 The default is usually `-mdivide-traps', but this can be 14062 overridden at configure time using `--with-divide=breaks'. 14063 Divide-by-zero checks can be completely disabled using 14064 `-mno-check-zero-division'. 14065 14066`-mmemcpy' 14067`-mno-memcpy' 14068 Force (do not force) the use of `memcpy()' for non-trivial block 14069 moves. The default is `-mno-memcpy', which allows GCC to inline 14070 most constant-sized copies. 14071 14072`-mlong-calls' 14073`-mno-long-calls' 14074 Disable (do not disable) use of the `jal' instruction. Calling 14075 functions using `jal' is more efficient but requires the caller 14076 and callee to be in the same 256 megabyte segment. 14077 14078 This option has no effect on abicalls code. The default is 14079 `-mno-long-calls'. 14080 14081`-mmad' 14082`-mno-mad' 14083 Enable (disable) use of the `mad', `madu' and `mul' instructions, 14084 as provided by the R4650 ISA. 14085 14086`-mfused-madd' 14087`-mno-fused-madd' 14088 Enable (disable) use of the floating point multiply-accumulate 14089 instructions, when they are available. The default is 14090 `-mfused-madd'. 14091 14092 On the R8000 CPU when multiply-accumulate instructions are used, 14093 the intermediate product is calculated to infinite precision and 14094 is not subject to the FCSR Flush to Zero bit. This may be 14095 undesirable in some circumstances. On other processors the result 14096 is numerically identical to the equivalent computation using 14097 separate multiply, add, subtract and negate instructions. 14098 14099`-nocpp' 14100 Tell the MIPS assembler to not run its preprocessor over user 14101 assembler files (with a `.s' suffix) when assembling them. 14102 14103`-mfix-24k' 14104 14105`-mno-fix-24k' 14106 Work around the 24K E48 (lost data on stores during refill) errata. 14107 The workarounds are implemented by the assembler rather than by 14108 GCC. 14109 14110`-mfix-r4000' 14111`-mno-fix-r4000' 14112 Work around certain R4000 CPU errata: 14113 - A double-word or a variable shift may give an incorrect 14114 result if executed immediately after starting an integer 14115 division. 14116 14117 - A double-word or a variable shift may give an incorrect 14118 result if executed while an integer multiplication is in 14119 progress. 14120 14121 - An integer division may give an incorrect result if started 14122 in a delay slot of a taken branch or a jump. 14123 14124`-mfix-r4400' 14125`-mno-fix-r4400' 14126 Work around certain R4400 CPU errata: 14127 - A double-word or a variable shift may give an incorrect 14128 result if executed immediately after starting an integer 14129 division. 14130 14131`-mfix-r10000' 14132`-mno-fix-r10000' 14133 Work around certain R10000 errata: 14134 - `ll'/`sc' sequences may not behave atomically on revisions 14135 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 14136 14137 This option can only be used if the target architecture supports 14138 branch-likely instructions. `-mfix-r10000' is the default when 14139 `-march=r10000' is used; `-mno-fix-r10000' is the default 14140 otherwise. 14141 14142`-mfix-vr4120' 14143`-mno-fix-vr4120' 14144 Work around certain VR4120 errata: 14145 - `dmultu' does not always produce the correct result. 14146 14147 - `div' and `ddiv' do not always produce the correct result if 14148 one of the operands is negative. 14149 The workarounds for the division errata rely on special functions 14150 in `libgcc.a'. At present, these functions are only provided by 14151 the `mips64vr*-elf' configurations. 14152 14153 Other VR4120 errata require a nop to be inserted between certain 14154 pairs of instructions. These errata are handled by the assembler, 14155 not by GCC itself. 14156 14157`-mfix-vr4130' 14158 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 14159 implemented by the assembler rather than by GCC, although GCC will 14160 avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 14161 `dmacc' and `dmacchi' instructions are available instead. 14162 14163`-mfix-sb1' 14164`-mno-fix-sb1' 14165 Work around certain SB-1 CPU core errata. (This flag currently 14166 works around the SB-1 revision 2 "F1" and "F2" floating point 14167 errata.) 14168 14169`-mr10k-cache-barrier=SETTING' 14170 Specify whether GCC should insert cache barriers to avoid the 14171 side-effects of speculation on R10K processors. 14172 14173 In common with many processors, the R10K tries to predict the 14174 outcome of a conditional branch and speculatively executes 14175 instructions from the "taken" branch. It later aborts these 14176 instructions if the predicted outcome was wrong. However, on the 14177 R10K, even aborted instructions can have side effects. 14178 14179 This problem only affects kernel stores and, depending on the 14180 system, kernel loads. As an example, a speculatively-executed 14181 store may load the target memory into cache and mark the cache 14182 line as dirty, even if the store itself is later aborted. If a 14183 DMA operation writes to the same area of memory before the "dirty" 14184 line is flushed, the cached data will overwrite the DMA-ed data. 14185 See the R10K processor manual for a full description, including 14186 other potential problems. 14187 14188 One workaround is to insert cache barrier instructions before 14189 every memory access that might be speculatively executed and that 14190 might have side effects even if aborted. 14191 `-mr10k-cache-barrier=SETTING' controls GCC's implementation of 14192 this workaround. It assumes that aborted accesses to any byte in 14193 the following regions will not have side effects: 14194 14195 1. the memory occupied by the current function's stack frame; 14196 14197 2. the memory occupied by an incoming stack argument; 14198 14199 3. the memory occupied by an object with a link-time-constant 14200 address. 14201 14202 It is the kernel's responsibility to ensure that speculative 14203 accesses to these regions are indeed safe. 14204 14205 If the input program contains a function declaration such as: 14206 14207 void foo (void); 14208 14209 then the implementation of `foo' must allow `j foo' and `jal foo' 14210 to be executed speculatively. GCC honors this restriction for 14211 functions it compiles itself. It expects non-GCC functions (such 14212 as hand-written assembly code) to do the same. 14213 14214 The option has three forms: 14215 14216 `-mr10k-cache-barrier=load-store' 14217 Insert a cache barrier before a load or store that might be 14218 speculatively executed and that might have side effects even 14219 if aborted. 14220 14221 `-mr10k-cache-barrier=store' 14222 Insert a cache barrier before a store that might be 14223 speculatively executed and that might have side effects even 14224 if aborted. 14225 14226 `-mr10k-cache-barrier=none' 14227 Disable the insertion of cache barriers. This is the default 14228 setting. 14229 14230`-mflush-func=FUNC' 14231`-mno-flush-func' 14232 Specifies the function to call to flush the I and D caches, or to 14233 not call any such function. If called, the function must take the 14234 same arguments as the common `_flush_func()', that is, the address 14235 of the memory range for which the cache is being flushed, the size 14236 of the memory range, and the number 3 (to flush both caches). The 14237 default depends on the target GCC was configured for, but commonly 14238 is either `_flush_func' or `__cpu_flush'. 14239 14240`mbranch-cost=NUM' 14241 Set the cost of branches to roughly NUM "simple" instructions. 14242 This cost is only a heuristic and is not guaranteed to produce 14243 consistent results across releases. A zero cost redundantly 14244 selects the default, which is based on the `-mtune' setting. 14245 14246`-mbranch-likely' 14247`-mno-branch-likely' 14248 Enable or disable use of Branch Likely instructions, regardless of 14249 the default for the selected architecture. By default, Branch 14250 Likely instructions may be generated if they are supported by the 14251 selected architecture. An exception is for the MIPS32 and MIPS64 14252 architectures and processors which implement those architectures; 14253 for those, Branch Likely instructions will not be generated by 14254 default because the MIPS32 and MIPS64 architectures specifically 14255 deprecate their use. 14256 14257`-mfp-exceptions' 14258`-mno-fp-exceptions' 14259 Specifies whether FP exceptions are enabled. This affects how we 14260 schedule FP instructions for some processors. The default is that 14261 FP exceptions are enabled. 14262 14263 For instance, on the SB-1, if FP exceptions are disabled, and we 14264 are emitting 64-bit code, then we can use both FP pipes. 14265 Otherwise, we can only use one FP pipe. 14266 14267`-mvr4130-align' 14268`-mno-vr4130-align' 14269 The VR4130 pipeline is two-way superscalar, but can only issue two 14270 instructions together if the first one is 8-byte aligned. When 14271 this option is enabled, GCC will align pairs of instructions that 14272 it thinks should execute in parallel. 14273 14274 This option only has an effect when optimizing for the VR4130. It 14275 normally makes code faster, but at the expense of making it bigger. 14276 It is enabled by default at optimization level `-O3'. 14277 14278`-msynci' 14279`-mno-synci' 14280 Enable (disable) generation of `synci' instructions on 14281 architectures that support it. The `synci' instructions (if 14282 enabled) will be generated when `__builtin___clear_cache()' is 14283 compiled. 14284 14285 This option defaults to `-mno-synci', but the default can be 14286 overridden by configuring with `--with-synci'. 14287 14288 When compiling code for single processor systems, it is generally 14289 safe to use `synci'. However, on many multi-core (SMP) systems, it 14290 will not invalidate the instruction caches on all cores and may 14291 lead to undefined behavior. 14292 14293`-mrelax-pic-calls' 14294`-mno-relax-pic-calls' 14295 Try to turn PIC calls that are normally dispatched via register 14296 `$25' into direct calls. This is only possible if the linker can 14297 resolve the destination at link-time and if the destination is 14298 within range for a direct call. 14299 14300 `-mrelax-pic-calls' is the default if GCC was configured to use an 14301 assembler and a linker that supports the `.reloc' assembly 14302 directive and `-mexplicit-relocs' is in effect. With 14303 `-mno-explicit-relocs', this optimization can be performed by the 14304 assembler and the linker alone without help from the compiler. 14305 14306`-mmcount-ra-address' 14307`-mno-mcount-ra-address' 14308 Emit (do not emit) code that allows `_mcount' to modify the 14309 calling function's return address. When enabled, this option 14310 extends the usual `_mcount' interface with a new RA-ADDRESS 14311 parameter, which has type `intptr_t *' and is passed in register 14312 `$12'. `_mcount' can then modify the return address by doing both 14313 of the following: 14314 * Returning the new address in register `$31'. 14315 14316 * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is 14317 nonnull. 14318 14319 The default is `-mno-mcount-ra-address'. 14320 14321 14322 14323File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 14324 143253.17.28 MMIX Options 14326-------------------- 14327 14328These options are defined for the MMIX: 14329 14330`-mlibfuncs' 14331`-mno-libfuncs' 14332 Specify that intrinsic library functions are being compiled, 14333 passing all values in registers, no matter the size. 14334 14335`-mepsilon' 14336`-mno-epsilon' 14337 Generate floating-point comparison instructions that compare with 14338 respect to the `rE' epsilon register. 14339 14340`-mabi=mmixware' 14341`-mabi=gnu' 14342 Generate code that passes function parameters and return values 14343 that (in the called function) are seen as registers `$0' and up, 14344 as opposed to the GNU ABI which uses global registers `$231' and 14345 up. 14346 14347`-mzero-extend' 14348`-mno-zero-extend' 14349 When reading data from memory in sizes shorter than 64 bits, use 14350 (do not use) zero-extending load instructions by default, rather 14351 than sign-extending ones. 14352 14353`-mknuthdiv' 14354`-mno-knuthdiv' 14355 Make the result of a division yielding a remainder have the same 14356 sign as the divisor. With the default, `-mno-knuthdiv', the sign 14357 of the remainder follows the sign of the dividend. Both methods 14358 are arithmetically valid, the latter being almost exclusively used. 14359 14360`-mtoplevel-symbols' 14361`-mno-toplevel-symbols' 14362 Prepend (do not prepend) a `:' to all global symbols, so the 14363 assembly code can be used with the `PREFIX' assembly directive. 14364 14365`-melf' 14366 Generate an executable in the ELF format, rather than the default 14367 `mmo' format used by the `mmix' simulator. 14368 14369`-mbranch-predict' 14370`-mno-branch-predict' 14371 Use (do not use) the probable-branch instructions, when static 14372 branch prediction indicates a probable branch. 14373 14374`-mbase-addresses' 14375`-mno-base-addresses' 14376 Generate (do not generate) code that uses _base addresses_. Using 14377 a base address automatically generates a request (handled by the 14378 assembler and the linker) for a constant to be set up in a global 14379 register. The register is used for one or more base address 14380 requests within the range 0 to 255 from the value held in the 14381 register. The generally leads to short and fast code, but the 14382 number of different data items that can be addressed is limited. 14383 This means that a program that uses lots of static data may 14384 require `-mno-base-addresses'. 14385 14386`-msingle-exit' 14387`-mno-single-exit' 14388 Force (do not force) generated code to have a single exit point in 14389 each function. 14390 14391 14392File: gcc.info, Node: MN10300 Options, Next: PDP-11 Options, Prev: MMIX Options, Up: Submodel Options 14393 143943.17.29 MN10300 Options 14395----------------------- 14396 14397These `-m' options are defined for Matsushita MN10300 architectures: 14398 14399`-mmult-bug' 14400 Generate code to avoid bugs in the multiply instructions for the 14401 MN10300 processors. This is the default. 14402 14403`-mno-mult-bug' 14404 Do not generate code to avoid bugs in the multiply instructions 14405 for the MN10300 processors. 14406 14407`-mam33' 14408 Generate code which uses features specific to the AM33 processor. 14409 14410`-mno-am33' 14411 Do not generate code which uses features specific to the AM33 14412 processor. This is the default. 14413 14414`-mam33-2' 14415 Generate code which uses features specific to the AM33/2.0 14416 processor. 14417 14418`-mam34' 14419 Generate code which uses features specific to the AM34 processor. 14420 14421`-mtune=CPU-TYPE' 14422 Use the timing characteristics of the indicated CPU type when 14423 scheduling instructions. This does not change the targeted 14424 processor type. The CPU type must be one of `mn10300', `am33', 14425 `am33-2' or `am34'. 14426 14427`-mreturn-pointer-on-d0' 14428 When generating a function which returns a pointer, return the 14429 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 14430 only in a0, and attempts to call such functions without a prototype 14431 would result in errors. Note that this option is on by default; 14432 use `-mno-return-pointer-on-d0' to disable it. 14433 14434`-mno-crt0' 14435 Do not link in the C run-time initialization object file. 14436 14437`-mrelax' 14438 Indicate to the linker that it should perform a relaxation 14439 optimization pass to shorten branches, calls and absolute memory 14440 addresses. This option only has an effect when used on the 14441 command line for the final link step. 14442 14443 This option makes symbolic debugging impossible. 14444 14445`-mliw' 14446 Allow the compiler to generate _Long Instruction Word_ 14447 instructions if the target is the `AM33' or later. This is the 14448 default. This option defines the preprocessor macro `__LIW__'. 14449 14450`-mnoliw' 14451 Do not allow the compiler to generate _Long Instruction Word_ 14452 instructions. This option defines the preprocessor macro 14453 `__NO_LIW__'. 14454 14455 14456 14457File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: MN10300 Options, Up: Submodel Options 14458 144593.17.30 PDP-11 Options 14460---------------------- 14461 14462These options are defined for the PDP-11: 14463 14464`-mfpu' 14465 Use hardware FPP floating point. This is the default. (FIS 14466 floating point on the PDP-11/40 is not supported.) 14467 14468`-msoft-float' 14469 Do not use hardware floating point. 14470 14471`-mac0' 14472 Return floating-point results in ac0 (fr0 in Unix assembler 14473 syntax). 14474 14475`-mno-ac0' 14476 Return floating-point results in memory. This is the default. 14477 14478`-m40' 14479 Generate code for a PDP-11/40. 14480 14481`-m45' 14482 Generate code for a PDP-11/45. This is the default. 14483 14484`-m10' 14485 Generate code for a PDP-11/10. 14486 14487`-mbcopy-builtin' 14488 Use inline `movmemhi' patterns for copying memory. This is the 14489 default. 14490 14491`-mbcopy' 14492 Do not use inline `movmemhi' patterns for copying memory. 14493 14494`-mint16' 14495`-mno-int32' 14496 Use 16-bit `int'. This is the default. 14497 14498`-mint32' 14499`-mno-int16' 14500 Use 32-bit `int'. 14501 14502`-mfloat64' 14503`-mno-float32' 14504 Use 64-bit `float'. This is the default. 14505 14506`-mfloat32' 14507`-mno-float64' 14508 Use 32-bit `float'. 14509 14510`-mabshi' 14511 Use `abshi2' pattern. This is the default. 14512 14513`-mno-abshi' 14514 Do not use `abshi2' pattern. 14515 14516`-mbranch-expensive' 14517 Pretend that branches are expensive. This is for experimenting 14518 with code generation only. 14519 14520`-mbranch-cheap' 14521 Do not pretend that branches are expensive. This is the default. 14522 14523`-munix-asm' 14524 Use Unix assembler syntax. This is the default when configured for 14525 `pdp11-*-bsd'. 14526 14527`-mdec-asm' 14528 Use DEC assembler syntax. This is the default when configured for 14529 any PDP-11 target other than `pdp11-*-bsd'. 14530 14531 14532File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 14533 145343.17.31 picoChip Options 14535------------------------ 14536 14537These `-m' options are defined for picoChip implementations: 14538 14539`-mae=AE_TYPE' 14540 Set the instruction set, register set, and instruction scheduling 14541 parameters for array element type AE_TYPE. Supported values for 14542 AE_TYPE are `ANY', `MUL', and `MAC'. 14543 14544 `-mae=ANY' selects a completely generic AE type. Code generated 14545 with this option will run on any of the other AE types. The code 14546 will not be as efficient as it would be if compiled for a specific 14547 AE type, and some types of operation (e.g., multiplication) will 14548 not work properly on all types of AE. 14549 14550 `-mae=MUL' selects a MUL AE type. This is the most useful AE type 14551 for compiled code, and is the default. 14552 14553 `-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 14554 option may suffer from poor performance of byte (char) 14555 manipulation, since the DSP AE does not provide hardware support 14556 for byte load/stores. 14557 14558`-msymbol-as-address' 14559 Enable the compiler to directly use a symbol name as an address in 14560 a load/store instruction, without first loading it into a 14561 register. Typically, the use of this option will generate larger 14562 programs, which run faster than when the option isn't used. 14563 However, the results vary from program to program, so it is left 14564 as a user option, rather than being permanently enabled. 14565 14566`-mno-inefficient-warnings' 14567 Disables warnings about the generation of inefficient code. These 14568 warnings can be generated, for example, when compiling code which 14569 performs byte-level memory operations on the MAC AE type. The MAC 14570 AE has no hardware support for byte-level memory operations, so 14571 all byte load/stores must be synthesized from word load/store 14572 operations. This is inefficient and a warning will be generated 14573 indicating to the programmer that they should rewrite the code to 14574 avoid byte operations, or to target an AE type which has the 14575 necessary hardware support. This option enables the warning to be 14576 turned off. 14577 14578 14579 14580File: gcc.info, Node: PowerPC Options, Next: RS/6000 and PowerPC Options, Prev: picoChip Options, Up: Submodel Options 14581 145823.17.32 PowerPC Options 14583----------------------- 14584 14585These are listed under *Note RS/6000 and PowerPC Options::. 14586 14587 14588File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: PowerPC Options, Up: Submodel Options 14589 145903.17.33 IBM RS/6000 and PowerPC Options 14591--------------------------------------- 14592 14593These `-m' options are defined for the IBM RS/6000 and PowerPC: 14594`-mpower' 14595`-mno-power' 14596`-mpower2' 14597`-mno-power2' 14598`-mpowerpc' 14599`-mno-powerpc' 14600`-mpowerpc-gpopt' 14601`-mno-powerpc-gpopt' 14602`-mpowerpc-gfxopt' 14603`-mno-powerpc-gfxopt' 14604`-mpowerpc64' 14605`-mno-powerpc64' 14606`-mmfcrf' 14607`-mno-mfcrf' 14608`-mpopcntb' 14609`-mno-popcntb' 14610`-mpopcntd' 14611`-mno-popcntd' 14612`-mfprnd' 14613`-mno-fprnd' 14614`-mcmpb' 14615`-mno-cmpb' 14616`-mmfpgpr' 14617`-mno-mfpgpr' 14618`-mhard-dfp' 14619`-mno-hard-dfp' 14620 GCC supports two related instruction set architectures for the 14621 RS/6000 and PowerPC. The "POWER" instruction set are those 14622 instructions supported by the `rios' chip set used in the original 14623 RS/6000 systems and the "PowerPC" instruction set is the 14624 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx 14625 microprocessors, and the IBM 4xx, 6xx, and follow-on 14626 microprocessors. 14627 14628 Neither architecture is a subset of the other. However there is a 14629 large common subset of instructions supported by both. An MQ 14630 register is included in processors supporting the POWER 14631 architecture. 14632 14633 You use these options to specify which instructions are available 14634 on the processor you are using. The default value of these 14635 options is determined when configuring GCC. Specifying the 14636 `-mcpu=CPU_TYPE' overrides the specification of these options. We 14637 recommend you use the `-mcpu=CPU_TYPE' option rather than the 14638 options listed above. 14639 14640 The `-mpower' option allows GCC to generate instructions that are 14641 found only in the POWER architecture and to use the MQ register. 14642 Specifying `-mpower2' implies `-power' and also allows GCC to 14643 generate instructions that are present in the POWER2 architecture 14644 but not the original POWER architecture. 14645 14646 The `-mpowerpc' option allows GCC to generate instructions that 14647 are found only in the 32-bit subset of the PowerPC architecture. 14648 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 14649 GCC to use the optional PowerPC architecture instructions in the 14650 General Purpose group, including floating-point square root. 14651 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 14652 GCC to use the optional PowerPC architecture instructions in the 14653 Graphics group, including floating-point select. 14654 14655 The `-mmfcrf' option allows GCC to generate the move from 14656 condition register field instruction implemented on the POWER4 14657 processor and other processors that support the PowerPC V2.01 14658 architecture. The `-mpopcntb' option allows GCC to generate the 14659 popcount and double precision FP reciprocal estimate instruction 14660 implemented on the POWER5 processor and other processors that 14661 support the PowerPC V2.02 architecture. The `-mpopcntd' option 14662 allows GCC to generate the popcount instruction implemented on the 14663 POWER7 processor and other processors that support the PowerPC 14664 V2.06 architecture. The `-mfprnd' option allows GCC to generate 14665 the FP round to integer instructions implemented on the POWER5+ 14666 processor and other processors that support the PowerPC V2.03 14667 architecture. The `-mcmpb' option allows GCC to generate the 14668 compare bytes instruction implemented on the POWER6 processor and 14669 other processors that support the PowerPC V2.05 architecture. The 14670 `-mmfpgpr' option allows GCC to generate the FP move to/from 14671 general purpose register instructions implemented on the POWER6X 14672 processor and other processors that support the extended PowerPC 14673 V2.05 architecture. The `-mhard-dfp' option allows GCC to 14674 generate the decimal floating point instructions implemented on 14675 some POWER processors. 14676 14677 The `-mpowerpc64' option allows GCC to generate the additional 14678 64-bit instructions that are found in the full PowerPC64 14679 architecture and to treat GPRs as 64-bit, doubleword quantities. 14680 GCC defaults to `-mno-powerpc64'. 14681 14682 If you specify both `-mno-power' and `-mno-powerpc', GCC will use 14683 only the instructions in the common subset of both architectures 14684 plus some special AIX common-mode calls, and will not use the MQ 14685 register. Specifying both `-mpower' and `-mpowerpc' permits GCC 14686 to use any instruction from either architecture and to allow use 14687 of the MQ register; specify this for the Motorola MPC601. 14688 14689`-mnew-mnemonics' 14690`-mold-mnemonics' 14691 Select which mnemonics to use in the generated assembler code. 14692 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined 14693 for the PowerPC architecture. With `-mold-mnemonics' it uses the 14694 assembler mnemonics defined for the POWER architecture. 14695 Instructions defined in only one architecture have only one 14696 mnemonic; GCC uses that mnemonic irrespective of which of these 14697 options is specified. 14698 14699 GCC defaults to the mnemonics appropriate for the architecture in 14700 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of 14701 these option. Unless you are building a cross-compiler, you 14702 should normally not specify either `-mnew-mnemonics' or 14703 `-mold-mnemonics', but should instead accept the default. 14704 14705`-mcpu=CPU_TYPE' 14706 Set architecture type, register usage, choice of mnemonics, and 14707 instruction scheduling parameters for machine type CPU_TYPE. 14708 Supported values for CPU_TYPE are `401', `403', `405', `405fp', 14709 `440', `440fp', `464', `464fp', `476', `476fp', `505', `601', 14710 `602', `603', `603e', `604', `604e', `620', `630', `740', `7400', 14711 `7450', `750', `801', `821', `823', `860', `970', `8540', `a2', 14712 `e300c2', `e300c3', `e500mc', `e500mc64', `ec603e', `G3', `G4', 14713 `G5', `titan', `power', `power2', `power3', `power4', `power5', 14714 `power5+', `power6', `power6x', `power7', `common', `powerpc', 14715 `powerpc64', `rios', `rios1', `rios2', `rsc', and `rs64'. 14716 14717 `-mcpu=common' selects a completely generic processor. Code 14718 generated under this option will run on any POWER or PowerPC 14719 processor. GCC will use only the instructions in the common 14720 subset of both architectures, and will not use the MQ register. 14721 GCC assumes a generic processor model for scheduling purposes. 14722 14723 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and 14724 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit 14725 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 14726 types, with an appropriate, generic processor model assumed for 14727 scheduling purposes. 14728 14729 The other options specify a specific processor. Code generated 14730 under those options will run best on that processor, and may not 14731 run at all on others. 14732 14733 The `-mcpu' options automatically enable or disable the following 14734 options: 14735 14736 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 14737 -mnew-mnemonics -mpopcntb -mpopcntd -mpower -mpower2 -mpowerpc64 14738 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 14739 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx 14740 14741 The particular options set for any particular CPU will vary between 14742 compiler versions, depending on what setting seems to produce 14743 optimal code for that CPU; it doesn't necessarily reflect the 14744 actual hardware's capabilities. If you wish to set an individual 14745 option to a particular value, you may specify it after the `-mcpu' 14746 option, like `-mcpu=970 -mno-altivec'. 14747 14748 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 14749 or disabled by the `-mcpu' option at present because AIX does not 14750 have full support for these options. You may still enable or 14751 disable them individually if you're sure it'll work in your 14752 environment. 14753 14754`-mtune=CPU_TYPE' 14755 Set the instruction scheduling parameters for machine type 14756 CPU_TYPE, but do not set the architecture type, register usage, or 14757 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values 14758 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are 14759 specified, the code generated will use the architecture, 14760 registers, and mnemonics set by `-mcpu', but the scheduling 14761 parameters set by `-mtune'. 14762 14763`-mcmodel=small' 14764 Generate PowerPC64 code for the small model: The TOC is limited to 14765 64k. 14766 14767`-mcmodel=medium' 14768 Generate PowerPC64 code for the medium model: The TOC and other 14769 static data may be up to a total of 4G in size. 14770 14771`-mcmodel=large' 14772 Generate PowerPC64 code for the large model: The TOC may be up to 14773 4G in size. Other data and code is only limited by the 64-bit 14774 address space. 14775 14776`-maltivec' 14777`-mno-altivec' 14778 Generate code that uses (does not use) AltiVec instructions, and 14779 also enable the use of built-in functions that allow more direct 14780 access to the AltiVec instruction set. You may also need to set 14781 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 14782 enhancements. 14783 14784`-mvrsave' 14785`-mno-vrsave' 14786 Generate VRSAVE instructions when generating AltiVec code. 14787 14788`-mgen-cell-microcode' 14789 Generate Cell microcode instructions 14790 14791`-mwarn-cell-microcode' 14792 Warning when a Cell microcode instruction is going to emitted. An 14793 example of a Cell microcode instruction is a variable shift. 14794 14795`-msecure-plt' 14796 Generate code that allows ld and ld.so to build executables and 14797 shared libraries with non-exec .plt and .got sections. This is a 14798 PowerPC 32-bit SYSV ABI option. 14799 14800`-mbss-plt' 14801 Generate code that uses a BSS .plt section that ld.so fills in, and 14802 requires .plt and .got sections that are both writable and 14803 executable. This is a PowerPC 32-bit SYSV ABI option. 14804 14805`-misel' 14806`-mno-isel' 14807 This switch enables or disables the generation of ISEL 14808 instructions. 14809 14810`-misel=YES/NO' 14811 This switch has been deprecated. Use `-misel' and `-mno-isel' 14812 instead. 14813 14814`-mspe' 14815`-mno-spe' 14816 This switch enables or disables the generation of SPE simd 14817 instructions. 14818 14819`-mpaired' 14820`-mno-paired' 14821 This switch enables or disables the generation of PAIRED simd 14822 instructions. 14823 14824`-mspe=YES/NO' 14825 This option has been deprecated. Use `-mspe' and `-mno-spe' 14826 instead. 14827 14828`-mvsx' 14829`-mno-vsx' 14830 Generate code that uses (does not use) vector/scalar (VSX) 14831 instructions, and also enable the use of built-in functions that 14832 allow more direct access to the VSX instruction set. 14833 14834`-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 14835`-mfloat-gprs' 14836 This switch enables or disables the generation of floating point 14837 operations on the general purpose registers for architectures that 14838 support it. 14839 14840 The argument YES or SINGLE enables the use of single-precision 14841 floating point operations. 14842 14843 The argument DOUBLE enables the use of single and double-precision 14844 floating point operations. 14845 14846 The argument NO disables floating point operations on the general 14847 purpose registers. 14848 14849 This option is currently only available on the MPC854x. 14850 14851`-m32' 14852`-m64' 14853 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 14854 targets (including GNU/Linux). The 32-bit environment sets int, 14855 long and pointer to 32 bits and generates code that runs on any 14856 PowerPC variant. The 64-bit environment sets int to 32 bits and 14857 long and pointer to 64 bits, and generates code for PowerPC64, as 14858 for `-mpowerpc64'. 14859 14860`-mfull-toc' 14861`-mno-fp-in-toc' 14862`-mno-sum-in-toc' 14863`-mminimal-toc' 14864 Modify generation of the TOC (Table Of Contents), which is created 14865 for every executable file. The `-mfull-toc' option is selected by 14866 default. In that case, GCC will allocate at least one TOC entry 14867 for each unique non-automatic variable reference in your program. 14868 GCC will also place floating-point constants in the TOC. However, 14869 only 16,384 entries are available in the TOC. 14870 14871 If you receive a linker error message that saying you have 14872 overflowed the available TOC space, you can reduce the amount of 14873 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 14874 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 14875 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 14876 code to calculate the sum of an address and a constant at run-time 14877 instead of putting that sum into the TOC. You may specify one or 14878 both of these options. Each causes GCC to produce very slightly 14879 slower and larger code at the expense of conserving TOC space. 14880 14881 If you still run out of space in the TOC even when you specify 14882 both of these options, specify `-mminimal-toc' instead. This 14883 option causes GCC to make only one TOC entry for every file. When 14884 you specify this option, GCC will produce code that is slower and 14885 larger but which uses extremely little TOC space. You may wish to 14886 use this option only on files that contain less frequently 14887 executed code. 14888 14889`-maix64' 14890`-maix32' 14891 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 14892 64-bit `long' type, and the infrastructure needed to support them. 14893 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while 14894 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'. 14895 GCC defaults to `-maix32'. 14896 14897`-mxl-compat' 14898`-mno-xl-compat' 14899 Produce code that conforms more closely to IBM XL compiler 14900 semantics when using AIX-compatible ABI. Pass floating-point 14901 arguments to prototyped functions beyond the register save area 14902 (RSA) on the stack in addition to argument FPRs. Do not assume 14903 that most significant double in 128-bit long double value is 14904 properly rounded when comparing values and converting to double. 14905 Use XL symbol names for long double support routines. 14906 14907 The AIX calling convention was extended but not initially 14908 documented to handle an obscure K&R C case of calling a function 14909 that takes the address of its arguments with fewer arguments than 14910 declared. IBM XL compilers access floating point arguments which 14911 do not fit in the RSA from the stack when a subroutine is compiled 14912 without optimization. Because always storing floating-point 14913 arguments on the stack is inefficient and rarely needed, this 14914 option is not enabled by default and only is necessary when 14915 calling subroutines compiled by IBM XL compilers without 14916 optimization. 14917 14918`-mpe' 14919 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 14920 application written to use message passing with special startup 14921 code to enable the application to run. The system must have PE 14922 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 14923 `specs' file must be overridden with the `-specs=' option to 14924 specify the appropriate directory location. The Parallel 14925 Environment does not support threads, so the `-mpe' option and the 14926 `-pthread' option are incompatible. 14927 14928`-malign-natural' 14929`-malign-power' 14930 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 14931 `-malign-natural' overrides the ABI-defined alignment of larger 14932 types, such as floating-point doubles, on their natural size-based 14933 boundary. The option `-malign-power' instructs GCC to follow the 14934 ABI-specified alignment rules. GCC defaults to the standard 14935 alignment defined in the ABI. 14936 14937 On 64-bit Darwin, natural alignment is the default, and 14938 `-malign-power' is not supported. 14939 14940`-msoft-float' 14941`-mhard-float' 14942 Generate code that does not use (uses) the floating-point register 14943 set. Software floating point emulation is provided if you use the 14944 `-msoft-float' option, and pass the option to GCC when linking. 14945 14946`-msingle-float' 14947`-mdouble-float' 14948 Generate code for single or double-precision floating point 14949 operations. `-mdouble-float' implies `-msingle-float'. 14950 14951`-msimple-fpu' 14952 Do not generate sqrt and div instructions for hardware floating 14953 point unit. 14954 14955`-mfpu' 14956 Specify type of floating point unit. Valid values are SP_LITE 14957 (equivalent to -msingle-float -msimple-fpu), DP_LITE (equivalent 14958 to -mdouble-float -msimple-fpu), SP_FULL (equivalent to 14959 -msingle-float), and DP_FULL (equivalent to -mdouble-float). 14960 14961`-mxilinx-fpu' 14962 Perform optimizations for floating point unit on Xilinx PPC 14963 405/440. 14964 14965`-mmultiple' 14966`-mno-multiple' 14967 Generate code that uses (does not use) the load multiple word 14968 instructions and the store multiple word instructions. These 14969 instructions are generated by default on POWER systems, and not 14970 generated on PowerPC systems. Do not use `-mmultiple' on little 14971 endian PowerPC systems, since those instructions do not work when 14972 the processor is in little endian mode. The exceptions are PPC740 14973 and PPC750 which permit the instructions usage in little endian 14974 mode. 14975 14976`-mstring' 14977`-mno-string' 14978 Generate code that uses (does not use) the load string instructions 14979 and the store string word instructions to save multiple registers 14980 and do small block moves. These instructions are generated by 14981 default on POWER systems, and not generated on PowerPC systems. 14982 Do not use `-mstring' on little endian PowerPC systems, since those 14983 instructions do not work when the processor is in little endian 14984 mode. The exceptions are PPC740 and PPC750 which permit the 14985 instructions usage in little endian mode. 14986 14987`-mupdate' 14988`-mno-update' 14989 Generate code that uses (does not use) the load or store 14990 instructions that update the base register to the address of the 14991 calculated memory location. These instructions are generated by 14992 default. If you use `-mno-update', there is a small window 14993 between the time that the stack pointer is updated and the address 14994 of the previous frame is stored, which means code that walks the 14995 stack frame across interrupts or signals may get corrupted data. 14996 14997`-mavoid-indexed-addresses' 14998`-mno-avoid-indexed-addresses' 14999 Generate code that tries to avoid (not avoid) the use of indexed 15000 load or store instructions. These instructions can incur a 15001 performance penalty on Power6 processors in certain situations, 15002 such as when stepping through large arrays that cross a 16M 15003 boundary. This option is enabled by default when targetting 15004 Power6 and disabled otherwise. 15005 15006`-mfused-madd' 15007`-mno-fused-madd' 15008 Generate code that uses (does not use) the floating point multiply 15009 and accumulate instructions. These instructions are generated by 15010 default if hardware floating point is used. The machine dependent 15011 `-mfused-madd' option is now mapped to the machine independent 15012 `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to 15013 `-ffp-contract=off'. 15014 15015`-mmulhw' 15016`-mno-mulhw' 15017 Generate code that uses (does not use) the half-word multiply and 15018 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 15019 processors. These instructions are generated by default when 15020 targetting those processors. 15021 15022`-mdlmzb' 15023`-mno-dlmzb' 15024 Generate code that uses (does not use) the string-search `dlmzb' 15025 instruction on the IBM 405, 440, 464 and 476 processors. This 15026 instruction is generated by default when targetting those 15027 processors. 15028 15029`-mno-bit-align' 15030`-mbit-align' 15031 On System V.4 and embedded PowerPC systems do not (do) force 15032 structures and unions that contain bit-fields to be aligned to the 15033 base type of the bit-field. 15034 15035 For example, by default a structure containing nothing but 8 15036 `unsigned' bit-fields of length 1 would be aligned to a 4 byte 15037 boundary and have a size of 4 bytes. By using `-mno-bit-align', 15038 the structure would be aligned to a 1 byte boundary and be one 15039 byte in size. 15040 15041`-mno-strict-align' 15042`-mstrict-align' 15043 On System V.4 and embedded PowerPC systems do not (do) assume that 15044 unaligned memory references will be handled by the system. 15045 15046`-mrelocatable' 15047`-mno-relocatable' 15048 Generate code that allows (does not allow) a static executable to 15049 be relocated to a different address at runtime. A simple embedded 15050 PowerPC system loader should relocate the entire contents of 15051 `.got2' and 4-byte locations listed in the `.fixup' section, a 15052 table of 32-bit addresses generated by this option. For this to 15053 work, all objects linked together must be compiled with 15054 `-mrelocatable' or `-mrelocatable-lib'. `-mrelocatable' code 15055 aligns the stack to an 8 byte boundary. 15056 15057`-mrelocatable-lib' 15058`-mno-relocatable-lib' 15059 Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup' 15060 section to allow static executables to be relocated at runtime, 15061 but `-mrelocatable-lib' does not use the smaller stack alignment 15062 of `-mrelocatable'. Objects compiled with `-mrelocatable-lib' may 15063 be linked with objects compiled with any combination of the 15064 `-mrelocatable' options. 15065 15066`-mno-toc' 15067`-mtoc' 15068 On System V.4 and embedded PowerPC systems do not (do) assume that 15069 register 2 contains a pointer to a global area pointing to the 15070 addresses used in the program. 15071 15072`-mlittle' 15073`-mlittle-endian' 15074 On System V.4 and embedded PowerPC systems compile code for the 15075 processor in little endian mode. The `-mlittle-endian' option is 15076 the same as `-mlittle'. 15077 15078`-mbig' 15079`-mbig-endian' 15080 On System V.4 and embedded PowerPC systems compile code for the 15081 processor in big endian mode. The `-mbig-endian' option is the 15082 same as `-mbig'. 15083 15084`-mdynamic-no-pic' 15085 On Darwin and Mac OS X systems, compile code so that it is not 15086 relocatable, but that its external references are relocatable. The 15087 resulting code is suitable for applications, but not shared 15088 libraries. 15089 15090`-msingle-pic-base' 15091 Treat the register used for PIC addressing as read-only, rather 15092 than loading it in the prologue for each function. The run-time 15093 system is responsible for initializing this register with an 15094 appropriate value before execution begins. 15095 15096`-mprioritize-restricted-insns=PRIORITY' 15097 This option controls the priority that is assigned to 15098 dispatch-slot restricted instructions during the second scheduling 15099 pass. The argument PRIORITY takes the value 0/1/2 to assign 15100 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted 15101 instructions. 15102 15103`-msched-costly-dep=DEPENDENCE_TYPE' 15104 This option controls which dependences are considered costly by 15105 the target during instruction scheduling. The argument 15106 DEPENDENCE_TYPE takes one of the following values: NO: no 15107 dependence is costly, ALL: all dependences are costly, 15108 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly, 15109 STORE_TO_LOAD: any dependence from store to load is costly, 15110 NUMBER: any dependence which latency >= NUMBER is costly. 15111 15112`-minsert-sched-nops=SCHEME' 15113 This option controls which nop insertion scheme will be used during 15114 the second scheduling pass. The argument SCHEME takes one of the 15115 following values: NO: Don't insert nops. PAD: Pad with nops any 15116 dispatch group which has vacant issue slots, according to the 15117 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly 15118 dependent insns into separate groups. Insert exactly as many nops 15119 as needed to force an insn to a new group, according to the 15120 estimated processor grouping. NUMBER: Insert nops to force costly 15121 dependent insns into separate groups. Insert NUMBER nops to force 15122 an insn to a new group. 15123 15124`-mcall-sysv' 15125 On System V.4 and embedded PowerPC systems compile code using 15126 calling conventions that adheres to the March 1995 draft of the 15127 System V Application Binary Interface, PowerPC processor 15128 supplement. This is the default unless you configured GCC using 15129 `powerpc-*-eabiaix'. 15130 15131`-mcall-sysv-eabi' 15132`-mcall-eabi' 15133 Specify both `-mcall-sysv' and `-meabi' options. 15134 15135`-mcall-sysv-noeabi' 15136 Specify both `-mcall-sysv' and `-mno-eabi' options. 15137 15138`-mcall-aixdesc' 15139 On System V.4 and embedded PowerPC systems compile code for the AIX 15140 operating system. 15141 15142`-mcall-linux' 15143 On System V.4 and embedded PowerPC systems compile code for the 15144 Linux-based GNU system. 15145 15146`-mcall-gnu' 15147 On System V.4 and embedded PowerPC systems compile code for the 15148 Hurd-based GNU system. 15149 15150`-mcall-freebsd' 15151 On System V.4 and embedded PowerPC systems compile code for the 15152 FreeBSD operating system. 15153 15154`-mcall-netbsd' 15155 On System V.4 and embedded PowerPC systems compile code for the 15156 NetBSD operating system. 15157 15158`-mcall-openbsd' 15159 On System V.4 and embedded PowerPC systems compile code for the 15160 OpenBSD operating system. 15161 15162`-maix-struct-return' 15163 Return all structures in memory (as specified by the AIX ABI). 15164 15165`-msvr4-struct-return' 15166 Return structures smaller than 8 bytes in registers (as specified 15167 by the SVR4 ABI). 15168 15169`-mabi=ABI-TYPE' 15170 Extend the current ABI with a particular extension, or remove such 15171 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 15172 IBMLONGDOUBLE, IEEELONGDOUBLE. 15173 15174`-mabi=spe' 15175 Extend the current ABI with SPE ABI extensions. This does not 15176 change the default ABI, instead it adds the SPE ABI extensions to 15177 the current ABI. 15178 15179`-mabi=no-spe' 15180 Disable Booke SPE ABI extensions for the current ABI. 15181 15182`-mabi=ibmlongdouble' 15183 Change the current ABI to use IBM extended precision long double. 15184 This is a PowerPC 32-bit SYSV ABI option. 15185 15186`-mabi=ieeelongdouble' 15187 Change the current ABI to use IEEE extended precision long double. 15188 This is a PowerPC 32-bit Linux ABI option. 15189 15190`-mprototype' 15191`-mno-prototype' 15192 On System V.4 and embedded PowerPC systems assume that all calls to 15193 variable argument functions are properly prototyped. Otherwise, 15194 the compiler must insert an instruction before every non 15195 prototyped call to set or clear bit 6 of the condition code 15196 register (CR) to indicate whether floating point values were 15197 passed in the floating point registers in case the function takes 15198 a variable arguments. With `-mprototype', only calls to 15199 prototyped variable argument functions will set or clear the bit. 15200 15201`-msim' 15202 On embedded PowerPC systems, assume that the startup module is 15203 called `sim-crt0.o' and that the standard C libraries are 15204 `libsim.a' and `libc.a'. This is the default for 15205 `powerpc-*-eabisim' configurations. 15206 15207`-mmvme' 15208 On embedded PowerPC systems, assume that the startup module is 15209 called `crt0.o' and the standard C libraries are `libmvme.a' and 15210 `libc.a'. 15211 15212`-mads' 15213 On embedded PowerPC systems, assume that the startup module is 15214 called `crt0.o' and the standard C libraries are `libads.a' and 15215 `libc.a'. 15216 15217`-myellowknife' 15218 On embedded PowerPC systems, assume that the startup module is 15219 called `crt0.o' and the standard C libraries are `libyk.a' and 15220 `libc.a'. 15221 15222`-mvxworks' 15223 On System V.4 and embedded PowerPC systems, specify that you are 15224 compiling for a VxWorks system. 15225 15226`-memb' 15227 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 15228 header to indicate that `eabi' extended relocations are used. 15229 15230`-meabi' 15231`-mno-eabi' 15232 On System V.4 and embedded PowerPC systems do (do not) adhere to 15233 the Embedded Applications Binary Interface (eabi) which is a set of 15234 modifications to the System V.4 specifications. Selecting `-meabi' 15235 means that the stack is aligned to an 8 byte boundary, and the 15236 `-msdata' option can use both `r2' and `r13' to point to two 15237 separate small data areas. Selecting `-mno-eabi' means that the 15238 stack is aligned to a 16 byte boundary, and the `-msdata' option 15239 will only use `r13' to point to a single small data area. The 15240 `-meabi' option is on by default if you configured GCC using one 15241 of the `powerpc*-*-eabi*' options. 15242 15243`-msdata=eabi' 15244 On System V.4 and embedded PowerPC systems, put small initialized 15245 `const' global and static data in the `.sdata2' section, which is 15246 pointed to by register `r2'. Put small initialized non-`const' 15247 global and static data in the `.sdata' section, which is pointed 15248 to by register `r13'. Put small uninitialized global and static 15249 data in the `.sbss' section, which is adjacent to the `.sdata' 15250 section. The `-msdata=eabi' option is incompatible with the 15251 `-mrelocatable' option. The `-msdata=eabi' option also sets the 15252 `-memb' option. 15253 15254`-msdata=sysv' 15255 On System V.4 and embedded PowerPC systems, put small global and 15256 static data in the `.sdata' section, which is pointed to by 15257 register `r13'. Put small uninitialized global and static data in 15258 the `.sbss' section, which is adjacent to the `.sdata' section. 15259 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 15260 option. 15261 15262`-msdata=default' 15263`-msdata' 15264 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 15265 compile code the same as `-msdata=eabi', otherwise compile code the 15266 same as `-msdata=sysv'. 15267 15268`-msdata=data' 15269 On System V.4 and embedded PowerPC systems, put small global data 15270 in the `.sdata' section. Put small uninitialized global data in 15271 the `.sbss' section. Do not use register `r13' to address small 15272 data however. This is the default behavior unless other `-msdata' 15273 options are used. 15274 15275`-msdata=none' 15276`-mno-sdata' 15277 On embedded PowerPC systems, put all initialized global and static 15278 data in the `.data' section, and all uninitialized data in the 15279 `.bss' section. 15280 15281`-mblock-move-inline-limit=NUM' 15282 Inline all block moves (such as calls to `memcpy' or structure 15283 copies) less than or equal to NUM bytes. The minimum value for 15284 NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. 15285 The default value is target-specific. 15286 15287`-G NUM' 15288 On embedded PowerPC systems, put global and static items less than 15289 or equal to NUM bytes into the small data or bss sections instead 15290 of the normal data or bss section. By default, NUM is 8. The `-G 15291 NUM' switch is also passed to the linker. All modules should be 15292 compiled with the same `-G NUM' value. 15293 15294`-mregnames' 15295`-mno-regnames' 15296 On System V.4 and embedded PowerPC systems do (do not) emit 15297 register names in the assembly language output using symbolic 15298 forms. 15299 15300`-mlongcall' 15301`-mno-longcall' 15302 By default assume that all calls are far away so that a longer more 15303 expensive calling sequence is required. This is required for calls 15304 further than 32 megabytes (33,554,432 bytes) from the current 15305 location. A short call will be generated if the compiler knows 15306 the call cannot be that far away. This setting can be overridden 15307 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 15308 15309 Some linkers are capable of detecting out-of-range calls and 15310 generating glue code on the fly. On these systems, long calls are 15311 unnecessary and generate slower code. As of this writing, the AIX 15312 linker can do this, as can the GNU linker for PowerPC/64. It is 15313 planned to add this feature to the GNU linker for 32-bit PowerPC 15314 systems as well. 15315 15316 On Darwin/PPC systems, `#pragma longcall' will generate "jbsr 15317 callee, L42", plus a "branch island" (glue code). The two target 15318 addresses represent the callee and the "branch island". The 15319 Darwin/PPC linker will prefer the first address and generate a "bl 15320 callee" if the PPC "bl" instruction will reach the callee directly; 15321 otherwise, the linker will generate "bl L42" to call the "branch 15322 island". The "branch island" is appended to the body of the 15323 calling function; it computes the full 32-bit address of the callee 15324 and jumps to it. 15325 15326 On Mach-O (Darwin) systems, this option directs the compiler emit 15327 to the glue for every direct call, and the Darwin linker decides 15328 whether to use or discard it. 15329 15330 In the future, we may cause GCC to ignore all longcall 15331 specifications when the linker is known to generate glue. 15332 15333`-mtls-markers' 15334`-mno-tls-markers' 15335 Mark (do not mark) calls to `__tls_get_addr' with a relocation 15336 specifying the function argument. The relocation allows ld to 15337 reliably associate function call with argument setup instructions 15338 for TLS optimization, which in turn allows gcc to better schedule 15339 the sequence. 15340 15341`-pthread' 15342 Adds support for multithreading with the "pthreads" library. This 15343 option sets flags for both the preprocessor and linker. 15344 15345`-mrecip' 15346`-mno-recip' 15347 This option will enable GCC to use the reciprocal estimate and 15348 reciprocal square root estimate instructions with additional 15349 Newton-Raphson steps to increase precision instead of doing a 15350 divide or square root and divide for floating point arguments. 15351 You should use the `-ffast-math' option when using `-mrecip' (or at 15352 least `-funsafe-math-optimizations', `-finite-math-only', 15353 `-freciprocal-math' and `-fno-trapping-math'). Note that while 15354 the throughput of the sequence is generally higher than the 15355 throughput of the non-reciprocal instruction, the precision of the 15356 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 15357 equals 0.99999994) for reciprocal square roots. 15358 15359`-mrecip=OPT' 15360 This option allows to control which reciprocal estimate 15361 instructions may be used. OPT is a comma separated list of 15362 options, that may be preceded by a `!' to invert the option: 15363 `all': enable all estimate instructions, `default': enable the 15364 default instructions, equivalent to `-mrecip', `none': disable all 15365 estimate instructions, equivalent to `-mno-recip'; `div': enable 15366 the reciprocal approximation instructions for both single and 15367 double precision; `divf': enable the single precision reciprocal 15368 approximation instructions; `divd': enable the double precision 15369 reciprocal approximation instructions; `rsqrt': enable the 15370 reciprocal square root approximation instructions for both single 15371 and double precision; `rsqrtf': enable the single precision 15372 reciprocal square root approximation instructions; `rsqrtd': 15373 enable the double precision reciprocal square root approximation 15374 instructions; 15375 15376 So for example, `-mrecip=all,!rsqrtd' would enable the all of the 15377 reciprocal estimate instructions, except for the `FRSQRTE', 15378 `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the 15379 double precision reciprocal square root calculations. 15380 15381`-mrecip-precision' 15382`-mno-recip-precision' 15383 Assume (do not assume) that the reciprocal estimate instructions 15384 provide higher precision estimates than is mandated by the powerpc 15385 ABI. Selecting `-mcpu=power6' or `-mcpu=power7' automatically 15386 selects `-mrecip-precision'. The double precision square root 15387 estimate instructions are not generated by default on low 15388 precision machines, since they do not provide an estimate that 15389 converges after three steps. 15390 15391`-mveclibabi=TYPE' 15392 Specifies the ABI type to use for vectorizing intrinsics using an 15393 external library. The only type supported at present is `mass', 15394 which specifies to use IBM's Mathematical Acceleration Subsystem 15395 (MASS) libraries for vectorizing intrinsics using external 15396 libraries. GCC will currently emit calls to `acosd2', `acosf4', 15397 `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4', 15398 `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4', 15399 `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4', 15400 `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2', 15401 `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2', 15402 `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2', 15403 `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4', 15404 `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4', 15405 `tanhd2', and `tanhf4' when generating code for power7. Both 15406 `-ftree-vectorize' and `-funsafe-math-optimizations' have to be 15407 enabled. The MASS libraries will have to be specified at link 15408 time. 15409 15410`-mfriz' 15411`-mno-friz' 15412 Generate (do not generate) the `friz' instruction when the 15413 `-funsafe-math-optimizations' option is used to optimize rounding 15414 a floating point value to 64-bit integer and back to floating 15415 point. The `friz' instruction does not return the same value if 15416 the floating point number is too large to fit in an integer. 15417 15418 15419File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 15420 154213.17.34 RX Options 15422------------------ 15423 15424These command line options are defined for RX targets: 15425 15426`-m64bit-doubles' 15427`-m32bit-doubles' 15428 Make the `double' data type be 64-bits (`-m64bit-doubles') or 15429 32-bits (`-m32bit-doubles') in size. The default is 15430 `-m32bit-doubles'. _Note_ RX floating point hardware only works 15431 on 32-bit values, which is why the default is `-m32bit-doubles'. 15432 15433`-fpu' 15434`-nofpu' 15435 Enables (`-fpu') or disables (`-nofpu') the use of RX floating 15436 point hardware. The default is enabled for the RX600 series and 15437 disabled for the RX200 series. 15438 15439 Floating point instructions will only be generated for 32-bit 15440 floating point values however, so if the `-m64bit-doubles' option 15441 is in use then the FPU hardware will not be used for doubles. 15442 15443 _Note_ If the `-fpu' option is enabled then 15444 `-funsafe-math-optimizations' is also enabled automatically. This 15445 is because the RX FPU instructions are themselves unsafe. 15446 15447`-mcpu=NAME' 15448 Selects the type of RX CPU to be targeted. Currently three types 15449 are supported, the generic RX600 and RX200 series hardware and the 15450 specific RX610 CPU. The default is RX600. 15451 15452 The only difference between RX600 and RX610 is that the RX610 does 15453 not support the `MVTIPL' instruction. 15454 15455 The RX200 series does not have a hardware floating point unit and 15456 so `-nofpu' is enabled by default when this type is selected. 15457 15458`-mbig-endian-data' 15459`-mlittle-endian-data' 15460 Store data (but not code) in the big-endian format. The default is 15461 `-mlittle-endian-data', i.e. to store data in the little endian 15462 format. 15463 15464`-msmall-data-limit=N' 15465 Specifies the maximum size in bytes of global and static variables 15466 which can be placed into the small data area. Using the small data 15467 area can lead to smaller and faster code, but the size of area is 15468 limited and it is up to the programmer to ensure that the area does 15469 not overflow. Also when the small data area is used one of the 15470 RX's registers (`r13') is reserved for use pointing to this area, 15471 so it is no longer available for use by the compiler. This could 15472 result in slower and/or larger code if variables which once could 15473 have been held in `r13' are now pushed onto the stack. 15474 15475 Note, common variables (variables which have not been initialised) 15476 and constants are not placed into the small data area as they are 15477 assigned to other sections in the output executable. 15478 15479 The default value is zero, which disables this feature. Note, this 15480 feature is not enabled by default with higher optimization levels 15481 (`-O2' etc) because of the potentially detrimental effects of 15482 reserving register `r13'. It is up to the programmer to 15483 experiment and discover whether this feature is of benefit to their 15484 program. 15485 15486`-msim' 15487`-mno-sim' 15488 Use the simulator runtime. The default is to use the libgloss 15489 board specific runtime. 15490 15491`-mas100-syntax' 15492`-mno-as100-syntax' 15493 When generating assembler output use a syntax that is compatible 15494 with Renesas's AS100 assembler. This syntax can also be handled 15495 by the GAS assembler but it has some restrictions so generating it 15496 is not the default option. 15497 15498`-mmax-constant-size=N' 15499 Specifies the maximum size, in bytes, of a constant that can be 15500 used as an operand in a RX instruction. Although the RX 15501 instruction set does allow constants of up to 4 bytes in length to 15502 be used in instructions, a longer value equates to a longer 15503 instruction. Thus in some circumstances it can be beneficial to 15504 restrict the size of constants that are used in instructions. 15505 Constants that are too big are instead placed into a constant pool 15506 and referenced via register indirection. 15507 15508 The value N can be between 0 and 4. A value of 0 (the default) or 15509 4 means that constants of any size are allowed. 15510 15511`-mrelax' 15512 Enable linker relaxation. Linker relaxation is a process whereby 15513 the linker will attempt to reduce the size of a program by finding 15514 shorter versions of various instructions. Disabled by default. 15515 15516`-mint-register=N' 15517 Specify the number of registers to reserve for fast interrupt 15518 handler functions. The value N can be between 0 and 4. A value 15519 of 1 means that register `r13' will be reserved for the exclusive 15520 use of fast interrupt handlers. A value of 2 reserves `r13' and 15521 `r12'. A value of 3 reserves `r13', `r12' and `r11', and a value 15522 of 4 reserves `r13' through `r10'. A value of 0, the default, 15523 does not reserve any registers. 15524 15525`-msave-acc-in-interrupts' 15526 Specifies that interrupt handler functions should preserve the 15527 accumulator register. This is only necessary if normal code might 15528 use the accumulator register, for example because it performs 15529 64-bit multiplications. The default is to ignore the accumulator 15530 as this makes the interrupt handlers faster. 15531 15532 15533 _Note:_ The generic GCC command line `-ffixed-REG' has special 15534significance to the RX port when used with the `interrupt' function 15535attribute. This attribute indicates a function intended to process 15536fast interrupts. GCC will will ensure that it only uses the registers 15537`r10', `r11', `r12' and/or `r13' and only provided that the normal use 15538of the corresponding registers have been restricted via the 15539`-ffixed-REG' or `-mint-register' command line options. 15540 15541 15542File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options 15543 155443.17.35 S/390 and zSeries Options 15545--------------------------------- 15546 15547These are the `-m' options defined for the S/390 and zSeries 15548architecture. 15549 15550`-mhard-float' 15551`-msoft-float' 15552 Use (do not use) the hardware floating-point instructions and 15553 registers for floating-point operations. When `-msoft-float' is 15554 specified, functions in `libgcc.a' will be used to perform 15555 floating-point operations. When `-mhard-float' is specified, the 15556 compiler generates IEEE floating-point instructions. This is the 15557 default. 15558 15559`-mhard-dfp' 15560`-mno-hard-dfp' 15561 Use (do not use) the hardware decimal-floating-point instructions 15562 for decimal-floating-point operations. When `-mno-hard-dfp' is 15563 specified, functions in `libgcc.a' will be used to perform 15564 decimal-floating-point operations. When `-mhard-dfp' is 15565 specified, the compiler generates decimal-floating-point hardware 15566 instructions. This is the default for `-march=z9-ec' or higher. 15567 15568`-mlong-double-64' 15569`-mlong-double-128' 15570 These switches control the size of `long double' type. A size of 15571 64bit makes the `long double' type equivalent to the `double' 15572 type. This is the default. 15573 15574`-mbackchain' 15575`-mno-backchain' 15576 Store (do not store) the address of the caller's frame as 15577 backchain pointer into the callee's stack frame. A backchain may 15578 be needed to allow debugging using tools that do not understand 15579 DWARF-2 call frame information. When `-mno-packed-stack' is in 15580 effect, the backchain pointer is stored at the bottom of the stack 15581 frame; when `-mpacked-stack' is in effect, the backchain is placed 15582 into the topmost word of the 96/160 byte register save area. 15583 15584 In general, code compiled with `-mbackchain' is call-compatible 15585 with code compiled with `-mmo-backchain'; however, use of the 15586 backchain for debugging purposes usually requires that the whole 15587 binary is built with `-mbackchain'. Note that the combination of 15588 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 15589 supported. In order to build a linux kernel use `-msoft-float'. 15590 15591 The default is to not maintain the backchain. 15592 15593`-mpacked-stack' 15594`-mno-packed-stack' 15595 Use (do not use) the packed stack layout. When 15596 `-mno-packed-stack' is specified, the compiler uses the all fields 15597 of the 96/160 byte register save area only for their default 15598 purpose; unused fields still take up stack space. When 15599 `-mpacked-stack' is specified, register save slots are densely 15600 packed at the top of the register save area; unused space is 15601 reused for other purposes, allowing for more efficient use of the 15602 available stack space. However, when `-mbackchain' is also in 15603 effect, the topmost word of the save area is always used to store 15604 the backchain, and the return address register is always saved two 15605 words below the backchain. 15606 15607 As long as the stack frame backchain is not used, code generated 15608 with `-mpacked-stack' is call-compatible with code generated with 15609 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 15610 for S/390 or zSeries generated code that uses the stack frame 15611 backchain at run time, not just for debugging purposes. Such code 15612 is not call-compatible with code compiled with `-mpacked-stack'. 15613 Also, note that the combination of `-mbackchain', `-mpacked-stack' 15614 and `-mhard-float' is not supported. In order to build a linux 15615 kernel use `-msoft-float'. 15616 15617 The default is to not use the packed stack layout. 15618 15619`-msmall-exec' 15620`-mno-small-exec' 15621 Generate (or do not generate) code using the `bras' instruction to 15622 do subroutine calls. This only works reliably if the total 15623 executable size does not exceed 64k. The default is to use the 15624 `basr' instruction instead, which does not have this limitation. 15625 15626`-m64' 15627`-m31' 15628 When `-m31' is specified, generate code compliant to the GNU/Linux 15629 for S/390 ABI. When `-m64' is specified, generate code compliant 15630 to the GNU/Linux for zSeries ABI. This allows GCC in particular 15631 to generate 64-bit instructions. For the `s390' targets, the 15632 default is `-m31', while the `s390x' targets default to `-m64'. 15633 15634`-mzarch' 15635`-mesa' 15636 When `-mzarch' is specified, generate code using the instructions 15637 available on z/Architecture. When `-mesa' is specified, generate 15638 code using the instructions available on ESA/390. Note that 15639 `-mesa' is not possible with `-m64'. When generating code 15640 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 15641 When generating code compliant to the GNU/Linux for zSeries ABI, 15642 the default is `-mzarch'. 15643 15644`-mmvcle' 15645`-mno-mvcle' 15646 Generate (or do not generate) code using the `mvcle' instruction 15647 to perform block moves. When `-mno-mvcle' is specified, use a 15648 `mvc' loop instead. This is the default unless optimizing for 15649 size. 15650 15651`-mdebug' 15652`-mno-debug' 15653 Print (or do not print) additional debug information when 15654 compiling. The default is to not print debug information. 15655 15656`-march=CPU-TYPE' 15657 Generate code that will run on CPU-TYPE, which is the name of a 15658 system representing a certain processor type. Possible values for 15659 CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and 15660 `z10'. When generating code using the instructions available on 15661 z/Architecture, the default is `-march=z900'. Otherwise, the 15662 default is `-march=g5'. 15663 15664`-mtune=CPU-TYPE' 15665 Tune to CPU-TYPE everything applicable about the generated code, 15666 except for the ABI and the set of available instructions. The 15667 list of CPU-TYPE values is the same as for `-march'. The default 15668 is the value used for `-march'. 15669 15670`-mtpf-trace' 15671`-mno-tpf-trace' 15672 Generate code that adds (does not add) in TPF OS specific branches 15673 to trace routines in the operating system. This option is off by 15674 default, even when compiling for the TPF OS. 15675 15676`-mfused-madd' 15677`-mno-fused-madd' 15678 Generate code that uses (does not use) the floating point multiply 15679 and accumulate instructions. These instructions are generated by 15680 default if hardware floating point is used. 15681 15682`-mwarn-framesize=FRAMESIZE' 15683 Emit a warning if the current function exceeds the given frame 15684 size. Because this is a compile time check it doesn't need to be 15685 a real problem when the program runs. It is intended to identify 15686 functions which most probably cause a stack overflow. It is 15687 useful to be used in an environment with limited stack size e.g. 15688 the linux kernel. 15689 15690`-mwarn-dynamicstack' 15691 Emit a warning if the function calls alloca or uses dynamically 15692 sized arrays. This is generally a bad idea with a limited stack 15693 size. 15694 15695`-mstack-guard=STACK-GUARD' 15696`-mstack-size=STACK-SIZE' 15697 If these options are provided the s390 back end emits additional 15698 instructions in the function prologue which trigger a trap if the 15699 stack size is STACK-GUARD bytes above the STACK-SIZE (remember 15700 that the stack on s390 grows downward). If the STACK-GUARD option 15701 is omitted the smallest power of 2 larger than the frame size of 15702 the compiled function is chosen. These options are intended to be 15703 used to help debugging stack overflow problems. The additionally 15704 emitted code causes only little overhead and hence can also be 15705 used in production like systems without greater performance 15706 degradation. The given values have to be exact powers of 2 and 15707 STACK-SIZE has to be greater than STACK-GUARD without exceeding 15708 64k. In order to be efficient the extra code makes the assumption 15709 that the stack starts at an address aligned to the value given by 15710 STACK-SIZE. The STACK-GUARD option can only be used in 15711 conjunction with STACK-SIZE. 15712 15713 15714File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 15715 157163.17.36 Score Options 15717--------------------- 15718 15719These options are defined for Score implementations: 15720 15721`-meb' 15722 Compile code for big endian mode. This is the default. 15723 15724`-mel' 15725 Compile code for little endian mode. 15726 15727`-mnhwloop' 15728 Disable generate bcnz instruction. 15729 15730`-muls' 15731 Enable generate unaligned load and store instruction. 15732 15733`-mmac' 15734 Enable the use of multiply-accumulate instructions. Disabled by 15735 default. 15736 15737`-mscore5' 15738 Specify the SCORE5 as the target architecture. 15739 15740`-mscore5u' 15741 Specify the SCORE5U of the target architecture. 15742 15743`-mscore7' 15744 Specify the SCORE7 as the target architecture. This is the default. 15745 15746`-mscore7d' 15747 Specify the SCORE7D as the target architecture. 15748 15749 15750File: gcc.info, Node: SH Options, Next: Solaris 2 Options, Prev: Score Options, Up: Submodel Options 15751 157523.17.37 SH Options 15753------------------ 15754 15755These `-m' options are defined for the SH implementations: 15756 15757`-m1' 15758 Generate code for the SH1. 15759 15760`-m2' 15761 Generate code for the SH2. 15762 15763`-m2e' 15764 Generate code for the SH2e. 15765 15766`-m2a-nofpu' 15767 Generate code for the SH2a without FPU, or for a SH2a-FPU in such 15768 a way that the floating-point unit is not used. 15769 15770`-m2a-single-only' 15771 Generate code for the SH2a-FPU, in such a way that no 15772 double-precision floating point operations are used. 15773 15774`-m2a-single' 15775 Generate code for the SH2a-FPU assuming the floating-point unit is 15776 in single-precision mode by default. 15777 15778`-m2a' 15779 Generate code for the SH2a-FPU assuming the floating-point unit is 15780 in double-precision mode by default. 15781 15782`-m3' 15783 Generate code for the SH3. 15784 15785`-m3e' 15786 Generate code for the SH3e. 15787 15788`-m4-nofpu' 15789 Generate code for the SH4 without a floating-point unit. 15790 15791`-m4-single-only' 15792 Generate code for the SH4 with a floating-point unit that only 15793 supports single-precision arithmetic. 15794 15795`-m4-single' 15796 Generate code for the SH4 assuming the floating-point unit is in 15797 single-precision mode by default. 15798 15799`-m4' 15800 Generate code for the SH4. 15801 15802`-m4a-nofpu' 15803 Generate code for the SH4al-dsp, or for a SH4a in such a way that 15804 the floating-point unit is not used. 15805 15806`-m4a-single-only' 15807 Generate code for the SH4a, in such a way that no double-precision 15808 floating point operations are used. 15809 15810`-m4a-single' 15811 Generate code for the SH4a assuming the floating-point unit is in 15812 single-precision mode by default. 15813 15814`-m4a' 15815 Generate code for the SH4a. 15816 15817`-m4al' 15818 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 15819 the assembler. GCC doesn't generate any DSP instructions at the 15820 moment. 15821 15822`-mb' 15823 Compile code for the processor in big endian mode. 15824 15825`-ml' 15826 Compile code for the processor in little endian mode. 15827 15828`-mdalign' 15829 Align doubles at 64-bit boundaries. Note that this changes the 15830 calling conventions, and thus some functions from the standard C 15831 library will not work unless you recompile it first with 15832 `-mdalign'. 15833 15834`-mrelax' 15835 Shorten some address references at link time, when possible; uses 15836 the linker option `-relax'. 15837 15838`-mbigtable' 15839 Use 32-bit offsets in `switch' tables. The default is to use 15840 16-bit offsets. 15841 15842`-mbitops' 15843 Enable the use of bit manipulation instructions on SH2A. 15844 15845`-mfmovd' 15846 Enable the use of the instruction `fmovd'. Check `-mdalign' for 15847 alignment constraints. 15848 15849`-mhitachi' 15850 Comply with the calling conventions defined by Renesas. 15851 15852`-mrenesas' 15853 Comply with the calling conventions defined by Renesas. 15854 15855`-mno-renesas' 15856 Comply with the calling conventions defined for GCC before the 15857 Renesas conventions were available. This option is the default 15858 for all targets of the SH toolchain except for `sh-symbianelf'. 15859 15860`-mnomacsave' 15861 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 15862 given. 15863 15864`-mieee' 15865 Increase IEEE-compliance of floating-point code. At the moment, 15866 this is equivalent to `-fno-finite-math-only'. When generating 16 15867 bit SH opcodes, getting IEEE-conforming results for comparisons of 15868 NANs / infinities incurs extra overhead in every floating point 15869 comparison, therefore the default is set to `-ffinite-math-only'. 15870 15871`-minline-ic_invalidate' 15872 Inline code to invalidate instruction cache entries after setting 15873 up nested function trampolines. This option has no effect if 15874 -musermode is in effect and the selected code generation option 15875 (e.g. -m4) does not allow the use of the icbi instruction. If the 15876 selected code generation option does not allow the use of the icbi 15877 instruction, and -musermode is not in effect, the inlined code will 15878 manipulate the instruction cache address array directly with an 15879 associative write. This not only requires privileged mode, but it 15880 will also fail if the cache line had been mapped via the TLB and 15881 has become unmapped. 15882 15883`-misize' 15884 Dump instruction size and location in the assembly code. 15885 15886`-mpadstruct' 15887 This option is deprecated. It pads structures to multiple of 4 15888 bytes, which is incompatible with the SH ABI. 15889 15890`-mspace' 15891 Optimize for space instead of speed. Implied by `-Os'. 15892 15893`-mprefergot' 15894 When generating position-independent code, emit function calls 15895 using the Global Offset Table instead of the Procedure Linkage 15896 Table. 15897 15898`-musermode' 15899 Don't generate privileged mode only code; implies 15900 -mno-inline-ic_invalidate if the inlined code would not work in 15901 user mode. This is the default when the target is `sh-*-linux*'. 15902 15903`-multcost=NUMBER' 15904 Set the cost to assume for a multiply insn. 15905 15906`-mdiv=STRATEGY' 15907 Set the division strategy to use for SHmedia code. STRATEGY must 15908 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, 15909 inv:call, inv:call2, inv:fp . "fp" performs the operation in 15910 floating point. This has a very high latency, but needs only a 15911 few instructions, so it might be a good choice if your code has 15912 enough easily exploitable ILP to allow the compiler to schedule 15913 the floating point instructions together with other instructions. 15914 Division by zero causes a floating point exception. "inv" uses 15915 integer operations to calculate the inverse of the divisor, and 15916 then multiplies the dividend with the inverse. This strategy 15917 allows cse and hoisting of the inverse calculation. Division by 15918 zero calculates an unspecified result, but does not trap. 15919 "inv:minlat" is a variant of "inv" where if no cse / hoisting 15920 opportunities have been found, or if the entire operation has been 15921 hoisted to the same place, the last stages of the inverse 15922 calculation are intertwined with the final multiply to reduce the 15923 overall latency, at the expense of using a few more instructions, 15924 and thus offering fewer scheduling opportunities with other code. 15925 "call" calls a library function that usually implements the 15926 inv:minlat strategy. This gives high code density for 15927 m5-*media-nofpu compilations. "call2" uses a different entry 15928 point of the same library function, where it assumes that a 15929 pointer to a lookup table has already been set up, which exposes 15930 the pointer load to cse / code hoisting optimizations. 15931 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm 15932 for initial code generation, but if the code stays unoptimized, 15933 revert to the "call", "call2", or "fp" strategies, respectively. 15934 Note that the potentially-trapping side effect of division by zero 15935 is carried by a separate instruction, so it is possible that all 15936 the integer instructions are hoisted out, but the marker for the 15937 side effect stays where it is. A recombination to fp operations 15938 or a call is not possible in that case. "inv20u" and "inv20l" are 15939 variants of the "inv:minlat" strategy. In the case that the 15940 inverse calculation was nor separated from the multiply, they speed 15941 up division where the dividend fits into 20 bits (plus sign where 15942 applicable), by inserting a test to skip a number of operations in 15943 this case; this test slows down the case of larger dividends. 15944 inv20u assumes the case of a such a small dividend to be unlikely, 15945 and inv20l assumes it to be likely. 15946 15947`-maccumulate-outgoing-args' 15948 Reserve space once for outgoing arguments in the function prologue 15949 rather than around each call. Generally beneficial for 15950 performance and size. Also needed for unwinding to avoid changing 15951 the stack frame around conditional code. 15952 15953`-mdivsi3_libfunc=NAME' 15954 Set the name of the library function used for 32 bit signed 15955 division to NAME. This only affect the name used in the call and 15956 inv:call division strategies, and the compiler will still expect 15957 the same sets of input/output/clobbered registers as if this 15958 option was not present. 15959 15960`-mfixed-range=REGISTER-RANGE' 15961 Generate code treating the given register range as fixed registers. 15962 A fixed register is one that the register allocator can not use. 15963 This is useful when compiling kernel code. A register range is 15964 specified as two registers separated by a dash. Multiple register 15965 ranges can be specified separated by a comma. 15966 15967`-madjust-unroll' 15968 Throttle unrolling to avoid thrashing target registers. This 15969 option only has an effect if the gcc code base supports the 15970 TARGET_ADJUST_UNROLL_MAX target hook. 15971 15972`-mindexed-addressing' 15973 Enable the use of the indexed addressing mode for 15974 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 15975 implement 32 bit wrap-around semantics for the indexed addressing 15976 mode. The architecture allows the implementation of processors 15977 with 64 bit MMU, which the OS could use to get 32 bit addressing, 15978 but since no current hardware implementation supports this or any 15979 other way to make the indexed addressing mode safe to use in the 15980 32 bit ABI, the default is -mno-indexed-addressing. 15981 15982`-mgettrcost=NUMBER' 15983 Set the cost assumed for the gettr instruction to NUMBER. The 15984 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 15985 15986`-mpt-fixed' 15987 Assume pt* instructions won't trap. This will generally generate 15988 better scheduled code, but is unsafe on current hardware. The 15989 current architecture definition says that ptabs and ptrel trap 15990 when the target anded with 3 is 3. This has the unintentional 15991 effect of making it unsafe to schedule ptabs / ptrel before a 15992 branch, or hoist it out of a loop. For example, 15993 __do_global_ctors, a part of libgcc that runs constructors at 15994 program startup, calls functions in a list which is delimited by 15995 -1. With the -mpt-fixed option, the ptabs will be done before 15996 testing against -1. That means that all the constructors will be 15997 run a bit quicker, but when the loop comes to the end of the list, 15998 the program crashes because ptabs loads -1 into a target register. 15999 Since this option is unsafe for any hardware implementing the 16000 current architecture specification, the default is -mno-pt-fixed. 16001 Unless the user specifies a specific cost with `-mgettrcost', 16002 -mno-pt-fixed also implies `-mgettrcost=100'; this deters register 16003 allocation using target registers for storing ordinary integers. 16004 16005`-minvalid-symbols' 16006 Assume symbols might be invalid. Ordinary function symbols 16007 generated by the compiler will always be valid to load with 16008 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or 16009 linker tricks it is possible to generate symbols that will cause 16010 ptabs / ptrel to trap. This option is only meaningful when 16011 `-mno-pt-fixed' is in effect. It will then prevent 16012 cross-basic-block cse, hoisting and most scheduling of symbol 16013 loads. The default is `-mno-invalid-symbols'. 16014 16015 16016File: gcc.info, Node: Solaris 2 Options, Next: SPARC Options, Prev: SH Options, Up: Submodel Options 16017 160183.17.38 Solaris 2 Options 16019------------------------- 16020 16021These `-m' options are supported on Solaris 2: 16022 16023`-mimpure-text' 16024 `-mimpure-text', used in addition to `-shared', tells the compiler 16025 to not pass `-z text' to the linker when linking a shared object. 16026 Using this option, you can link position-dependent code into a 16027 shared object. 16028 16029 `-mimpure-text' suppresses the "relocations remain against 16030 allocatable but non-writable sections" linker error message. 16031 However, the necessary relocations will trigger copy-on-write, and 16032 the shared object is not actually shared across processes. 16033 Instead of using `-mimpure-text', you should compile all source 16034 code with `-fpic' or `-fPIC'. 16035 16036 16037 These switches are supported in addition to the above on Solaris 2: 16038 16039`-threads' 16040 Add support for multithreading using the Solaris threads library. 16041 This option sets flags for both the preprocessor and linker. This 16042 option does not affect the thread safety of object code produced 16043 by the compiler or that of libraries supplied with it. 16044 16045`-pthreads' 16046 Add support for multithreading using the POSIX threads library. 16047 This option sets flags for both the preprocessor and linker. This 16048 option does not affect the thread safety of object code produced 16049 by the compiler or that of libraries supplied with it. 16050 16051`-pthread' 16052 This is a synonym for `-pthreads'. 16053 16054 16055File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: Solaris 2 Options, Up: Submodel Options 16056 160573.17.39 SPARC Options 16058--------------------- 16059 16060These `-m' options are supported on the SPARC: 16061 16062`-mno-app-regs' 16063`-mapp-regs' 16064 Specify `-mapp-regs' to generate output using the global registers 16065 2 through 4, which the SPARC SVR4 ABI reserves for applications. 16066 This is the default. 16067 16068 To be fully SVR4 ABI compliant at the cost of some performance 16069 loss, specify `-mno-app-regs'. You should compile libraries and 16070 system software with this option. 16071 16072`-mfpu' 16073`-mhard-float' 16074 Generate output containing floating point instructions. This is 16075 the default. 16076 16077`-mno-fpu' 16078`-msoft-float' 16079 Generate output containing library calls for floating point. 16080 *Warning:* the requisite libraries are not available for all SPARC 16081 targets. Normally the facilities of the machine's usual C 16082 compiler are used, but this cannot be done directly in 16083 cross-compilation. You must make your own arrangements to provide 16084 suitable library functions for cross-compilation. The embedded 16085 targets `sparc-*-aout' and `sparclite-*-*' do provide software 16086 floating point support. 16087 16088 `-msoft-float' changes the calling convention in the output file; 16089 therefore, it is only useful if you compile _all_ of a program with 16090 this option. In particular, you need to compile `libgcc.a', the 16091 library that comes with GCC, with `-msoft-float' in order for this 16092 to work. 16093 16094`-mhard-quad-float' 16095 Generate output containing quad-word (long double) floating point 16096 instructions. 16097 16098`-msoft-quad-float' 16099 Generate output containing library calls for quad-word (long 16100 double) floating point instructions. The functions called are 16101 those specified in the SPARC ABI. This is the default. 16102 16103 As of this writing, there are no SPARC implementations that have 16104 hardware support for the quad-word floating point instructions. 16105 They all invoke a trap handler for one of these instructions, and 16106 then the trap handler emulates the effect of the instruction. 16107 Because of the trap handler overhead, this is much slower than 16108 calling the ABI library routines. Thus the `-msoft-quad-float' 16109 option is the default. 16110 16111`-mno-unaligned-doubles' 16112`-munaligned-doubles' 16113 Assume that doubles have 8 byte alignment. This is the default. 16114 16115 With `-munaligned-doubles', GCC assumes that doubles have 8 byte 16116 alignment only if they are contained in another type, or if they 16117 have an absolute address. Otherwise, it assumes they have 4 byte 16118 alignment. Specifying this option avoids some rare compatibility 16119 problems with code generated by other compilers. It is not the 16120 default because it results in a performance loss, especially for 16121 floating point code. 16122 16123`-mno-faster-structs' 16124`-mfaster-structs' 16125 With `-mfaster-structs', the compiler assumes that structures 16126 should have 8 byte alignment. This enables the use of pairs of 16127 `ldd' and `std' instructions for copies in structure assignment, 16128 in place of twice as many `ld' and `st' pairs. However, the use 16129 of this changed alignment directly violates the SPARC ABI. Thus, 16130 it's intended only for use on targets where the developer 16131 acknowledges that their resulting code will not be directly in 16132 line with the rules of the ABI. 16133 16134`-mcpu=CPU_TYPE' 16135 Set the instruction set, register set, and instruction scheduling 16136 parameters for machine type CPU_TYPE. Supported values for 16137 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc', 16138 `leon', `sparclite', `f930', `f934', `sparclite86x', `sparclet', 16139 `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and 16140 `niagara2'. 16141 16142 Default instruction scheduling parameters are used for values that 16143 select an architecture and not an implementation. These are `v7', 16144 `v8', `sparclite', `sparclet', `v9'. 16145 16146 Here is a list of each supported architecture and their supported 16147 implementations. 16148 16149 v7: cypress 16150 v8: supersparc, hypersparc, leon 16151 sparclite: f930, f934, sparclite86x 16152 sparclet: tsc701 16153 v9: ultrasparc, ultrasparc3, niagara, niagara2 16154 16155 By default (unless configured otherwise), GCC generates code for 16156 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 16157 the compiler additionally optimizes it for the Cypress CY7C602 16158 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 16159 also appropriate for the older SPARCStation 1, 2, IPX etc. 16160 16161 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 16162 architecture. The only difference from V7 code is that the 16163 compiler emits the integer multiply and integer divide 16164 instructions which exist in SPARC-V8 but not in SPARC-V7. With 16165 `-mcpu=supersparc', the compiler additionally optimizes it for the 16166 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 16167 series. 16168 16169 With `-mcpu=sparclite', GCC generates code for the SPARClite 16170 variant of the SPARC architecture. This adds the integer 16171 multiply, integer divide step and scan (`ffs') instructions which 16172 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 16173 compiler additionally optimizes it for the Fujitsu MB86930 chip, 16174 which is the original SPARClite, with no FPU. With `-mcpu=f934', 16175 the compiler additionally optimizes it for the Fujitsu MB86934 16176 chip, which is the more recent SPARClite with FPU. 16177 16178 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 16179 of the SPARC architecture. This adds the integer multiply, 16180 multiply/accumulate, integer divide step and scan (`ffs') 16181 instructions which exist in SPARClet but not in SPARC-V7. With 16182 `-mcpu=tsc701', the compiler additionally optimizes it for the 16183 TEMIC SPARClet chip. 16184 16185 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 16186 architecture. This adds 64-bit integer and floating-point move 16187 instructions, 3 additional floating-point condition code registers 16188 and conditional move instructions. With `-mcpu=ultrasparc', the 16189 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 16190 chips. With `-mcpu=ultrasparc3', the compiler additionally 16191 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 16192 chips. With `-mcpu=niagara', the compiler additionally optimizes 16193 it for Sun UltraSPARC T1 chips. With `-mcpu=niagara2', the 16194 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 16195 16196`-mtune=CPU_TYPE' 16197 Set the instruction scheduling parameters for machine type 16198 CPU_TYPE, but do not set the instruction set or register set that 16199 the option `-mcpu=CPU_TYPE' would. 16200 16201 The same values for `-mcpu=CPU_TYPE' can be used for 16202 `-mtune=CPU_TYPE', but the only useful values are those that 16203 select a particular CPU implementation. Those are `cypress', 16204 `supersparc', `hypersparc', `leon', `f930', `f934', 16205 `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', `niagara', 16206 and `niagara2'. 16207 16208`-mv8plus' 16209`-mno-v8plus' 16210 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 16211 difference from the V8 ABI is that the global and out registers are 16212 considered 64-bit wide. This is enabled by default on Solaris in 16213 32-bit mode for all SPARC-V9 processors. 16214 16215`-mvis' 16216`-mno-vis' 16217 With `-mvis', GCC generates code that takes advantage of the 16218 UltraSPARC Visual Instruction Set extensions. The default is 16219 `-mno-vis'. 16220 16221 These `-m' options are supported in addition to the above on SPARC-V9 16222processors in 64-bit environments: 16223 16224`-mlittle-endian' 16225 Generate code for a processor running in little-endian mode. It 16226 is only available for a few configurations and most notably not on 16227 Solaris and Linux. 16228 16229`-m32' 16230`-m64' 16231 Generate code for a 32-bit or 64-bit environment. The 32-bit 16232 environment sets int, long and pointer to 32 bits. The 64-bit 16233 environment sets int to 32 bits and long and pointer to 64 bits. 16234 16235`-mcmodel=medlow' 16236 Generate code for the Medium/Low code model: 64-bit addresses, 16237 programs must be linked in the low 32 bits of memory. Programs 16238 can be statically or dynamically linked. 16239 16240`-mcmodel=medmid' 16241 Generate code for the Medium/Middle code model: 64-bit addresses, 16242 programs must be linked in the low 44 bits of memory, the text and 16243 data segments must be less than 2GB in size and the data segment 16244 must be located within 2GB of the text segment. 16245 16246`-mcmodel=medany' 16247 Generate code for the Medium/Anywhere code model: 64-bit 16248 addresses, programs may be linked anywhere in memory, the text and 16249 data segments must be less than 2GB in size and the data segment 16250 must be located within 2GB of the text segment. 16251 16252`-mcmodel=embmedany' 16253 Generate code for the Medium/Anywhere code model for embedded 16254 systems: 64-bit addresses, the text and data segments must be less 16255 than 2GB in size, both starting anywhere in memory (determined at 16256 link time). The global register %g4 points to the base of the 16257 data segment. Programs are statically linked and PIC is not 16258 supported. 16259 16260`-mstack-bias' 16261`-mno-stack-bias' 16262 With `-mstack-bias', GCC assumes that the stack pointer, and frame 16263 pointer if present, are offset by -2047 which must be added back 16264 when making stack frame references. This is the default in 64-bit 16265 mode. Otherwise, assume no such offset is present. 16266 16267 16268File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 16269 162703.17.40 SPU Options 16271------------------- 16272 16273These `-m' options are supported on the SPU: 16274 16275`-mwarn-reloc' 16276`-merror-reloc' 16277 The loader for SPU does not handle dynamic relocations. By 16278 default, GCC will give an error when it generates code that 16279 requires a dynamic relocation. `-mno-error-reloc' disables the 16280 error, `-mwarn-reloc' will generate a warning instead. 16281 16282`-msafe-dma' 16283`-munsafe-dma' 16284 Instructions which initiate or test completion of DMA must not be 16285 reordered with respect to loads and stores of the memory which is 16286 being accessed. Users typically address this problem using the 16287 volatile keyword, but that can lead to inefficient code in places 16288 where the memory is known to not change. Rather than mark the 16289 memory as volatile we treat the DMA instructions as potentially 16290 effecting all memory. With `-munsafe-dma' users must use the 16291 volatile keyword to protect memory accesses. 16292 16293`-mbranch-hints' 16294 By default, GCC will generate a branch hint instruction to avoid 16295 pipeline stalls for always taken or probably taken branches. A 16296 hint will not be generated closer than 8 instructions away from 16297 its branch. There is little reason to disable them, except for 16298 debugging purposes, or to make an object a little bit smaller. 16299 16300`-msmall-mem' 16301`-mlarge-mem' 16302 By default, GCC generates code assuming that addresses are never 16303 larger than 18 bits. With `-mlarge-mem' code is generated that 16304 assumes a full 32 bit address. 16305 16306`-mstdmain' 16307 By default, GCC links against startup code that assumes the 16308 SPU-style main function interface (which has an unconventional 16309 parameter list). With `-mstdmain', GCC will link your program 16310 against startup code that assumes a C99-style interface to `main', 16311 including a local copy of `argv' strings. 16312 16313`-mfixed-range=REGISTER-RANGE' 16314 Generate code treating the given register range as fixed registers. 16315 A fixed register is one that the register allocator can not use. 16316 This is useful when compiling kernel code. A register range is 16317 specified as two registers separated by a dash. Multiple register 16318 ranges can be specified separated by a comma. 16319 16320`-mea32' 16321`-mea64' 16322 Compile code assuming that pointers to the PPU address space 16323 accessed via the `__ea' named address space qualifier are either 16324 32 or 64 bits wide. The default is 32 bits. As this is an ABI 16325 changing option, all object code in an executable must be compiled 16326 with the same setting. 16327 16328`-maddress-space-conversion' 16329`-mno-address-space-conversion' 16330 Allow/disallow treating the `__ea' address space as superset of 16331 the generic address space. This enables explicit type casts 16332 between `__ea' and generic pointer as well as implicit conversions 16333 of generic pointers to `__ea' pointers. The default is to allow 16334 address space pointer conversions. 16335 16336`-mcache-size=CACHE-SIZE' 16337 This option controls the version of libgcc that the compiler links 16338 to an executable and selects a software-managed cache for 16339 accessing variables in the `__ea' address space with a particular 16340 cache size. Possible options for CACHE-SIZE are `8', `16', `32', 16341 `64' and `128'. The default cache size is 64KB. 16342 16343`-matomic-updates' 16344`-mno-atomic-updates' 16345 This option controls the version of libgcc that the compiler links 16346 to an executable and selects whether atomic updates to the 16347 software-managed cache of PPU-side variables are used. If you use 16348 atomic updates, changes to a PPU variable from SPU code using the 16349 `__ea' named address space qualifier will not interfere with 16350 changes to other PPU variables residing in the same cache line 16351 from PPU code. If you do not use atomic updates, such 16352 interference may occur; however, writing back cache lines will be 16353 more efficient. The default behavior is to use atomic updates. 16354 16355`-mdual-nops' 16356`-mdual-nops=N' 16357 By default, GCC will insert nops to increase dual issue when it 16358 expects it to increase performance. N can be a value from 0 to 16359 10. A smaller N will insert fewer nops. 10 is the default, 0 is 16360 the same as `-mno-dual-nops'. Disabled with `-Os'. 16361 16362`-mhint-max-nops=N' 16363 Maximum number of nops to insert for a branch hint. A branch hint 16364 must be at least 8 instructions away from the branch it is 16365 effecting. GCC will insert up to N nops to enforce this, 16366 otherwise it will not generate the branch hint. 16367 16368`-mhint-max-distance=N' 16369 The encoding of the branch hint instruction limits the hint to be 16370 within 256 instructions of the branch it is effecting. By 16371 default, GCC makes sure it is within 125. 16372 16373`-msafe-hints' 16374 Work around a hardware bug which causes the SPU to stall 16375 indefinitely. By default, GCC will insert the `hbrp' instruction 16376 to make sure this stall won't happen. 16377 16378 16379 16380File: gcc.info, Node: System V Options, Next: V850 Options, Prev: SPU Options, Up: Submodel Options 16381 163823.17.41 Options for System V 16383---------------------------- 16384 16385These additional options are available on System V Release 4 for 16386compatibility with other compilers on those systems: 16387 16388`-G' 16389 Create a shared object. It is recommended that `-symbolic' or 16390 `-shared' be used instead. 16391 16392`-Qy' 16393 Identify the versions of each tool used by the compiler, in a 16394 `.ident' assembler directive in the output. 16395 16396`-Qn' 16397 Refrain from adding `.ident' directives to the output file (this is 16398 the default). 16399 16400`-YP,DIRS' 16401 Search the directories DIRS, and no others, for libraries 16402 specified with `-l'. 16403 16404`-Ym,DIR' 16405 Look in the directory DIR to find the M4 preprocessor. The 16406 assembler uses this option. 16407 16408 16409File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: System V Options, Up: Submodel Options 16410 164113.17.42 V850 Options 16412-------------------- 16413 16414These `-m' options are defined for V850 implementations: 16415 16416`-mlong-calls' 16417`-mno-long-calls' 16418 Treat all calls as being far away (near). If calls are assumed to 16419 be far away, the compiler will always load the functions address 16420 up into a register, and call indirect through the pointer. 16421 16422`-mno-ep' 16423`-mep' 16424 Do not optimize (do optimize) basic blocks that use the same index 16425 pointer 4 or more times to copy pointer into the `ep' register, and 16426 use the shorter `sld' and `sst' instructions. The `-mep' option 16427 is on by default if you optimize. 16428 16429`-mno-prolog-function' 16430`-mprolog-function' 16431 Do not use (do use) external functions to save and restore 16432 registers at the prologue and epilogue of a function. The 16433 external functions are slower, but use less code space if more 16434 than one function saves the same number of registers. The 16435 `-mprolog-function' option is on by default if you optimize. 16436 16437`-mspace' 16438 Try to make the code as small as possible. At present, this just 16439 turns on the `-mep' and `-mprolog-function' options. 16440 16441`-mtda=N' 16442 Put static or global variables whose size is N bytes or less into 16443 the tiny data area that register `ep' points to. The tiny data 16444 area can hold up to 256 bytes in total (128 bytes for byte 16445 references). 16446 16447`-msda=N' 16448 Put static or global variables whose size is N bytes or less into 16449 the small data area that register `gp' points to. The small data 16450 area can hold up to 64 kilobytes. 16451 16452`-mzda=N' 16453 Put static or global variables whose size is N bytes or less into 16454 the first 32 kilobytes of memory. 16455 16456`-mv850' 16457 Specify that the target processor is the V850. 16458 16459`-mbig-switch' 16460 Generate code suitable for big switch tables. Use this option 16461 only if the assembler/linker complain about out of range branches 16462 within a switch table. 16463 16464`-mapp-regs' 16465 This option will cause r2 and r5 to be used in the code generated 16466 by the compiler. This setting is the default. 16467 16468`-mno-app-regs' 16469 This option will cause r2 and r5 to be treated as fixed registers. 16470 16471`-mv850e2v3' 16472 Specify that the target processor is the V850E2V3. The 16473 preprocessor constants `__v850e2v3__' will be defined if this 16474 option is used. 16475 16476`-mv850e2' 16477 Specify that the target processor is the V850E2. The preprocessor 16478 constants `__v850e2__' will be defined if 16479 16480`-mv850e1' 16481 Specify that the target processor is the V850E1. The preprocessor 16482 constants `__v850e1__' and `__v850e__' will be defined if 16483 16484`-mv850es' 16485 Specify that the target processor is the V850ES. This is an alias 16486 for the `-mv850e1' option. 16487 16488`-mv850e' 16489 Specify that the target processor is the V850E. The preprocessor 16490 constant `__v850e__' will be defined if this option is used. 16491 16492 If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2' 16493 nor `-mv850e2v3' are defined then a default target processor will 16494 be chosen and the relevant `__v850*__' preprocessor constant will 16495 be defined. 16496 16497 The preprocessor constants `__v850' and `__v851__' are always 16498 defined, regardless of which processor variant is the target. 16499 16500`-mdisable-callt' 16501 This option will suppress generation of the CALLT instruction for 16502 the v850e, v850e1, v850e2 and v850e2v3 flavors of the v850 16503 architecture. The default is `-mno-disable-callt' which allows 16504 the CALLT instruction to be used. 16505 16506 16507 16508File: gcc.info, Node: VAX Options, Next: VxWorks Options, Prev: V850 Options, Up: Submodel Options 16509 165103.17.43 VAX Options 16511------------------- 16512 16513These `-m' options are defined for the VAX: 16514 16515`-munix' 16516 Do not output certain jump instructions (`aobleq' and so on) that 16517 the Unix assembler for the VAX cannot handle across long ranges. 16518 16519`-mgnu' 16520 Do output those jump instructions, on the assumption that you will 16521 assemble with the GNU assembler. 16522 16523`-mg' 16524 Output code for g-format floating point numbers instead of 16525 d-format. 16526 16527 16528File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VAX Options, Up: Submodel Options 16529 165303.17.44 VxWorks Options 16531----------------------- 16532 16533The options in this section are defined for all VxWorks targets. 16534Options specific to the target hardware are listed with the other 16535options for that target. 16536 16537`-mrtp' 16538 GCC can generate code for both VxWorks kernels and real time 16539 processes (RTPs). This option switches from the former to the 16540 latter. It also defines the preprocessor macro `__RTP__'. 16541 16542`-non-static' 16543 Link an RTP executable against shared libraries rather than static 16544 libraries. The options `-static' and `-shared' can also be used 16545 for RTPs (*note Link Options::); `-static' is the default. 16546 16547`-Bstatic' 16548`-Bdynamic' 16549 These options are passed down to the linker. They are defined for 16550 compatibility with Diab. 16551 16552`-Xbind-lazy' 16553 Enable lazy binding of function calls. This option is equivalent 16554 to `-Wl,-z,now' and is defined for compatibility with Diab. 16555 16556`-Xbind-now' 16557 Disable lazy binding of function calls. This option is the 16558 default and is defined for compatibility with Diab. 16559 16560 16561File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options 16562 165633.17.45 x86-64 Options 16564---------------------- 16565 16566These are listed under *Note i386 and x86-64 Options::. 16567 16568 16569File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 16570 165713.17.46 Xstormy16 Options 16572------------------------- 16573 16574These options are defined for Xstormy16: 16575 16576`-msim' 16577 Choose startup files and linker script suitable for the simulator. 16578 16579 16580File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 16581 165823.17.47 Xtensa Options 16583---------------------- 16584 16585These options are supported for Xtensa targets: 16586 16587`-mconst16' 16588`-mno-const16' 16589 Enable or disable use of `CONST16' instructions for loading 16590 constant values. The `CONST16' instruction is currently not a 16591 standard option from Tensilica. When enabled, `CONST16' 16592 instructions are always used in place of the standard `L32R' 16593 instructions. The use of `CONST16' is enabled by default only if 16594 the `L32R' instruction is not available. 16595 16596`-mfused-madd' 16597`-mno-fused-madd' 16598 Enable or disable use of fused multiply/add and multiply/subtract 16599 instructions in the floating-point option. This has no effect if 16600 the floating-point option is not also enabled. Disabling fused 16601 multiply/add and multiply/subtract instructions forces the 16602 compiler to use separate instructions for the multiply and 16603 add/subtract operations. This may be desirable in some cases 16604 where strict IEEE 754-compliant results are required: the fused 16605 multiply add/subtract instructions do not round the intermediate 16606 result, thereby producing results with _more_ bits of precision 16607 than specified by the IEEE standard. Disabling fused multiply 16608 add/subtract instructions also ensures that the program output is 16609 not sensitive to the compiler's ability to combine multiply and 16610 add/subtract operations. 16611 16612`-mserialize-volatile' 16613`-mno-serialize-volatile' 16614 When this option is enabled, GCC inserts `MEMW' instructions before 16615 `volatile' memory references to guarantee sequential consistency. 16616 The default is `-mserialize-volatile'. Use 16617 `-mno-serialize-volatile' to omit the `MEMW' instructions. 16618 16619`-mforce-no-pic' 16620 For targets, like GNU/Linux, where all user-mode Xtensa code must 16621 be position-independent code (PIC), this option disables PIC for 16622 compiling kernel code. 16623 16624`-mtext-section-literals' 16625`-mno-text-section-literals' 16626 Control the treatment of literal pools. The default is 16627 `-mno-text-section-literals', which places literals in a separate 16628 section in the output file. This allows the literal pool to be 16629 placed in a data RAM/ROM, and it also allows the linker to combine 16630 literal pools from separate object files to remove redundant 16631 literals and improve code size. With `-mtext-section-literals', 16632 the literals are interspersed in the text section in order to keep 16633 them as close as possible to their references. This may be 16634 necessary for large assembly files. 16635 16636`-mtarget-align' 16637`-mno-target-align' 16638 When this option is enabled, GCC instructs the assembler to 16639 automatically align instructions to reduce branch penalties at the 16640 expense of some code density. The assembler attempts to widen 16641 density instructions to align branch targets and the instructions 16642 following call instructions. If there are not enough preceding 16643 safe density instructions to align a target, no widening will be 16644 performed. The default is `-mtarget-align'. These options do not 16645 affect the treatment of auto-aligned instructions like `LOOP', 16646 which the assembler will always align, either by widening density 16647 instructions or by inserting no-op instructions. 16648 16649`-mlongcalls' 16650`-mno-longcalls' 16651 When this option is enabled, GCC instructs the assembler to 16652 translate direct calls to indirect calls unless it can determine 16653 that the target of a direct call is in the range allowed by the 16654 call instruction. This translation typically occurs for calls to 16655 functions in other source files. Specifically, the assembler 16656 translates a direct `CALL' instruction into an `L32R' followed by 16657 a `CALLX' instruction. The default is `-mno-longcalls'. This 16658 option should be used in programs where the call target can 16659 potentially be out of range. This option is implemented in the 16660 assembler, not the compiler, so the assembly code generated by GCC 16661 will still show direct call instructions--look at the disassembled 16662 object code to see the actual instructions. Note that the 16663 assembler will use an indirect call for every cross-file call, not 16664 just those that really will be out of range. 16665 16666 16667File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 16668 166693.17.48 zSeries Options 16670----------------------- 16671 16672These are listed under *Note S/390 and zSeries Options::. 16673 16674 16675File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 16676 166773.18 Options for Code Generation Conventions 16678============================================ 16679 16680These machine-independent options control the interface conventions 16681used in code generation. 16682 16683 Most of them have both positive and negative forms; the negative form 16684of `-ffoo' would be `-fno-foo'. In the table below, only one of the 16685forms is listed--the one which is not the default. You can figure out 16686the other form by either removing `no-' or adding it. 16687 16688`-fbounds-check' 16689 For front-ends that support it, generate additional code to check 16690 that indices used to access arrays are within the declared range. 16691 This is currently only supported by the Java and Fortran 16692 front-ends, where this option defaults to true and false 16693 respectively. 16694 16695`-ftrapv' 16696 This option generates traps for signed overflow on addition, 16697 subtraction, multiplication operations. 16698 16699`-fwrapv' 16700 This option instructs the compiler to assume that signed arithmetic 16701 overflow of addition, subtraction and multiplication wraps around 16702 using twos-complement representation. This flag enables some 16703 optimizations and disables others. This option is enabled by 16704 default for the Java front-end, as required by the Java language 16705 specification. 16706 16707`-fexceptions' 16708 Enable exception handling. Generates extra code needed to 16709 propagate exceptions. For some targets, this implies GCC will 16710 generate frame unwind information for all functions, which can 16711 produce significant data size overhead, although it does not 16712 affect execution. If you do not specify this option, GCC will 16713 enable it by default for languages like C++ which normally require 16714 exception handling, and disable it for languages like C that do 16715 not normally require it. However, you may need to enable this 16716 option when compiling C code that needs to interoperate properly 16717 with exception handlers written in C++. You may also wish to 16718 disable this option if you are compiling older C++ programs that 16719 don't use exception handling. 16720 16721`-fnon-call-exceptions' 16722 Generate code that allows trapping instructions to throw 16723 exceptions. Note that this requires platform-specific runtime 16724 support that does not exist everywhere. Moreover, it only allows 16725 _trapping_ instructions to throw exceptions, i.e. memory 16726 references or floating point instructions. It does not allow 16727 exceptions to be thrown from arbitrary signal handlers such as 16728 `SIGALRM'. 16729 16730`-funwind-tables' 16731 Similar to `-fexceptions', except that it will just generate any 16732 needed static data, but will not affect the generated code in any 16733 other way. You will normally not enable this option; instead, a 16734 language processor that needs this handling would enable it on 16735 your behalf. 16736 16737`-fasynchronous-unwind-tables' 16738 Generate unwind table in dwarf2 format, if supported by target 16739 machine. The table is exact at each instruction boundary, so it 16740 can be used for stack unwinding from asynchronous events (such as 16741 debugger or garbage collector). 16742 16743`-fpcc-struct-return' 16744 Return "short" `struct' and `union' values in memory like longer 16745 ones, rather than in registers. This convention is less 16746 efficient, but it has the advantage of allowing intercallability 16747 between GCC-compiled files and files compiled with other 16748 compilers, particularly the Portable C Compiler (pcc). 16749 16750 The precise convention for returning structures in memory depends 16751 on the target configuration macros. 16752 16753 Short structures and unions are those whose size and alignment 16754 match that of some integer type. 16755 16756 *Warning:* code compiled with the `-fpcc-struct-return' switch is 16757 not binary compatible with code compiled with the 16758 `-freg-struct-return' switch. Use it to conform to a non-default 16759 application binary interface. 16760 16761`-freg-struct-return' 16762 Return `struct' and `union' values in registers when possible. 16763 This is more efficient for small structures than 16764 `-fpcc-struct-return'. 16765 16766 If you specify neither `-fpcc-struct-return' nor 16767 `-freg-struct-return', GCC defaults to whichever convention is 16768 standard for the target. If there is no standard convention, GCC 16769 defaults to `-fpcc-struct-return', except on targets where GCC is 16770 the principal compiler. In those cases, we can choose the 16771 standard, and we chose the more efficient register return 16772 alternative. 16773 16774 *Warning:* code compiled with the `-freg-struct-return' switch is 16775 not binary compatible with code compiled with the 16776 `-fpcc-struct-return' switch. Use it to conform to a non-default 16777 application binary interface. 16778 16779`-fshort-enums' 16780 Allocate to an `enum' type only as many bytes as it needs for the 16781 declared range of possible values. Specifically, the `enum' type 16782 will be equivalent to the smallest integer type which has enough 16783 room. 16784 16785 *Warning:* the `-fshort-enums' switch causes GCC to generate code 16786 that is not binary compatible with code generated without that 16787 switch. Use it to conform to a non-default application binary 16788 interface. 16789 16790`-fshort-double' 16791 Use the same size for `double' as for `float'. 16792 16793 *Warning:* the `-fshort-double' switch causes GCC to generate code 16794 that is not binary compatible with code generated without that 16795 switch. Use it to conform to a non-default application binary 16796 interface. 16797 16798`-fshort-wchar' 16799 Override the underlying type for `wchar_t' to be `short unsigned 16800 int' instead of the default for the target. This option is useful 16801 for building programs to run under WINE. 16802 16803 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 16804 that is not binary compatible with code generated without that 16805 switch. Use it to conform to a non-default application binary 16806 interface. 16807 16808`-fno-common' 16809 In C code, controls the placement of uninitialized global 16810 variables. Unix C compilers have traditionally permitted multiple 16811 definitions of such variables in different compilation units by 16812 placing the variables in a common block. This is the behavior 16813 specified by `-fcommon', and is the default for GCC on most 16814 targets. On the other hand, this behavior is not required by ISO 16815 C, and on some targets may carry a speed or code size penalty on 16816 variable references. The `-fno-common' option specifies that the 16817 compiler should place uninitialized global variables in the data 16818 section of the object file, rather than generating them as common 16819 blocks. This has the effect that if the same variable is declared 16820 (without `extern') in two different compilations, you will get a 16821 multiple-definition error when you link them. In this case, you 16822 must compile with `-fcommon' instead. Compiling with 16823 `-fno-common' is useful on targets for which it provides better 16824 performance, or if you wish to verify that the program will work 16825 on other systems which always treat uninitialized variable 16826 declarations this way. 16827 16828`-fno-ident' 16829 Ignore the `#ident' directive. 16830 16831`-finhibit-size-directive' 16832 Don't output a `.size' assembler directive, or anything else that 16833 would cause trouble if the function is split in the middle, and the 16834 two halves are placed at locations far apart in memory. This 16835 option is used when compiling `crtstuff.c'; you should not need to 16836 use it for anything else. 16837 16838`-fverbose-asm' 16839 Put extra commentary information in the generated assembly code to 16840 make it more readable. This option is generally only of use to 16841 those who actually need to read the generated assembly code 16842 (perhaps while debugging the compiler itself). 16843 16844 `-fno-verbose-asm', the default, causes the extra information to 16845 be omitted and is useful when comparing two assembler files. 16846 16847`-frecord-gcc-switches' 16848 This switch causes the command line that was used to invoke the 16849 compiler to be recorded into the object file that is being created. 16850 This switch is only implemented on some targets and the exact 16851 format of the recording is target and binary file format 16852 dependent, but it usually takes the form of a section containing 16853 ASCII text. This switch is related to the `-fverbose-asm' switch, 16854 but that switch only records information in the assembler output 16855 file as comments, so it never reaches the object file. 16856 16857`-fpic' 16858 Generate position-independent code (PIC) suitable for use in a 16859 shared library, if supported for the target machine. Such code 16860 accesses all constant addresses through a global offset table 16861 (GOT). The dynamic loader resolves the GOT entries when the 16862 program starts (the dynamic loader is not part of GCC; it is part 16863 of the operating system). If the GOT size for the linked 16864 executable exceeds a machine-specific maximum size, you get an 16865 error message from the linker indicating that `-fpic' does not 16866 work; in that case, recompile with `-fPIC' instead. (These 16867 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 16868 386 has no such limit.) 16869 16870 Position-independent code requires special support, and therefore 16871 works only on certain machines. For the 386, GCC supports PIC for 16872 System V but not for the Sun 386i. Code generated for the IBM 16873 RS/6000 is always position-independent. 16874 16875 When this flag is set, the macros `__pic__' and `__PIC__' are 16876 defined to 1. 16877 16878`-fPIC' 16879 If supported for the target machine, emit position-independent 16880 code, suitable for dynamic linking and avoiding any limit on the 16881 size of the global offset table. This option makes a difference 16882 on the m68k, PowerPC and SPARC. 16883 16884 Position-independent code requires special support, and therefore 16885 works only on certain machines. 16886 16887 When this flag is set, the macros `__pic__' and `__PIC__' are 16888 defined to 2. 16889 16890`-fpie' 16891`-fPIE' 16892 These options are similar to `-fpic' and `-fPIC', but generated 16893 position independent code can be only linked into executables. 16894 Usually these options are used when `-pie' GCC option will be used 16895 during linking. 16896 16897 `-fpie' and `-fPIE' both define the macros `__pie__' and 16898 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for 16899 `-fPIE'. 16900 16901`-fno-jump-tables' 16902 Do not use jump tables for switch statements even where it would be 16903 more efficient than other code generation strategies. This option 16904 is of use in conjunction with `-fpic' or `-fPIC' for building code 16905 which forms part of a dynamic linker and cannot reference the 16906 address of a jump table. On some targets, jump tables do not 16907 require a GOT and this option is not needed. 16908 16909`-ffixed-REG' 16910 Treat the register named REG as a fixed register; generated code 16911 should never refer to it (except perhaps as a stack pointer, frame 16912 pointer or in some other fixed role). 16913 16914 REG must be the name of a register. The register names accepted 16915 are machine-specific and are defined in the `REGISTER_NAMES' macro 16916 in the machine description macro file. 16917 16918 This flag does not have a negative form, because it specifies a 16919 three-way choice. 16920 16921`-fcall-used-REG' 16922 Treat the register named REG as an allocable register that is 16923 clobbered by function calls. It may be allocated for temporaries 16924 or variables that do not live across a call. Functions compiled 16925 this way will not save and restore the register REG. 16926 16927 It is an error to used this flag with the frame pointer or stack 16928 pointer. Use of this flag for other registers that have fixed 16929 pervasive roles in the machine's execution model will produce 16930 disastrous results. 16931 16932 This flag does not have a negative form, because it specifies a 16933 three-way choice. 16934 16935`-fcall-saved-REG' 16936 Treat the register named REG as an allocable register saved by 16937 functions. It may be allocated even for temporaries or variables 16938 that live across a call. Functions compiled this way will save 16939 and restore the register REG if they use it. 16940 16941 It is an error to used this flag with the frame pointer or stack 16942 pointer. Use of this flag for other registers that have fixed 16943 pervasive roles in the machine's execution model will produce 16944 disastrous results. 16945 16946 A different sort of disaster will result from the use of this flag 16947 for a register in which function values may be returned. 16948 16949 This flag does not have a negative form, because it specifies a 16950 three-way choice. 16951 16952`-fpack-struct[=N]' 16953 Without a value specified, pack all structure members together 16954 without holes. When a value is specified (which must be a small 16955 power of two), pack structure members according to this value, 16956 representing the maximum alignment (that is, objects with default 16957 alignment requirements larger than this will be output potentially 16958 unaligned at the next fitting location. 16959 16960 *Warning:* the `-fpack-struct' switch causes GCC to generate code 16961 that is not binary compatible with code generated without that 16962 switch. Additionally, it makes the code suboptimal. Use it to 16963 conform to a non-default application binary interface. 16964 16965`-finstrument-functions' 16966 Generate instrumentation calls for entry and exit to functions. 16967 Just after function entry and just before function exit, the 16968 following profiling functions will be called with the address of 16969 the current function and its call site. (On some platforms, 16970 `__builtin_return_address' does not work beyond the current 16971 function, so the call site information may not be available to the 16972 profiling functions otherwise.) 16973 16974 void __cyg_profile_func_enter (void *this_fn, 16975 void *call_site); 16976 void __cyg_profile_func_exit (void *this_fn, 16977 void *call_site); 16978 16979 The first argument is the address of the start of the current 16980 function, which may be looked up exactly in the symbol table. 16981 16982 This instrumentation is also done for functions expanded inline in 16983 other functions. The profiling calls will indicate where, 16984 conceptually, the inline function is entered and exited. This 16985 means that addressable versions of such functions must be 16986 available. If all your uses of a function are expanded inline, 16987 this may mean an additional expansion of code size. If you use 16988 `extern inline' in your C code, an addressable version of such 16989 functions must be provided. (This is normally the case anyways, 16990 but if you get lucky and the optimizer always expands the 16991 functions inline, you might have gotten away without providing 16992 static copies.) 16993 16994 A function may be given the attribute `no_instrument_function', in 16995 which case this instrumentation will not be done. This can be 16996 used, for example, for the profiling functions listed above, 16997 high-priority interrupt routines, and any functions from which the 16998 profiling functions cannot safely be called (perhaps signal 16999 handlers, if the profiling routines generate output or allocate 17000 memory). 17001 17002`-finstrument-functions-exclude-file-list=FILE,FILE,...' 17003 Set the list of functions that are excluded from instrumentation 17004 (see the description of `-finstrument-functions'). If the file 17005 that contains a function definition matches with one of FILE, then 17006 that function is not instrumented. The match is done on 17007 substrings: if the FILE parameter is a substring of the file name, 17008 it is considered to be a match. 17009 17010 For example: 17011 17012 -finstrument-functions-exclude-file-list=/bits/stl,include/sys 17013 17014 will exclude any inline function defined in files whose pathnames 17015 contain `/bits/stl' or `include/sys'. 17016 17017 If, for some reason, you want to include letter `','' in one of 17018 SYM, write `'\,''. For example, 17019 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 17020 single quote surrounding the option). 17021 17022`-finstrument-functions-exclude-function-list=SYM,SYM,...' 17023 This is similar to `-finstrument-functions-exclude-file-list', but 17024 this option sets the list of function names to be excluded from 17025 instrumentation. The function name to be matched is its 17026 user-visible name, such as `vector<int> blah(const vector<int> 17027 &)', not the internal mangled name (e.g., 17028 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 17029 the SYM parameter is a substring of the function name, it is 17030 considered to be a match. For C99 and C++ extended identifiers, 17031 the function name must be given in UTF-8, not using universal 17032 character names. 17033 17034`-finstrument-function-calls' 17035 Generate instrumentation calls immediately before and after each 17036 function call. The following profiling functions will be called 17037 with the address of the function that is called between them. Use 17038 `__builtin_return_address(0)' inside the profiling functions to 17039 get the addresses from where they are called. 17040 17041 void __cyg_profile_call_enter (void *fn); 17042 void __cyg_profile_call_exit (void *fn); 17043 17044 Additionally instrumentation calls are inserted at the beginning of 17045 each function. The argument is the address of the function where 17046 the insertion occurred. 17047 17048 void __cyg_profile_call_inside (void *fn); 17049 17050 If an instrumented function gets inlined, calling 17051 `__builtin_return_address(0)' from inside 17052 `__cyg_profile_call_inside' will return an address that is in the 17053 address range of the function where it was inlined into. This can 17054 be used to detect if inlining occurred for the function that 17055 contains `__cyg_profile_call_inside'. 17056 17057`-fstack-check' 17058 Generate code to verify that you do not go beyond the boundary of 17059 the stack. You should specify this flag if you are running in an 17060 environment with multiple threads, but only rarely need to specify 17061 it in a single-threaded environment since stack overflow is 17062 automatically detected on nearly all systems if there is only one 17063 stack. 17064 17065 Note that this switch does not actually cause checking to be done; 17066 the operating system or the language runtime must do that. The 17067 switch causes generation of code to ensure that they see the stack 17068 being extended. 17069 17070 You can additionally specify a string parameter: `no' means no 17071 checking, `generic' means force the use of old-style checking, 17072 `specific' means use the best checking method and is equivalent to 17073 bare `-fstack-check'. 17074 17075 Old-style checking is a generic mechanism that requires no specific 17076 target support in the compiler but comes with the following 17077 drawbacks: 17078 17079 1. Modified allocation strategy for large objects: they will 17080 always be allocated dynamically if their size exceeds a fixed 17081 threshold. 17082 17083 2. Fixed limit on the size of the static frame of functions: 17084 when it is topped by a particular function, stack checking is 17085 not reliable and a warning is issued by the compiler. 17086 17087 3. Inefficiency: because of both the modified allocation 17088 strategy and the generic implementation, the performances of 17089 the code are hampered. 17090 17091 Note that old-style stack checking is also the fallback method for 17092 `specific' if no target support has been added in the compiler. 17093 17094`-fstack-limit-register=REG' 17095`-fstack-limit-symbol=SYM' 17096`-fno-stack-limit' 17097 Generate code to ensure that the stack does not grow beyond a 17098 certain value, either the value of a register or the address of a 17099 symbol. If the stack would grow beyond the value, a signal is 17100 raised. For most targets, the signal is raised before the stack 17101 overruns the boundary, so it is possible to catch the signal 17102 without taking special precautions. 17103 17104 For instance, if the stack starts at absolute address `0x80000000' 17105 and grows downwards, you can use the flags 17106 `-fstack-limit-symbol=__stack_limit' and 17107 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 17108 of 128KB. Note that this may only work with the GNU linker. 17109 17110`-fsplit-stack' 17111 Generate code to automatically split the stack before it overflows. 17112 The resulting program has a discontiguous stack which can only 17113 overflow if the program is unable to allocate any more memory. 17114 This is most useful when running threaded programs, as it is no 17115 longer necessary to calculate a good stack size to use for each 17116 thread. This is currently only implemented for the i386 and 17117 x86_64 backends running GNU/Linux. 17118 17119 When code compiled with `-fsplit-stack' calls code compiled 17120 without `-fsplit-stack', there may not be much stack space 17121 available for the latter code to run. If compiling all code, 17122 including library code, with `-fsplit-stack' is not an option, 17123 then the linker can fix up these calls so that the code compiled 17124 without `-fsplit-stack' always has a large stack. Support for 17125 this is implemented in the gold linker in GNU binutils release 2.21 17126 and later. 17127 17128`-fleading-underscore' 17129 This option and its counterpart, `-fno-leading-underscore', 17130 forcibly change the way C symbols are represented in the object 17131 file. One use is to help link with legacy assembly code. 17132 17133 *Warning:* the `-fleading-underscore' switch causes GCC to 17134 generate code that is not binary compatible with code generated 17135 without that switch. Use it to conform to a non-default 17136 application binary interface. Not all targets provide complete 17137 support for this switch. 17138 17139`-ftls-model=MODEL' 17140 Alter the thread-local storage model to be used (*note 17141 Thread-Local::). The MODEL argument should be one of 17142 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 17143 17144 The default without `-fpic' is `initial-exec'; with `-fpic' the 17145 default is `global-dynamic'. 17146 17147`-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 17148 Set the default ELF image symbol visibility to the specified 17149 option--all symbols will be marked with this unless overridden 17150 within the code. Using this feature can very substantially 17151 improve linking and load times of shared object libraries, produce 17152 more optimized code, provide near-perfect API export and prevent 17153 symbol clashes. It is *strongly* recommended that you use this in 17154 any shared objects you distribute. 17155 17156 Despite the nomenclature, `default' always means public; i.e., 17157 available to be linked against from outside the shared object. 17158 `protected' and `internal' are pretty useless in real-world usage 17159 so the only other commonly used option will be `hidden'. The 17160 default if `-fvisibility' isn't specified is `default', i.e., make 17161 every symbol public--this causes the same behavior as previous 17162 versions of GCC. 17163 17164 A good explanation of the benefits offered by ensuring ELF symbols 17165 have the correct visibility is given by "How To Write Shared 17166 Libraries" by Ulrich Drepper (which can be found at 17167 `http://people.redhat.com/~drepper/')--however a superior solution 17168 made possible by this option to marking things hidden when the 17169 default is public is to make the default hidden and mark things 17170 public. This is the norm with DLL's on Windows and with 17171 `-fvisibility=hidden' and `__attribute__ 17172 ((visibility("default")))' instead of `__declspec(dllexport)' you 17173 get almost identical semantics with identical syntax. This is a 17174 great boon to those working with cross-platform projects. 17175 17176 For those adding visibility support to existing code, you may find 17177 `#pragma GCC visibility' of use. This works by you enclosing the 17178 declarations you wish to set visibility for with (for example) 17179 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 17180 pop'. Bear in mind that symbol visibility should be viewed *as 17181 part of the API interface contract* and thus all new code should 17182 always specify visibility when it is not the default; i.e., 17183 declarations only for use within the local DSO should *always* be 17184 marked explicitly as hidden as so to avoid PLT indirection 17185 overheads--making this abundantly clear also aids readability and 17186 self-documentation of the code. Note that due to ISO C++ 17187 specification requirements, operator new and operator delete must 17188 always be of default visibility. 17189 17190 Be aware that headers from outside your project, in particular 17191 system headers and headers from any other library you use, may not 17192 be expecting to be compiled with visibility other than the 17193 default. You may need to explicitly say `#pragma GCC visibility 17194 push(default)' before including any such headers. 17195 17196 `extern' declarations are not affected by `-fvisibility', so a lot 17197 of code can be recompiled with `-fvisibility=hidden' with no 17198 modifications. However, this means that calls to `extern' 17199 functions with no explicit visibility will use the PLT, so it is 17200 more effective to use `__attribute ((visibility))' and/or `#pragma 17201 GCC visibility' to tell the compiler which `extern' declarations 17202 should be treated as hidden. 17203 17204 Note that `-fvisibility' does affect C++ vague linkage entities. 17205 This means that, for instance, an exception class that will be 17206 thrown between DSOs must be explicitly marked with default 17207 visibility so that the `type_info' nodes will be unified between 17208 the DSOs. 17209 17210 An overview of these techniques, their benefits and how to use them 17211 is at `http://gcc.gnu.org/wiki/Visibility'. 17212 17213`-fstrict-volatile-bitfields' 17214 This option should be used if accesses to volatile bitfields (or 17215 other structure fields, although the compiler usually honors those 17216 types anyway) should use a single access of the width of the 17217 field's type, aligned to a natural alignment if possible. For 17218 example, targets with memory-mapped peripheral registers might 17219 require all such accesses to be 16 bits wide; with this flag the 17220 user could declare all peripheral bitfields as "unsigned short" 17221 (assuming short is 16 bits on these targets) to force GCC to use 17222 16 bit accesses instead of, perhaps, a more efficient 32 bit 17223 access. 17224 17225 If this option is disabled, the compiler will use the most 17226 efficient instruction. In the previous example, that might be a 17227 32-bit load instruction, even though that will access bytes that 17228 do not contain any portion of the bitfield, or memory-mapped 17229 registers unrelated to the one being updated. 17230 17231 If the target requires strict alignment, and honoring the field 17232 type would require violating this alignment, a warning is issued. 17233 If the field has `packed' attribute, the access is done without 17234 honoring the field type. If the field doesn't have `packed' 17235 attribute, the access is done honoring the field type. In both 17236 cases, GCC assumes that the user knows something about the target 17237 hardware that it is unaware of. 17238 17239 The default value of this option is determined by the application 17240 binary interface for the target processor. 17241 17242 17243 17244File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 17245 172463.19 Environment Variables Affecting GCC 17247======================================== 17248 17249This section describes several environment variables that affect how GCC 17250operates. Some of them work by specifying directories or prefixes to 17251use when searching for various kinds of files. Some are used to 17252specify other aspects of the compilation environment. 17253 17254 Note that you can also specify places to search using options such as 17255`-B', `-I' and `-L' (*note Directory Options::). These take precedence 17256over places specified using environment variables, which in turn take 17257precedence over those specified by the configuration of GCC. *Note 17258Controlling the Compilation Driver `gcc': (gccint)Driver. 17259 17260`LANG' 17261`LC_CTYPE' 17262`LC_MESSAGES' 17263`LC_ALL' 17264 These environment variables control the way that GCC uses 17265 localization information that allow GCC to work with different 17266 national conventions. GCC inspects the locale categories 17267 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 17268 These locale categories can be set to any value supported by your 17269 installation. A typical value is `en_GB.UTF-8' for English in the 17270 United Kingdom encoded in UTF-8. 17271 17272 The `LC_CTYPE' environment variable specifies character 17273 classification. GCC uses it to determine the character boundaries 17274 in a string; this is needed for some multibyte encodings that 17275 contain quote and escape characters that would otherwise be 17276 interpreted as a string end or escape. 17277 17278 The `LC_MESSAGES' environment variable specifies the language to 17279 use in diagnostic messages. 17280 17281 If the `LC_ALL' environment variable is set, it overrides the value 17282 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 17283 `LC_MESSAGES' default to the value of the `LANG' environment 17284 variable. If none of these variables are set, GCC defaults to 17285 traditional C English behavior. 17286 17287`TMPDIR' 17288 If `TMPDIR' is set, it specifies the directory to use for temporary 17289 files. GCC uses temporary files to hold the output of one stage of 17290 compilation which is to be used as input to the next stage: for 17291 example, the output of the preprocessor, which is the input to the 17292 compiler proper. 17293 17294`GCC_EXEC_PREFIX' 17295 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 17296 names of the subprograms executed by the compiler. No slash is 17297 added when this prefix is combined with the name of a subprogram, 17298 but you can specify a prefix that ends with a slash if you wish. 17299 17300 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an 17301 appropriate prefix to use based on the pathname it was invoked 17302 with. 17303 17304 If GCC cannot find the subprogram using the specified prefix, it 17305 tries looking in the usual places for the subprogram. 17306 17307 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 17308 PREFIX is the prefix to the installed compiler. In many cases 17309 PREFIX is the value of `prefix' when you ran the `configure' 17310 script. 17311 17312 Other prefixes specified with `-B' take precedence over this 17313 prefix. 17314 17315 This prefix is also used for finding files such as `crt0.o' that 17316 are used for linking. 17317 17318 In addition, the prefix is used in an unusual way in finding the 17319 directories to search for header files. For each of the standard 17320 directories whose name normally begins with `/usr/local/lib/gcc' 17321 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 17322 replacing that beginning with the specified prefix to produce an 17323 alternate directory name. Thus, with `-Bfoo/', GCC will search 17324 `foo/bar' where it would normally search `/usr/local/lib/bar'. 17325 These alternate directories are searched first; the standard 17326 directories come next. If a standard directory begins with the 17327 configured PREFIX then the value of PREFIX is replaced by 17328 `GCC_EXEC_PREFIX' when looking for header files. 17329 17330`COMPILER_PATH' 17331 The value of `COMPILER_PATH' is a colon-separated list of 17332 directories, much like `PATH'. GCC tries the directories thus 17333 specified when searching for subprograms, if it can't find the 17334 subprograms using `GCC_EXEC_PREFIX'. 17335 17336`LIBRARY_PATH' 17337 The value of `LIBRARY_PATH' is a colon-separated list of 17338 directories, much like `PATH'. When configured as a native 17339 compiler, GCC tries the directories thus specified when searching 17340 for special linker files, if it can't find them using 17341 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 17342 when searching for ordinary libraries for the `-l' option (but 17343 directories specified with `-L' come first). 17344 17345`LANG' 17346 This variable is used to pass locale information to the compiler. 17347 One way in which this information is used is to determine the 17348 character set to be used when character literals, string literals 17349 and comments are parsed in C and C++. When the compiler is 17350 configured to allow multibyte characters, the following values for 17351 `LANG' are recognized: 17352 17353 `C-JIS' 17354 Recognize JIS characters. 17355 17356 `C-SJIS' 17357 Recognize SJIS characters. 17358 17359 `C-EUCJP' 17360 Recognize EUCJP characters. 17361 17362 If `LANG' is not defined, or if it has some other value, then the 17363 compiler will use mblen and mbtowc as defined by the default 17364 locale to recognize and translate multibyte characters. 17365 17366Some additional environments variables affect the behavior of the 17367preprocessor. 17368 17369`CPATH' 17370`C_INCLUDE_PATH' 17371`CPLUS_INCLUDE_PATH' 17372`OBJC_INCLUDE_PATH' 17373 Each variable's value is a list of directories separated by a 17374 special character, much like `PATH', in which to look for header 17375 files. The special character, `PATH_SEPARATOR', is 17376 target-dependent and determined at GCC build time. For Microsoft 17377 Windows-based targets it is a semicolon, and for almost all other 17378 targets it is a colon. 17379 17380 `CPATH' specifies a list of directories to be searched as if 17381 specified with `-I', but after any paths given with `-I' options 17382 on the command line. This environment variable is used regardless 17383 of which language is being preprocessed. 17384 17385 The remaining environment variables apply only when preprocessing 17386 the particular language indicated. Each specifies a list of 17387 directories to be searched as if specified with `-isystem', but 17388 after any paths given with `-isystem' options on the command line. 17389 17390 In all these variables, an empty element instructs the compiler to 17391 search its current working directory. Empty elements can appear 17392 at the beginning or end of a path. For instance, if the value of 17393 `CPATH' is `:/special/include', that has the same effect as 17394 `-I. -I/special/include'. 17395 17396`DEPENDENCIES_OUTPUT' 17397 If this variable is set, its value specifies how to output 17398 dependencies for Make based on the non-system header files 17399 processed by the compiler. System header files are ignored in the 17400 dependency output. 17401 17402 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 17403 which case the Make rules are written to that file, guessing the 17404 target name from the source file name. Or the value can have the 17405 form `FILE TARGET', in which case the rules are written to file 17406 FILE using TARGET as the target name. 17407 17408 In other words, this environment variable is equivalent to 17409 combining the options `-MM' and `-MF' (*note Preprocessor 17410 Options::), with an optional `-MT' switch too. 17411 17412`SUNPRO_DEPENDENCIES' 17413 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 17414 except that system header files are not ignored, so it implies 17415 `-M' rather than `-MM'. However, the dependence on the main input 17416 file is omitted. *Note Preprocessor Options::. 17417 17418 17419File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC 17420 174213.20 Using Precompiled Headers 17422============================== 17423 17424Often large projects have many header files that are included in every 17425source file. The time the compiler takes to process these header files 17426over and over again can account for nearly all of the time required to 17427build the project. To make builds faster, GCC allows users to 17428`precompile' a header file; then, if builds can use the precompiled 17429header file they will be much faster. 17430 17431 To create a precompiled header file, simply compile it as you would any 17432other file, if necessary using the `-x' option to make the driver treat 17433it as a C or C++ header file. You will probably want to use a tool 17434like `make' to keep the precompiled header up-to-date when the headers 17435it contains change. 17436 17437 A precompiled header file will be searched for when `#include' is seen 17438in the compilation. As it searches for the included file (*note Search 17439Path: (cpp)Search Path.) the compiler looks for a precompiled header in 17440each directory just before it looks for the include file in that 17441directory. The name searched for is the name specified in the 17442`#include' with `.gch' appended. If the precompiled header file can't 17443be used, it is ignored. 17444 17445 For instance, if you have `#include "all.h"', and you have `all.h.gch' 17446in the same directory as `all.h', then the precompiled header file will 17447be used if possible, and the original header will be used otherwise. 17448 17449 Alternatively, you might decide to put the precompiled header file in a 17450directory and use `-I' to ensure that directory is searched before (or 17451instead of) the directory containing the original header. Then, if you 17452want to check that the precompiled header file is always used, you can 17453put a file of the same name as the original header in this directory 17454containing an `#error' command. 17455 17456 This also works with `-include'. So yet another way to use 17457precompiled headers, good for projects not designed with precompiled 17458header files in mind, is to simply take most of the header files used by 17459a project, include them from another header file, precompile that header 17460file, and `-include' the precompiled header. If the header files have 17461guards against multiple inclusion, they will be skipped because they've 17462already been included (in the precompiled header). 17463 17464 If you need to precompile the same header file for different 17465languages, targets, or compiler options, you can instead make a 17466_directory_ named like `all.h.gch', and put each precompiled header in 17467the directory, perhaps using `-o'. It doesn't matter what you call the 17468files in the directory, every precompiled header in the directory will 17469be considered. The first precompiled header encountered in the 17470directory that is valid for this compilation will be used; they're 17471searched in no particular order. 17472 17473 There are many other possibilities, limited only by your imagination, 17474good sense, and the constraints of your build system. 17475 17476 A precompiled header file can be used only when these conditions apply: 17477 17478 * Only one precompiled header can be used in a particular 17479 compilation. 17480 17481 * A precompiled header can't be used once the first C token is seen. 17482 You can have preprocessor directives before a precompiled header; 17483 you can even include a precompiled header from inside another 17484 header, so long as there are no C tokens before the `#include'. 17485 17486 * The precompiled header file must be produced for the same language 17487 as the current compilation. You can't use a C precompiled header 17488 for a C++ compilation. 17489 17490 * The precompiled header file must have been produced by the same 17491 compiler binary as the current compilation is using. 17492 17493 * Any macros defined before the precompiled header is included must 17494 either be defined in the same way as when the precompiled header 17495 was generated, or must not affect the precompiled header, which 17496 usually means that they don't appear in the precompiled header at 17497 all. 17498 17499 The `-D' option is one way to define a macro before a precompiled 17500 header is included; using a `#define' can also do it. There are 17501 also some options that define macros implicitly, like `-O' and 17502 `-Wdeprecated'; the same rule applies to macros defined this way. 17503 17504 * If debugging information is output when using the precompiled 17505 header, using `-g' or similar, the same kind of debugging 17506 information must have been output when building the precompiled 17507 header. However, a precompiled header built using `-g' can be 17508 used in a compilation when no debugging information is being 17509 output. 17510 17511 * The same `-m' options must generally be used when building and 17512 using the precompiled header. *Note Submodel Options::, for any 17513 cases where this rule is relaxed. 17514 17515 * Each of the following options must be the same when building and 17516 using the precompiled header: 17517 17518 -fexceptions 17519 17520 * Some other command-line options starting with `-f', `-p', or `-O' 17521 must be defined in the same way as when the precompiled header was 17522 generated. At present, it's not clear which options are safe to 17523 change and which are not; the safest choice is to use exactly the 17524 same options when generating and using the precompiled header. 17525 The following are known to be safe: 17526 17527 -fmessage-length= -fpreprocessed -fsched-interblock 17528 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 17529 -fsched-verbose=NUMBER -fschedule-insns -fvisibility= 17530 -pedantic-errors 17531 17532 17533 For all of these except the last, the compiler will automatically 17534ignore the precompiled header if the conditions aren't met. If you 17535find an option combination that doesn't work and doesn't cause the 17536precompiled header to be ignored, please consider filing a bug report, 17537see *note Bugs::. 17538 17539 If you do use differing options when generating and using the 17540precompiled header, the actual behavior will be a mixture of the 17541behavior for the options. For instance, if you use `-g' to generate 17542the precompiled header but not when using it, you may or may not get 17543debugging information for routines in the precompiled header. 17544 17545 17546File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top 17547 175484 C Implementation-defined behavior 17549*********************************** 17550 17551A conforming implementation of ISO C is required to document its choice 17552of behavior in each of the areas that are designated "implementation 17553defined". The following lists all such areas, along with the section 17554numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 17555Some areas are only implementation-defined in one version of the 17556standard. 17557 17558 Some choices depend on the externally determined ABI for the platform 17559(including standard character encodings) which GCC follows; these are 17560listed as "determined by ABI" below. *Note Binary Compatibility: 17561Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 17562are documented in the preprocessor manual. *Note 17563Implementation-defined behavior: (cpp)Implementation-defined behavior. 17564Some choices are made by the library and operating system (or other 17565environment when compiling for a freestanding environment); refer to 17566their documentation for details. 17567 17568* Menu: 17569 17570* Translation implementation:: 17571* Environment implementation:: 17572* Identifiers implementation:: 17573* Characters implementation:: 17574* Integers implementation:: 17575* Floating point implementation:: 17576* Arrays and pointers implementation:: 17577* Hints implementation:: 17578* Structures unions enumerations and bit-fields implementation:: 17579* Qualifiers implementation:: 17580* Declarators implementation:: 17581* Statements implementation:: 17582* Preprocessing directives implementation:: 17583* Library functions implementation:: 17584* Architecture implementation:: 17585* Locale-specific behavior implementation:: 17586 17587 17588File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 17589 175904.1 Translation 17591=============== 17592 17593 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 17594 5.1.1.3).' 17595 17596 Diagnostics consist of all the output sent to stderr by GCC. 17597 17598 * `Whether each nonempty sequence of white-space characters other 17599 than new-line is retained or replaced by one space character in 17600 translation phase 3 (C90 and C99 5.1.1.2).' 17601 17602 *Note Implementation-defined behavior: (cpp)Implementation-defined 17603 behavior. 17604 17605 17606 17607File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 17608 176094.2 Environment 17610=============== 17611 17612The behavior of most of these points are dependent on the implementation 17613of the C library, and are not defined by GCC itself. 17614 17615 * `The mapping between physical source file multibyte characters and 17616 the source character set in translation phase 1 (C90 and C99 17617 5.1.1.2).' 17618 17619 *Note Implementation-defined behavior: (cpp)Implementation-defined 17620 behavior. 17621 17622 17623 17624File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 17625 176264.3 Identifiers 17627=============== 17628 17629 * `Which additional multibyte characters may appear in identifiers 17630 and their correspondence to universal character names (C99 6.4.2).' 17631 17632 *Note Implementation-defined behavior: (cpp)Implementation-defined 17633 behavior. 17634 17635 * `The number of significant initial characters in an identifier 17636 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 17637 17638 For internal names, all characters are significant. For external 17639 names, the number of significant characters are defined by the 17640 linker; for almost all targets, all characters are significant. 17641 17642 * `Whether case distinctions are significant in an identifier with 17643 external linkage (C90 6.1.2).' 17644 17645 This is a property of the linker. C99 requires that case 17646 distinctions are always significant in identifiers with external 17647 linkage and systems without this property are not supported by GCC. 17648 17649 17650 17651File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 17652 176534.4 Characters 17654============== 17655 17656 * `The number of bits in a byte (C90 3.4, C99 3.6).' 17657 17658 Determined by ABI. 17659 17660 * `The values of the members of the execution character set (C90 and 17661 C99 5.2.1).' 17662 17663 Determined by ABI. 17664 17665 * `The unique value of the member of the execution character set 17666 produced for each of the standard alphabetic escape sequences (C90 17667 and C99 5.2.2).' 17668 17669 Determined by ABI. 17670 17671 * `The value of a `char' object into which has been stored any 17672 character other than a member of the basic execution character set 17673 (C90 6.1.2.5, C99 6.2.5).' 17674 17675 Determined by ABI. 17676 17677 * `Which of `signed char' or `unsigned char' has the same range, 17678 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 17679 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 17680 17681 Determined by ABI. The options `-funsigned-char' and 17682 `-fsigned-char' change the default. *Note Options Controlling C 17683 Dialect: C Dialect Options. 17684 17685 * `The mapping of members of the source character set (in character 17686 constants and string literals) to members of the execution 17687 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 17688 17689 Determined by ABI. 17690 17691 * `The value of an integer character constant containing more than 17692 one character or containing a character or escape sequence that 17693 does not map to a single-byte execution character (C90 6.1.3.4, 17694 C99 6.4.4.4).' 17695 17696 *Note Implementation-defined behavior: (cpp)Implementation-defined 17697 behavior. 17698 17699 * `The value of a wide character constant containing more than one 17700 multibyte character, or containing a multibyte character or escape 17701 sequence not represented in the extended execution character set 17702 (C90 6.1.3.4, C99 6.4.4.4).' 17703 17704 *Note Implementation-defined behavior: (cpp)Implementation-defined 17705 behavior. 17706 17707 * `The current locale used to convert a wide character constant 17708 consisting of a single multibyte character that maps to a member 17709 of the extended execution character set into a corresponding wide 17710 character code (C90 6.1.3.4, C99 6.4.4.4).' 17711 17712 *Note Implementation-defined behavior: (cpp)Implementation-defined 17713 behavior. 17714 17715 * `The current locale used to convert a wide string literal into 17716 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 17717 17718 *Note Implementation-defined behavior: (cpp)Implementation-defined 17719 behavior. 17720 17721 * `The value of a string literal containing a multibyte character or 17722 escape sequence not represented in the execution character set 17723 (C90 6.1.4, C99 6.4.5).' 17724 17725 *Note Implementation-defined behavior: (cpp)Implementation-defined 17726 behavior. 17727 17728 17729File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 17730 177314.5 Integers 17732============ 17733 17734 * `Any extended integer types that exist in the implementation (C99 17735 6.2.5).' 17736 17737 GCC does not support any extended integer types. 17738 17739 * `Whether signed integer types are represented using sign and 17740 magnitude, two's complement, or one's complement, and whether the 17741 extraordinary value is a trap representation or an ordinary value 17742 (C99 6.2.6.2).' 17743 17744 GCC supports only two's complement integer types, and all bit 17745 patterns are ordinary values. 17746 17747 * `The rank of any extended integer type relative to another extended 17748 integer type with the same precision (C99 6.3.1.1).' 17749 17750 GCC does not support any extended integer types. 17751 17752 * `The result of, or the signal raised by, converting an integer to a 17753 signed integer type when the value cannot be represented in an 17754 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 17755 17756 For conversion to a type of width N, the value is reduced modulo 17757 2^N to be within range of the type; no signal is raised. 17758 17759 * `The results of some bitwise operations on signed integers (C90 17760 6.3, C99 6.5).' 17761 17762 Bitwise operators act on the representation of the value including 17763 both the sign and value bits, where the sign bit is considered 17764 immediately above the highest-value value bit. Signed `>>' acts 17765 on negative numbers by sign extension. 17766 17767 GCC does not use the latitude given in C99 only to treat certain 17768 aspects of signed `<<' as undefined, but this is subject to change. 17769 17770 * `The sign of the remainder on integer division (C90 6.3.5).' 17771 17772 GCC always follows the C99 requirement that the result of division 17773 is truncated towards zero. 17774 17775 17776 17777File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 17778 177794.6 Floating point 17780================== 17781 17782 * `The accuracy of the floating-point operations and of the library 17783 functions in `<math.h>' and `<complex.h>' that return 17784 floating-point results (C90 and C99 5.2.4.2.2).' 17785 17786 The accuracy is unknown. 17787 17788 * `The rounding behaviors characterized by non-standard values of 17789 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 17790 17791 GCC does not use such values. 17792 17793 * `The evaluation methods characterized by non-standard negative 17794 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 17795 17796 GCC does not use such values. 17797 17798 * `The direction of rounding when an integer is converted to a 17799 floating-point number that cannot exactly represent the original 17800 value (C90 6.2.1.3, C99 6.3.1.4).' 17801 17802 C99 Annex F is followed. 17803 17804 * `The direction of rounding when a floating-point number is 17805 converted to a narrower floating-point number (C90 6.2.1.4, C99 17806 6.3.1.5).' 17807 17808 C99 Annex F is followed. 17809 17810 * `How the nearest representable value or the larger or smaller 17811 representable value immediately adjacent to the nearest 17812 representable value is chosen for certain floating constants (C90 17813 6.1.3.1, C99 6.4.4.2).' 17814 17815 C99 Annex F is followed. 17816 17817 * `Whether and how floating expressions are contracted when not 17818 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 17819 17820 Expressions are currently only contracted if 17821 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 17822 subject to change. 17823 17824 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 17825 17826 This pragma is not implemented, but the default is to "off" unless 17827 `-frounding-math' is used in which case it is "on". 17828 17829 * `Additional floating-point exceptions, rounding modes, 17830 environments, and classifications, and their macro names (C99 7.6, 17831 C99 7.12).' 17832 17833 This is dependent on the implementation of the C library, and is 17834 not defined by GCC itself. 17835 17836 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 17837 17838 This pragma is not implemented. Expressions are currently only 17839 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 17840 used. This is subject to change. 17841 17842 * `Whether the "inexact" floating-point exception can be raised when 17843 the rounded result actually does equal the mathematical result in 17844 an IEC 60559 conformant implementation (C99 F.9).' 17845 17846 This is dependent on the implementation of the C library, and is 17847 not defined by GCC itself. 17848 17849 * `Whether the "underflow" (and "inexact") floating-point exception 17850 can be raised when a result is tiny but not inexact in an IEC 17851 60559 conformant implementation (C99 F.9).' 17852 17853 This is dependent on the implementation of the C library, and is 17854 not defined by GCC itself. 17855 17856 17857 17858File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 17859 178604.7 Arrays and pointers 17861======================= 17862 17863 * `The result of converting a pointer to an integer or vice versa 17864 (C90 6.3.4, C99 6.3.2.3).' 17865 17866 A cast from pointer to integer discards most-significant bits if 17867 the pointer representation is larger than the integer type, 17868 sign-extends(1) if the pointer representation is smaller than the 17869 integer type, otherwise the bits are unchanged. 17870 17871 A cast from integer to pointer discards most-significant bits if 17872 the pointer representation is smaller than the integer type, 17873 extends according to the signedness of the integer type if the 17874 pointer representation is larger than the integer type, otherwise 17875 the bits are unchanged. 17876 17877 When casting from pointer to integer and back again, the resulting 17878 pointer must reference the same object as the original pointer, 17879 otherwise the behavior is undefined. That is, one may not use 17880 integer arithmetic to avoid the undefined behavior of pointer 17881 arithmetic as proscribed in C99 6.5.6/8. 17882 17883 * `The size of the result of subtracting two pointers to elements of 17884 the same array (C90 6.3.6, C99 6.5.6).' 17885 17886 The value is as specified in the standard and the type is 17887 determined by the ABI. 17888 17889 17890 ---------- Footnotes ---------- 17891 17892 (1) Future versions of GCC may zero-extend, or use a target-defined 17893`ptr_extend' pattern. Do not rely on sign extension. 17894 17895 17896File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 17897 178984.8 Hints 17899========= 17900 17901 * `The extent to which suggestions made by using the `register' 17902 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 17903 17904 The `register' specifier affects code generation only in these 17905 ways: 17906 17907 * When used as part of the register variable extension, see 17908 *note Explicit Reg Vars::. 17909 17910 * When `-O0' is in use, the compiler allocates distinct stack 17911 memory for all variables that do not have the `register' 17912 storage-class specifier; if `register' is specified, the 17913 variable may have a shorter lifespan than the code would 17914 indicate and may never be placed in memory. 17915 17916 * On some rare x86 targets, `setjmp' doesn't save the registers 17917 in all circumstances. In those cases, GCC doesn't allocate 17918 any variables in registers unless they are marked `register'. 17919 17920 17921 * `The extent to which suggestions made by using the inline function 17922 specifier are effective (C99 6.7.4).' 17923 17924 GCC will not inline any functions if the `-fno-inline' option is 17925 used or if `-O0' is used. Otherwise, GCC may still be unable to 17926 inline a function for many reasons; the `-Winline' option may be 17927 used to determine if a function has not been inlined and why not. 17928 17929 17930 17931File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 17932 179334.9 Structures, unions, enumerations, and bit-fields 17934==================================================== 17935 17936 * `A member of a union object is accessed using a member of a 17937 different type (C90 6.3.2.3).' 17938 17939 The relevant bytes of the representation of the object are treated 17940 as an object of the type used for the access. *Note 17941 Type-punning::. This may be a trap representation. 17942 17943 * `Whether a "plain" `int' bit-field is treated as a `signed int' 17944 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 17945 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 17946 17947 By default it is treated as `signed int' but this may be changed 17948 by the `-funsigned-bitfields' option. 17949 17950 * `Allowable bit-field types other than `_Bool', `signed int', and 17951 `unsigned int' (C99 6.7.2.1).' 17952 17953 No other types are permitted in strictly conforming mode. 17954 17955 * `Whether a bit-field can straddle a storage-unit boundary (C90 17956 6.5.2.1, C99 6.7.2.1).' 17957 17958 Determined by ABI. 17959 17960 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 17961 C99 6.7.2.1).' 17962 17963 Determined by ABI. 17964 17965 * `The alignment of non-bit-field members of structures (C90 17966 6.5.2.1, C99 6.7.2.1).' 17967 17968 Determined by ABI. 17969 17970 * `The integer type compatible with each enumerated type (C90 17971 6.5.2.2, C99 6.7.2.2).' 17972 17973 Normally, the type is `unsigned int' if there are no negative 17974 values in the enumeration, otherwise `int'. If `-fshort-enums' is 17975 specified, then if there are negative values it is the first of 17976 `signed char', `short' and `int' that can represent all the 17977 values, otherwise it is the first of `unsigned char', `unsigned 17978 short' and `unsigned int' that can represent all the values. 17979 17980 On some targets, `-fshort-enums' is the default; this is 17981 determined by the ABI. 17982 17983 17984 17985File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 17986 179874.10 Qualifiers 17988=============== 17989 17990 * `What constitutes an access to an object that has 17991 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 17992 17993 Such an object is normally accessed by pointers and used for 17994 accessing hardware. In most expressions, it is intuitively 17995 obvious what is a read and what is a write. For example 17996 17997 volatile int *dst = SOMEVALUE; 17998 volatile int *src = SOMEOTHERVALUE; 17999 *dst = *src; 18000 18001 will cause a read of the volatile object pointed to by SRC and 18002 store the value into the volatile object pointed to by DST. There 18003 is no guarantee that these reads and writes are atomic, especially 18004 for objects larger than `int'. 18005 18006 However, if the volatile storage is not being modified, and the 18007 value of the volatile storage is not used, then the situation is 18008 less obvious. For example 18009 18010 volatile int *src = SOMEVALUE; 18011 *src; 18012 18013 According to the C standard, such an expression is an rvalue whose 18014 type is the unqualified version of its original type, i.e. `int'. 18015 Whether GCC interprets this as a read of the volatile object being 18016 pointed to or only as a request to evaluate the expression for its 18017 side-effects depends on this type. 18018 18019 If it is a scalar type, or on most targets an aggregate type whose 18020 only member object is of a scalar type, or a union type whose 18021 member objects are of scalar types, the expression is interpreted 18022 by GCC as a read of the volatile object; in the other cases, the 18023 expression is only evaluated for its side-effects. 18024 18025 18026 18027File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 18028 180294.11 Declarators 18030================ 18031 18032 * `The maximum number of declarators that may modify an arithmetic, 18033 structure or union type (C90 6.5.4).' 18034 18035 GCC is only limited by available memory. 18036 18037 18038 18039File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 18040 180414.12 Statements 18042=============== 18043 18044 * `The maximum number of `case' values in a `switch' statement (C90 18045 6.6.4.2).' 18046 18047 GCC is only limited by available memory. 18048 18049 18050 18051File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 18052 180534.13 Preprocessing directives 18054============================= 18055 18056*Note Implementation-defined behavior: (cpp)Implementation-defined 18057behavior, for details of these aspects of implementation-defined 18058behavior. 18059 18060 * `How sequences in both forms of header names are mapped to headers 18061 or external source file names (C90 6.1.7, C99 6.4.7).' 18062 18063 * `Whether the value of a character constant in a constant expression 18064 that controls conditional inclusion matches the value of the same 18065 character constant in the execution character set (C90 6.8.1, C99 18066 6.10.1).' 18067 18068 * `Whether the value of a single-character character constant in a 18069 constant expression that controls conditional inclusion may have a 18070 negative value (C90 6.8.1, C99 6.10.1).' 18071 18072 * `The places that are searched for an included `<>' delimited 18073 header, and how the places are specified or the header is 18074 identified (C90 6.8.2, C99 6.10.2).' 18075 18076 * `How the named source file is searched for in an included `""' 18077 delimited header (C90 6.8.2, C99 6.10.2).' 18078 18079 * `The method by which preprocessing tokens (possibly resulting from 18080 macro expansion) in a `#include' directive are combined into a 18081 header name (C90 6.8.2, C99 6.10.2).' 18082 18083 * `The nesting limit for `#include' processing (C90 6.8.2, C99 18084 6.10.2).' 18085 18086 * `Whether the `#' operator inserts a `\' character before the `\' 18087 character that begins a universal character name in a character 18088 constant or string literal (C99 6.10.3.2).' 18089 18090 * `The behavior on each recognized non-`STDC #pragma' directive (C90 18091 6.8.6, C99 6.10.6).' 18092 18093 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 18094 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 18095 details of target-specific pragmas. 18096 18097 * `The definitions for `__DATE__' and `__TIME__' when respectively, 18098 the date and time of translation are not available (C90 6.8.8, C99 18099 6.10.8).' 18100 18101 18102 18103File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 18104 181054.14 Library functions 18106====================== 18107 18108The behavior of most of these points are dependent on the implementation 18109of the C library, and are not defined by GCC itself. 18110 18111 * `The null pointer constant to which the macro `NULL' expands (C90 18112 7.1.6, C99 7.17).' 18113 18114 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 18115 provide the other headers which define `NULL' and some library 18116 implementations may use other definitions in those headers. 18117 18118 18119 18120File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 18121 181224.15 Architecture 18123================= 18124 18125 * `The values or expressions assigned to the macros specified in the 18126 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 18127 5.2.4.2, C99 7.18.2, C99 7.18.3).' 18128 18129 Determined by ABI. 18130 18131 * `The number, order, and encoding of bytes in any object (when not 18132 explicitly specified in this International Standard) (C99 18133 6.2.6.1).' 18134 18135 Determined by ABI. 18136 18137 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 18138 C99 6.5.3.4).' 18139 18140 Determined by ABI. 18141 18142 18143 18144File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 18145 181464.16 Locale-specific behavior 18147============================= 18148 18149The behavior of these points are dependent on the implementation of the 18150C library, and are not defined by GCC itself. 18151 18152 18153File: gcc.info, Node: C++ Implementation, Next: C++ Extensions, Prev: C Extensions, Up: Top 18154 181555 C++ Implementation-defined behavior 18156************************************* 18157 18158A conforming implementation of ISO C++ is required to document its 18159choice of behavior in each of the areas that are designated 18160"implementation defined". The following lists all such areas, along 18161with the section numbers from the ISO/IEC 14822:1998 and ISO/IEC 1816214822:2003 standards. Some areas are only implementation-defined in 18163one version of the standard. 18164 18165 Some choices depend on the externally determined ABI for the platform 18166(including standard character encodings) which GCC follows; these are 18167listed as "determined by ABI" below. *Note Binary Compatibility: 18168Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 18169are documented in the preprocessor manual. *Note 18170Implementation-defined behavior: (cpp)Implementation-defined behavior. 18171Some choices are documented in the corresponding document for the C 18172language. *Note C Implementation::. Some choices are made by the 18173library and operating system (or other environment when compiling for a 18174freestanding environment); refer to their documentation for details. 18175 18176* Menu: 18177 18178* Conditionally-supported behavior:: 18179* Exception handling:: 18180 18181 18182File: gcc.info, Node: Conditionally-supported behavior, Next: Exception handling, Up: C++ Implementation 18183 181845.1 Conditionally-supported behavior 18185==================================== 18186 18187`Each implementation shall include documentation that identifies all 18188conditionally-supported constructs that it does not support (C++0x 181891.4).' 18190 18191 * `Whether an argument of class type with a non-trivial copy 18192 constructor or destructor can be passed to ... (C++0x 5.2.2).' 18193 18194 Such argument passing is not supported. 18195 18196 18197 18198File: gcc.info, Node: Exception handling, Prev: Conditionally-supported behavior, Up: C++ Implementation 18199 182005.2 Exception handling 18201====================== 18202 18203 * `In the situation where no matching handler is found, it is 18204 implementation-defined whether or not the stack is unwound before 18205 std::terminate() is called (C++98 15.5.1).' 18206 18207 The stack is not unwound before std::terminate is called. 18208 18209 18210 18211File: gcc.info, Node: C Extensions, Next: C++ Implementation, Prev: C Implementation, Up: Top 18212 182136 Extensions to the C Language Family 18214************************************* 18215 18216GNU C provides several language features not found in ISO standard C. 18217(The `-pedantic' option directs GCC to print a warning message if any 18218of these features is used.) To test for the availability of these 18219features in conditional compilation, check for a predefined macro 18220`__GNUC__', which is always defined under GCC. 18221 18222 These extensions are available in C and Objective-C. Most of them are 18223also available in C++. *Note Extensions to the C++ Language: C++ 18224Extensions, for extensions that apply _only_ to C++. 18225 18226 Some features that are in ISO C99 but not C90 or C++ are also, as 18227extensions, accepted by GCC in C90 mode and in C++. 18228 18229* Menu: 18230 18231* Statement Exprs:: Putting statements and declarations inside expressions. 18232* Local Labels:: Labels local to a block. 18233* Labels as Values:: Getting pointers to labels, and computed gotos. 18234* Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 18235* Constructing Calls:: Dispatching a call to another function. 18236* Typeof:: `typeof': referring to the type of an expression. 18237* Conditionals:: Omitting the middle operand of a `?:' expression. 18238* Long Long:: Double-word integers---`long long int'. 18239* __int128:: 128-bit integers---`__int128'. 18240* Complex:: Data types for complex numbers. 18241* Floating Types:: Additional Floating Types. 18242* Half-Precision:: Half-Precision Floating Point. 18243* Decimal Float:: Decimal Floating Types. 18244* Hex Floats:: Hexadecimal floating-point constants. 18245* Fixed-Point:: Fixed-Point Types. 18246* Named Address Spaces::Named address spaces. 18247* Zero Length:: Zero-length arrays. 18248* Variable Length:: Arrays whose length is computed at run time. 18249* Empty Structures:: Structures with no members. 18250* Variadic Macros:: Macros with a variable number of arguments. 18251* Escaped Newlines:: Slightly looser rules for escaped newlines. 18252* Subscripting:: Any array can be subscripted, even if not an lvalue. 18253* Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 18254* Initializers:: Non-constant initializers. 18255* Compound Literals:: Compound literals give structures, unions 18256 or arrays as values. 18257* Designated Inits:: Labeling elements of initializers. 18258* Cast to Union:: Casting to union type from any member of the union. 18259* Case Ranges:: `case 1 ... 9' and such. 18260* Mixed Declarations:: Mixing declarations and code. 18261* Function Attributes:: Declaring that functions have no side effects, 18262 or that they can never return. 18263* Attribute Syntax:: Formal syntax for attributes. 18264* Function Prototypes:: Prototype declarations and old-style definitions. 18265* C++ Comments:: C++ comments are recognized. 18266* Dollar Signs:: Dollar sign is allowed in identifiers. 18267* Character Escapes:: `\e' stands for the character <ESC>. 18268* Variable Attributes:: Specifying attributes of variables. 18269* Type Attributes:: Specifying attributes of types. 18270* Alignment:: Inquiring about the alignment of a type or variable. 18271* Inline:: Defining inline functions (as fast as macros). 18272* Volatiles:: What constitutes an access to a volatile object. 18273* Extended Asm:: Assembler instructions with C expressions as operands. 18274 (With them you can define ``built-in'' functions.) 18275* Constraints:: Constraints for asm operands 18276* Asm Labels:: Specifying the assembler name to use for a C symbol. 18277* Explicit Reg Vars:: Defining variables residing in specified registers. 18278* Alternate Keywords:: `__const__', `__asm__', etc., for header files. 18279* Incomplete Enums:: `enum foo;', with details to follow. 18280* Function Names:: Printable strings which are the name of the current 18281 function. 18282* Return Address:: Getting the return or frame address of a function. 18283* Vector Extensions:: Using vector instructions through built-in functions. 18284* Offsetof:: Special syntax for implementing `offsetof'. 18285* Atomic Builtins:: Built-in functions for atomic memory access. 18286* Object Size Checking:: Built-in functions for limited buffer overflow 18287 checking. 18288* Other Builtins:: Other built-in functions. 18289* Target Builtins:: Built-in functions specific to particular targets. 18290* Target Format Checks:: Format checks specific to particular targets. 18291* Pragmas:: Pragmas accepted by GCC. 18292* Unnamed Fields:: Unnamed struct/union fields within structs/unions. 18293* Thread-Local:: Per-thread variables. 18294* Binary constants:: Binary constants using the `0b' prefix. 18295 18296 18297File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 18298 182996.1 Statements and Declarations in Expressions 18300============================================== 18301 18302A compound statement enclosed in parentheses may appear as an expression 18303in GNU C. This allows you to use loops, switches, and local variables 18304within an expression. 18305 18306 Recall that a compound statement is a sequence of statements surrounded 18307by braces; in this construct, parentheses go around the braces. For 18308example: 18309 18310 ({ int y = foo (); int z; 18311 if (y > 0) z = y; 18312 else z = - y; 18313 z; }) 18314 18315is a valid (though slightly more complex than necessary) expression for 18316the absolute value of `foo ()'. 18317 18318 The last thing in the compound statement should be an expression 18319followed by a semicolon; the value of this subexpression serves as the 18320value of the entire construct. (If you use some other kind of statement 18321last within the braces, the construct has type `void', and thus 18322effectively no value.) 18323 18324 This feature is especially useful in making macro definitions "safe" 18325(so that they evaluate each operand exactly once). For example, the 18326"maximum" function is commonly defined as a macro in standard C as 18327follows: 18328 18329 #define max(a,b) ((a) > (b) ? (a) : (b)) 18330 18331But this definition computes either A or B twice, with bad results if 18332the operand has side effects. In GNU C, if you know the type of the 18333operands (here taken as `int'), you can define the macro safely as 18334follows: 18335 18336 #define maxint(a,b) \ 18337 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 18338 18339 Embedded statements are not allowed in constant expressions, such as 18340the value of an enumeration constant, the width of a bit-field, or the 18341initial value of a static variable. 18342 18343 If you don't know the type of the operand, you can still do this, but 18344you must use `typeof' (*note Typeof::). 18345 18346 In G++, the result value of a statement expression undergoes array and 18347function pointer decay, and is returned by value to the enclosing 18348expression. For instance, if `A' is a class, then 18349 18350 A a; 18351 18352 ({a;}).Foo () 18353 18354will construct a temporary `A' object to hold the result of the 18355statement expression, and that will be used to invoke `Foo'. Therefore 18356the `this' pointer observed by `Foo' will not be the address of `a'. 18357 18358 Any temporaries created within a statement within a statement 18359expression will be destroyed at the statement's end. This makes 18360statement expressions inside macros slightly different from function 18361calls. In the latter case temporaries introduced during argument 18362evaluation will be destroyed at the end of the statement that includes 18363the function call. In the statement expression case they will be 18364destroyed during the statement expression. For instance, 18365 18366 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 18367 template<typename T> T function(T a) { T b = a; return b + 3; } 18368 18369 void foo () 18370 { 18371 macro (X ()); 18372 function (X ()); 18373 } 18374 18375will have different places where temporaries are destroyed. For the 18376`macro' case, the temporary `X' will be destroyed just after the 18377initialization of `b'. In the `function' case that temporary will be 18378destroyed when the function returns. 18379 18380 These considerations mean that it is probably a bad idea to use 18381statement-expressions of this form in header files that are designed to 18382work with C++. (Note that some versions of the GNU C Library contained 18383header files using statement-expression that lead to precisely this 18384bug.) 18385 18386 Jumping into a statement expression with `goto' or using a `switch' 18387statement outside the statement expression with a `case' or `default' 18388label inside the statement expression is not permitted. Jumping into a 18389statement expression with a computed `goto' (*note Labels as Values::) 18390yields undefined behavior. Jumping out of a statement expression is 18391permitted, but if the statement expression is part of a larger 18392expression then it is unspecified which other subexpressions of that 18393expression have been evaluated except where the language definition 18394requires certain subexpressions to be evaluated before or after the 18395statement expression. In any case, as with a function call the 18396evaluation of a statement expression is not interleaved with the 18397evaluation of other parts of the containing expression. For example, 18398 18399 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 18400 18401will call `foo' and `bar1' and will not call `baz' but may or may not 18402call `bar2'. If `bar2' is called, it will be called after `foo' and 18403before `bar1' 18404 18405 18406File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 18407 184086.2 Locally Declared Labels 18409=========================== 18410 18411GCC allows you to declare "local labels" in any nested block scope. A 18412local label is just like an ordinary label, but you can only reference 18413it (with a `goto' statement, or by taking its address) within the block 18414in which it was declared. 18415 18416 A local label declaration looks like this: 18417 18418 __label__ LABEL; 18419 18420or 18421 18422 __label__ LABEL1, LABEL2, /* ... */; 18423 18424 Local label declarations must come at the beginning of the block, 18425before any ordinary declarations or statements. 18426 18427 The label declaration defines the label _name_, but does not define 18428the label itself. You must do this in the usual way, with `LABEL:', 18429within the statements of the statement expression. 18430 18431 The local label feature is useful for complex macros. If a macro 18432contains nested loops, a `goto' can be useful for breaking out of them. 18433However, an ordinary label whose scope is the whole function cannot be 18434used: if the macro can be expanded several times in one function, the 18435label will be multiply defined in that function. A local label avoids 18436this problem. For example: 18437 18438 #define SEARCH(value, array, target) \ 18439 do { \ 18440 __label__ found; \ 18441 typeof (target) _SEARCH_target = (target); \ 18442 typeof (*(array)) *_SEARCH_array = (array); \ 18443 int i, j; \ 18444 int value; \ 18445 for (i = 0; i < max; i++) \ 18446 for (j = 0; j < max; j++) \ 18447 if (_SEARCH_array[i][j] == _SEARCH_target) \ 18448 { (value) = i; goto found; } \ 18449 (value) = -1; \ 18450 found:; \ 18451 } while (0) 18452 18453 This could also be written using a statement-expression: 18454 18455 #define SEARCH(array, target) \ 18456 ({ \ 18457 __label__ found; \ 18458 typeof (target) _SEARCH_target = (target); \ 18459 typeof (*(array)) *_SEARCH_array = (array); \ 18460 int i, j; \ 18461 int value; \ 18462 for (i = 0; i < max; i++) \ 18463 for (j = 0; j < max; j++) \ 18464 if (_SEARCH_array[i][j] == _SEARCH_target) \ 18465 { value = i; goto found; } \ 18466 value = -1; \ 18467 found: \ 18468 value; \ 18469 }) 18470 18471 Local label declarations also make the labels they declare visible to 18472nested functions, if there are any. *Note Nested Functions::, for 18473details. 18474 18475 18476File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 18477 184786.3 Labels as Values 18479==================== 18480 18481You can get the address of a label defined in the current function (or 18482a containing function) with the unary operator `&&'. The value has 18483type `void *'. This value is a constant and can be used wherever a 18484constant of that type is valid. For example: 18485 18486 void *ptr; 18487 /* ... */ 18488 ptr = &&foo; 18489 18490 To use these values, you need to be able to jump to one. This is done 18491with the computed goto statement(1), `goto *EXP;'. For example, 18492 18493 goto *ptr; 18494 18495Any expression of type `void *' is allowed. 18496 18497 One way of using these constants is in initializing a static array that 18498will serve as a jump table: 18499 18500 static void *array[] = { &&foo, &&bar, &&hack }; 18501 18502 Then you can select a label with indexing, like this: 18503 18504 goto *array[i]; 18505 18506Note that this does not check whether the subscript is in bounds--array 18507indexing in C never does that. 18508 18509 Such an array of label values serves a purpose much like that of the 18510`switch' statement. The `switch' statement is cleaner, so use that 18511rather than an array unless the problem does not fit a `switch' 18512statement very well. 18513 18514 Another use of label values is in an interpreter for threaded code. 18515The labels within the interpreter function can be stored in the 18516threaded code for super-fast dispatching. 18517 18518 You may not use this mechanism to jump to code in a different function. 18519If you do that, totally unpredictable things will happen. The best way 18520to avoid this is to store the label address only in automatic variables 18521and never pass it as an argument. 18522 18523 An alternate way to write the above example is 18524 18525 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 18526 &&hack - &&foo }; 18527 goto *(&&foo + array[i]); 18528 18529This is more friendly to code living in shared libraries, as it reduces 18530the number of dynamic relocations that are needed, and by consequence, 18531allows the data to be read-only. 18532 18533 The `&&foo' expressions for the same label might have different values 18534if the containing function is inlined or cloned. If a program relies 18535on them being always the same, 18536`__attribute__((__noinline__,__noclone__))' should be used to prevent 18537inlining and cloning. If `&&foo' is used in a static variable 18538initializer, inlining and cloning is forbidden. 18539 18540 ---------- Footnotes ---------- 18541 18542 (1) The analogous feature in Fortran is called an assigned goto, but 18543that name seems inappropriate in C, where one can do more than simply 18544store label addresses in label variables. 18545 18546 18547File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 18548 185496.4 Nested Functions 18550==================== 18551 18552A "nested function" is a function defined inside another function. 18553(Nested functions are not supported for GNU C++.) The nested function's 18554name is local to the block where it is defined. For example, here we 18555define a nested function named `square', and call it twice: 18556 18557 foo (double a, double b) 18558 { 18559 double square (double z) { return z * z; } 18560 18561 return square (a) + square (b); 18562 } 18563 18564 The nested function can access all the variables of the containing 18565function that are visible at the point of its definition. This is 18566called "lexical scoping". For example, here we show a nested function 18567which uses an inherited variable named `offset': 18568 18569 bar (int *array, int offset, int size) 18570 { 18571 int access (int *array, int index) 18572 { return array[index + offset]; } 18573 int i; 18574 /* ... */ 18575 for (i = 0; i < size; i++) 18576 /* ... */ access (array, i) /* ... */ 18577 } 18578 18579 Nested function definitions are permitted within functions in the 18580places where variable definitions are allowed; that is, in any block, 18581mixed with the other declarations and statements in the block. 18582 18583 It is possible to call the nested function from outside the scope of 18584its name by storing its address or passing the address to another 18585function: 18586 18587 hack (int *array, int size) 18588 { 18589 void store (int index, int value) 18590 { array[index] = value; } 18591 18592 intermediate (store, size); 18593 } 18594 18595 Here, the function `intermediate' receives the address of `store' as 18596an argument. If `intermediate' calls `store', the arguments given to 18597`store' are used to store into `array'. But this technique works only 18598so long as the containing function (`hack', in this example) does not 18599exit. 18600 18601 If you try to call the nested function through its address after the 18602containing function has exited, all hell will break loose. If you try 18603to call it after a containing scope level has exited, and if it refers 18604to some of the variables that are no longer in scope, you may be lucky, 18605but it's not wise to take the risk. If, however, the nested function 18606does not refer to anything that has gone out of scope, you should be 18607safe. 18608 18609 GCC implements taking the address of a nested function using a 18610technique called "trampolines". This technique was described in 18611`Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference 18612Proceedings, October 17-21, 1988). 18613 18614 A nested function can jump to a label inherited from a containing 18615function, provided the label was explicitly declared in the containing 18616function (*note Local Labels::). Such a jump returns instantly to the 18617containing function, exiting the nested function which did the `goto' 18618and any intermediate functions as well. Here is an example: 18619 18620 bar (int *array, int offset, int size) 18621 { 18622 __label__ failure; 18623 int access (int *array, int index) 18624 { 18625 if (index > size) 18626 goto failure; 18627 return array[index + offset]; 18628 } 18629 int i; 18630 /* ... */ 18631 for (i = 0; i < size; i++) 18632 /* ... */ access (array, i) /* ... */ 18633 /* ... */ 18634 return 0; 18635 18636 /* Control comes here from `access' 18637 if it detects an error. */ 18638 failure: 18639 return -1; 18640 } 18641 18642 A nested function always has no linkage. Declaring one with `extern' 18643or `static' is erroneous. If you need to declare the nested function 18644before its definition, use `auto' (which is otherwise meaningless for 18645function declarations). 18646 18647 bar (int *array, int offset, int size) 18648 { 18649 __label__ failure; 18650 auto int access (int *, int); 18651 /* ... */ 18652 int access (int *array, int index) 18653 { 18654 if (index > size) 18655 goto failure; 18656 return array[index + offset]; 18657 } 18658 /* ... */ 18659 } 18660 18661 18662File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 18663 186646.5 Constructing Function Calls 18665=============================== 18666 18667Using the built-in functions described below, you can record the 18668arguments a function received, and call another function with the same 18669arguments, without knowing the number or types of the arguments. 18670 18671 You can also record the return value of that function call, and later 18672return that value, without knowing what data type the function tried to 18673return (as long as your caller expects that data type). 18674 18675 However, these built-in functions may interact badly with some 18676sophisticated features or other extensions of the language. It is, 18677therefore, not recommended to use them outside very simple functions 18678acting as mere forwarders for their arguments. 18679 18680 -- Built-in Function: void * __builtin_apply_args () 18681 This built-in function returns a pointer to data describing how to 18682 perform a call with the same arguments as were passed to the 18683 current function. 18684 18685 The function saves the arg pointer register, structure value 18686 address, and all registers that might be used to pass arguments to 18687 a function into a block of memory allocated on the stack. Then it 18688 returns the address of that block. 18689 18690 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 18691 *ARGUMENTS, size_t SIZE) 18692 This built-in function invokes FUNCTION with a copy of the 18693 parameters described by ARGUMENTS and SIZE. 18694 18695 The value of ARGUMENTS should be the value returned by 18696 `__builtin_apply_args'. The argument SIZE specifies the size of 18697 the stack argument data, in bytes. 18698 18699 This function returns a pointer to data describing how to return 18700 whatever value was returned by FUNCTION. The data is saved in a 18701 block of memory allocated on the stack. 18702 18703 It is not always simple to compute the proper value for SIZE. The 18704 value is used by `__builtin_apply' to compute the amount of data 18705 that should be pushed on the stack and copied from the incoming 18706 argument area. 18707 18708 -- Built-in Function: void __builtin_return (void *RESULT) 18709 This built-in function returns the value described by RESULT from 18710 the containing function. You should specify, for RESULT, a value 18711 returned by `__builtin_apply'. 18712 18713 -- Built-in Function: __builtin_va_arg_pack () 18714 This built-in function represents all anonymous arguments of an 18715 inline function. It can be used only in inline functions which 18716 will be always inlined, never compiled as a separate function, 18717 such as those using `__attribute__ ((__always_inline__))' or 18718 `__attribute__ ((__gnu_inline__))' extern inline functions. It 18719 must be only passed as last argument to some other function with 18720 variable arguments. This is useful for writing small wrapper 18721 inlines for variable argument functions, when using preprocessor 18722 macros is undesirable. For example: 18723 extern int myprintf (FILE *f, const char *format, ...); 18724 extern inline __attribute__ ((__gnu_inline__)) int 18725 myprintf (FILE *f, const char *format, ...) 18726 { 18727 int r = fprintf (f, "myprintf: "); 18728 if (r < 0) 18729 return r; 18730 int s = fprintf (f, format, __builtin_va_arg_pack ()); 18731 if (s < 0) 18732 return s; 18733 return r + s; 18734 } 18735 18736 -- Built-in Function: size_t __builtin_va_arg_pack_len () 18737 This built-in function returns the number of anonymous arguments of 18738 an inline function. It can be used only in inline functions which 18739 will be always inlined, never compiled as a separate function, such 18740 as those using `__attribute__ ((__always_inline__))' or 18741 `__attribute__ ((__gnu_inline__))' extern inline functions. For 18742 example following will do link or runtime checking of open 18743 arguments for optimized code: 18744 #ifdef __OPTIMIZE__ 18745 extern inline __attribute__((__gnu_inline__)) int 18746 myopen (const char *path, int oflag, ...) 18747 { 18748 if (__builtin_va_arg_pack_len () > 1) 18749 warn_open_too_many_arguments (); 18750 18751 if (__builtin_constant_p (oflag)) 18752 { 18753 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 18754 { 18755 warn_open_missing_mode (); 18756 return __open_2 (path, oflag); 18757 } 18758 return open (path, oflag, __builtin_va_arg_pack ()); 18759 } 18760 18761 if (__builtin_va_arg_pack_len () < 1) 18762 return __open_2 (path, oflag); 18763 18764 return open (path, oflag, __builtin_va_arg_pack ()); 18765 } 18766 #endif 18767 18768 18769File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 18770 187716.6 Referring to a Type with `typeof' 18772===================================== 18773 18774Another way to refer to the type of an expression is with `typeof'. 18775The syntax of using of this keyword looks like `sizeof', but the 18776construct acts semantically like a type name defined with `typedef'. 18777 18778 There are two ways of writing the argument to `typeof': with an 18779expression or with a type. Here is an example with an expression: 18780 18781 typeof (x[0](1)) 18782 18783This assumes that `x' is an array of pointers to functions; the type 18784described is that of the values of the functions. 18785 18786 Here is an example with a typename as the argument: 18787 18788 typeof (int *) 18789 18790Here the type described is that of pointers to `int'. 18791 18792 If you are writing a header file that must work when included in ISO C 18793programs, write `__typeof__' instead of `typeof'. *Note Alternate 18794Keywords::. 18795 18796 A `typeof'-construct can be used anywhere a typedef name could be 18797used. For example, you can use it in a declaration, in a cast, or 18798inside of `sizeof' or `typeof'. 18799 18800 The operand of `typeof' is evaluated for its side effects if and only 18801if it is an expression of variably modified type or the name of such a 18802type. 18803 18804 `typeof' is often useful in conjunction with the 18805statements-within-expressions feature. Here is how the two together can 18806be used to define a safe "maximum" macro that operates on any 18807arithmetic type and evaluates each of its arguments exactly once: 18808 18809 #define max(a,b) \ 18810 ({ typeof (a) _a = (a); \ 18811 typeof (b) _b = (b); \ 18812 _a > _b ? _a : _b; }) 18813 18814 The reason for using names that start with underscores for the local 18815variables is to avoid conflicts with variable names that occur within 18816the expressions that are substituted for `a' and `b'. Eventually we 18817hope to design a new form of declaration syntax that allows you to 18818declare variables whose scopes start only after their initializers; 18819this will be a more reliable way to prevent such conflicts. 18820 18821Some more examples of the use of `typeof': 18822 18823 * This declares `y' with the type of what `x' points to. 18824 18825 typeof (*x) y; 18826 18827 * This declares `y' as an array of such values. 18828 18829 typeof (*x) y[4]; 18830 18831 * This declares `y' as an array of pointers to characters: 18832 18833 typeof (typeof (char *)[4]) y; 18834 18835 It is equivalent to the following traditional C declaration: 18836 18837 char *y[4]; 18838 18839 To see the meaning of the declaration using `typeof', and why it 18840 might be a useful way to write, rewrite it with these macros: 18841 18842 #define pointer(T) typeof(T *) 18843 #define array(T, N) typeof(T [N]) 18844 18845 Now the declaration can be rewritten this way: 18846 18847 array (pointer (char), 4) y; 18848 18849 Thus, `array (pointer (char), 4)' is the type of arrays of 4 18850 pointers to `char'. 18851 18852 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 18853limited extension which permitted one to write 18854 18855 typedef T = EXPR; 18856 18857with the effect of declaring T to have the type of the expression EXPR. 18858This extension does not work with GCC 3 (versions between 3.0 and 3.2 18859will crash; 3.2.1 and later give an error). Code which relies on it 18860should be rewritten to use `typeof': 18861 18862 typedef typeof(EXPR) T; 18863 18864This will work with all versions of GCC. 18865 18866 18867File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Typeof, Up: C Extensions 18868 188696.7 Conditionals with Omitted Operands 18870====================================== 18871 18872The middle operand in a conditional expression may be omitted. Then if 18873the first operand is nonzero, its value is the value of the conditional 18874expression. 18875 18876 Therefore, the expression 18877 18878 x ? : y 18879 18880has the value of `x' if that is nonzero; otherwise, the value of `y'. 18881 18882 This example is perfectly equivalent to 18883 18884 x ? x : y 18885 18886In this simple case, the ability to omit the middle operand is not 18887especially useful. When it becomes useful is when the first operand 18888does, or may (if it is a macro argument), contain a side effect. Then 18889repeating the operand in the middle would perform the side effect 18890twice. Omitting the middle operand uses the value already computed 18891without the undesirable effects of recomputing it. 18892 18893 18894File: gcc.info, Node: __int128, Next: Complex, Prev: Long Long, Up: C Extensions 18895 188966.8 128-bits integers 18897===================== 18898 18899As an extension the integer scalar type `__int128' is supported for 18900targets having an integer mode wide enough to hold 128-bit. Simply 18901write `__int128' for a signed 128-bit integer, or `unsigned __int128' 18902for an unsigned 128-bit integer. There is no support in GCC to express 18903an integer constant of type `__int128' for targets having `long long' 18904integer with less then 128 bit width. 18905 18906 18907File: gcc.info, Node: Long Long, Next: __int128, Prev: Conditionals, Up: C Extensions 18908 189096.9 Double-Word Integers 18910======================== 18911 18912ISO C99 supports data types for integers that are at least 64 bits wide, 18913and as an extension GCC supports them in C90 mode and in C++. Simply 18914write `long long int' for a signed integer, or `unsigned long long int' 18915for an unsigned integer. To make an integer constant of type `long 18916long int', add the suffix `LL' to the integer. To make an integer 18917constant of type `unsigned long long int', add the suffix `ULL' to the 18918integer. 18919 18920 You can use these types in arithmetic like any other integer types. 18921Addition, subtraction, and bitwise boolean operations on these types 18922are open-coded on all types of machines. Multiplication is open-coded 18923if the machine supports fullword-to-doubleword a widening multiply 18924instruction. Division and shifts are open-coded only on machines that 18925provide special support. The operations that are not open-coded use 18926special library routines that come with GCC. 18927 18928 There may be pitfalls when you use `long long' types for function 18929arguments, unless you declare function prototypes. If a function 18930expects type `int' for its argument, and you pass a value of type `long 18931long int', confusion will result because the caller and the subroutine 18932will disagree about the number of bytes for the argument. Likewise, if 18933the function expects `long long int' and you pass `int'. The best way 18934to avoid such problems is to use prototypes. 18935 18936 18937File: gcc.info, Node: Complex, Next: Floating Types, Prev: __int128, Up: C Extensions 18938 189396.10 Complex Numbers 18940==================== 18941 18942ISO C99 supports complex floating data types, and as an extension GCC 18943supports them in C90 mode and in C++, and supports complex integer data 18944types which are not part of ISO C99. You can declare complex types 18945using the keyword `_Complex'. As an extension, the older GNU keyword 18946`__complex__' is also supported. 18947 18948 For example, `_Complex double x;' declares `x' as a variable whose 18949real part and imaginary part are both of type `double'. `_Complex 18950short int y;' declares `y' to have real and imaginary parts of type 18951`short int'; this is not likely to be useful, but it shows that the set 18952of complex types is complete. 18953 18954 To write a constant with a complex data type, use the suffix `i' or 18955`j' (either one; they are equivalent). For example, `2.5fi' has type 18956`_Complex float' and `3i' has type `_Complex int'. Such a constant 18957always has a pure imaginary value, but you can form any complex value 18958you like by adding one to a real constant. This is a GNU extension; if 18959you have an ISO C99 conforming C library (such as GNU libc), and want 18960to construct complex constants of floating type, you should include 18961`<complex.h>' and use the macros `I' or `_Complex_I' instead. 18962 18963 To extract the real part of a complex-valued expression EXP, write 18964`__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 18965part. This is a GNU extension; for values of floating type, you should 18966use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 18967`cimag' and `cimagl', declared in `<complex.h>' and also provided as 18968built-in functions by GCC. 18969 18970 The operator `~' performs complex conjugation when used on a value 18971with a complex type. This is a GNU extension; for values of floating 18972type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 18973declared in `<complex.h>' and also provided as built-in functions by 18974GCC. 18975 18976 GCC can allocate complex automatic variables in a noncontiguous 18977fashion; it's even possible for the real part to be in a register while 18978the imaginary part is on the stack (or vice-versa). Only the DWARF2 18979debug info format can represent this, so use of DWARF2 is recommended. 18980If you are using the stabs debug info format, GCC describes a 18981noncontiguous complex variable as if it were two separate variables of 18982noncomplex type. If the variable's actual name is `foo', the two 18983fictitious variables are named `foo$real' and `foo$imag'. You can 18984examine and set these two fictitious variables with your debugger. 18985 18986 18987File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions 18988 189896.11 Additional Floating Types 18990============================== 18991 18992As an extension, the GNU C compiler supports additional floating types, 18993`__float80' and `__float128' to support 80bit (`XFmode') and 128 bit 18994(`TFmode') floating types. Support for additional types includes the 18995arithmetic operators: add, subtract, multiply, divide; unary arithmetic 18996operators; relational operators; equality operators; and conversions to 18997and from integer and other floating types. Use a suffix `w' or `W' in 18998a literal constant of type `__float80' and `q' or `Q' for `_float128'. 18999You can declare complex types using the corresponding internal complex 19000type, `XCmode' for `__float80' type and `TCmode' for `__float128' type: 19001 19002 typedef _Complex float __attribute__((mode(TC))) _Complex128; 19003 typedef _Complex float __attribute__((mode(XC))) _Complex80; 19004 19005 Not all targets support additional floating point types. `__float80' 19006and `__float128' types are supported on i386, x86_64 and ia64 targets. 19007The `__float128' type is supported on hppa HP-UX targets. 19008 19009 19010File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions 19011 190126.12 Half-Precision Floating Point 19013================================== 19014 19015On ARM targets, GCC supports half-precision (16-bit) floating point via 19016the `__fp16' type. You must enable this type explicitly with the 19017`-mfp16-format' command-line option in order to use it. 19018 19019 ARM supports two incompatible representations for half-precision 19020floating-point values. You must choose one of the representations and 19021use it consistently in your program. 19022 19023 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format. 19024This format can represent normalized values in the range of 2^-14 to 1902565504. There are 11 bits of significand precision, approximately 3 19026decimal digits. 19027 19028 Specifying `-mfp16-format=alternative' selects the ARM alternative 19029format. This representation is similar to the IEEE format, but does 19030not support infinities or NaNs. Instead, the range of exponents is 19031extended, so that this format can represent normalized values in the 19032range of 2^-14 to 131008. 19033 19034 The `__fp16' type is a storage format only. For purposes of 19035arithmetic and other operations, `__fp16' values in C or C++ 19036expressions are automatically promoted to `float'. In addition, you 19037cannot declare a function with a return value or parameters of type 19038`__fp16'. 19039 19040 Note that conversions from `double' to `__fp16' involve an 19041intermediate conversion to `float'. Because of rounding, this can 19042sometimes produce a different result than a direct conversion. 19043 19044 ARM provides hardware support for conversions between `__fp16' and 19045`float' values as an extension to VFP and NEON (Advanced SIMD). GCC 19046generates code using these hardware instructions if you compile with 19047options to select an FPU that provides them; for example, 19048`-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the 19049`-mfp16-format' option to select a half-precision format. 19050 19051 Language-level support for the `__fp16' data type is independent of 19052whether GCC generates code using hardware floating-point instructions. 19053In cases where hardware support is not specified, GCC implements 19054conversions between `__fp16' and `float' values as library calls. 19055 19056 19057File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions 19058 190596.13 Decimal Floating Types 19060=========================== 19061 19062As an extension, the GNU C compiler supports decimal floating types as 19063defined in the N1312 draft of ISO/IEC WDTR24732. Support for decimal 19064floating types in GCC will evolve as the draft technical report changes. 19065Calling conventions for any target might also change. Not all targets 19066support decimal floating types. 19067 19068 The decimal floating types are `_Decimal32', `_Decimal64', and 19069`_Decimal128'. They use a radix of ten, unlike the floating types 19070`float', `double', and `long double' whose radix is not specified by 19071the C standard but is usually two. 19072 19073 Support for decimal floating types includes the arithmetic operators 19074add, subtract, multiply, divide; unary arithmetic operators; relational 19075operators; equality operators; and conversions to and from integer and 19076other floating types. Use a suffix `df' or `DF' in a literal constant 19077of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 19078for `_Decimal128'. 19079 19080 GCC support of decimal float as specified by the draft technical report 19081is incomplete: 19082 19083 * When the value of a decimal floating type cannot be represented in 19084 the integer type to which it is being converted, the result is 19085 undefined rather than the result value specified by the draft 19086 technical report. 19087 19088 * GCC does not provide the C library functionality associated with 19089 `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which 19090 must come from a separate C library implementation. Because of 19091 this the GNU C compiler does not define macro `__STDC_DEC_FP__' to 19092 indicate that the implementation conforms to the technical report. 19093 19094 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 19095the DWARF2 debug information format. 19096 19097 19098File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 19099 191006.14 Hex Floats 19101=============== 19102 19103ISO C99 supports floating-point numbers written not only in the usual 19104decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 19105written in hexadecimal format. As a GNU extension, GCC supports this 19106in C90 mode (except in some cases when strictly conforming) and in C++. 19107In that format the `0x' hex introducer and the `p' or `P' exponent 19108field are mandatory. The exponent is a decimal number that indicates 19109the power of 2 by which the significant part will be multiplied. Thus 19110`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 19111is the same as `1.55e1'. 19112 19113 Unlike for floating-point numbers in the decimal notation the exponent 19114is always required in the hexadecimal notation. Otherwise the compiler 19115would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 19116could mean `1.0f' or `1.9375' since `f' is also the extension for 19117floating-point constants of type `float'. 19118 19119 19120File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions 19121 191226.15 Fixed-Point Types 19123====================== 19124 19125As an extension, the GNU C compiler supports fixed-point types as 19126defined in the N1169 draft of ISO/IEC DTR 18037. Support for 19127fixed-point types in GCC will evolve as the draft technical report 19128changes. Calling conventions for any target might also change. Not 19129all targets support fixed-point types. 19130 19131 The fixed-point types are `short _Fract', `_Fract', `long _Fract', 19132`long long _Fract', `unsigned short _Fract', `unsigned _Fract', 19133`unsigned long _Fract', `unsigned long long _Fract', `_Sat short 19134_Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract', 19135`_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned 19136long _Fract', `_Sat unsigned long long _Fract', `short _Accum', 19137`_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum', 19138`unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum', 19139`_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long 19140_Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat 19141unsigned long _Accum', `_Sat unsigned long long _Accum'. 19142 19143 Fixed-point data values contain fractional and optional integral parts. 19144The format of fixed-point data varies and depends on the target machine. 19145 19146 Support for fixed-point types includes: 19147 * prefix and postfix increment and decrement operators (`++', `--') 19148 19149 * unary arithmetic operators (`+', `-', `!') 19150 19151 * binary arithmetic operators (`+', `-', `*', `/') 19152 19153 * binary shift operators (`<<', `>>') 19154 19155 * relational operators (`<', `<=', `>=', `>') 19156 19157 * equality operators (`==', `!=') 19158 19159 * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=') 19160 19161 * conversions to and from integer, floating-point, or fixed-point 19162 types 19163 19164 Use a suffix in a fixed-point literal constant: 19165 * `hr' or `HR' for `short _Fract' and `_Sat short _Fract' 19166 19167 * `r' or `R' for `_Fract' and `_Sat _Fract' 19168 19169 * `lr' or `LR' for `long _Fract' and `_Sat long _Fract' 19170 19171 * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract' 19172 19173 * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned 19174 short _Fract' 19175 19176 * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract' 19177 19178 * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long 19179 _Fract' 19180 19181 * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat 19182 unsigned long long _Fract' 19183 19184 * `hk' or `HK' for `short _Accum' and `_Sat short _Accum' 19185 19186 * `k' or `K' for `_Accum' and `_Sat _Accum' 19187 19188 * `lk' or `LK' for `long _Accum' and `_Sat long _Accum' 19189 19190 * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum' 19191 19192 * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned 19193 short _Accum' 19194 19195 * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum' 19196 19197 * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long 19198 _Accum' 19199 19200 * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat 19201 unsigned long long _Accum' 19202 19203 GCC support of fixed-point types as specified by the draft technical 19204report is incomplete: 19205 19206 * Pragmas to control overflow and rounding behaviors are not 19207 implemented. 19208 19209 Fixed-point types are supported by the DWARF2 debug information format. 19210 19211 19212File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions 19213 192146.16 Named address spaces 19215========================= 19216 19217As an extension, the GNU C compiler supports named address spaces as 19218defined in the N1275 draft of ISO/IEC DTR 18037. Support for named 19219address spaces in GCC will evolve as the draft technical report changes. 19220Calling conventions for any target might also change. At present, only 19221the SPU and M32C targets support other address spaces. On the SPU 19222target, for example, variables may be declared as belonging to another 19223address space by qualifying the type with the `__ea' address space 19224identifier: 19225 19226 extern int __ea i; 19227 19228 When the variable `i' is accessed, the compiler will generate special 19229code to access this variable. It may use runtime library support, or 19230generate special machine instructions to access that address space. 19231 19232 The `__ea' identifier may be used exactly like any other C type 19233qualifier (e.g., `const' or `volatile'). See the N1275 document for 19234more details. 19235 19236 On the M32C target, with the R8C and M16C cpu variants, variables 19237qualified with `__far' are accessed using 32-bit addresses in order to 19238access memory beyond the first 64k bytes. If `__far' is used with the 19239M32CM or M32C cpu variants, it has no effect. 19240 19241 19242File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Named Address Spaces, Up: C Extensions 19243 192446.17 Arrays of Length Zero 19245========================== 19246 19247Zero-length arrays are allowed in GNU C. They are very useful as the 19248last element of a structure which is really a header for a 19249variable-length object: 19250 19251 struct line { 19252 int length; 19253 char contents[0]; 19254 }; 19255 19256 struct line *thisline = (struct line *) 19257 malloc (sizeof (struct line) + this_length); 19258 thisline->length = this_length; 19259 19260 In ISO C90, you would have to give `contents' a length of 1, which 19261means either you waste space or complicate the argument to `malloc'. 19262 19263 In ISO C99, you would use a "flexible array member", which is slightly 19264different in syntax and semantics: 19265 19266 * Flexible array members are written as `contents[]' without the `0'. 19267 19268 * Flexible array members have incomplete type, and so the `sizeof' 19269 operator may not be applied. As a quirk of the original 19270 implementation of zero-length arrays, `sizeof' evaluates to zero. 19271 19272 * Flexible array members may only appear as the last member of a 19273 `struct' that is otherwise non-empty. 19274 19275 * A structure containing a flexible array member, or a union 19276 containing such a structure (possibly recursively), may not be a 19277 member of a structure or an element of an array. (However, these 19278 uses are permitted by GCC as extensions.) 19279 19280 GCC versions before 3.0 allowed zero-length arrays to be statically 19281initialized, as if they were flexible arrays. In addition to those 19282cases that were useful, it also allowed initializations in situations 19283that would corrupt later data. Non-empty initialization of zero-length 19284arrays is now treated like any case where there are more initializer 19285elements than the array holds, in that a suitable warning about "excess 19286elements in array" is given, and the excess elements (all of them, in 19287this case) are ignored. 19288 19289 Instead GCC allows static initialization of flexible array members. 19290This is equivalent to defining a new structure containing the original 19291structure followed by an array of sufficient size to contain the data. 19292I.e. in the following, `f1' is constructed as if it were declared like 19293`f2'. 19294 19295 struct f1 { 19296 int x; int y[]; 19297 } f1 = { 1, { 2, 3, 4 } }; 19298 19299 struct f2 { 19300 struct f1 f1; int data[3]; 19301 } f2 = { { 1 }, { 2, 3, 4 } }; 19302 19303The convenience of this extension is that `f1' has the desired type, 19304eliminating the need to consistently refer to `f2.f1'. 19305 19306 This has symmetry with normal static arrays, in that an array of 19307unknown size is also written with `[]'. 19308 19309 Of course, this extension only makes sense if the extra data comes at 19310the end of a top-level object, as otherwise we would be overwriting 19311data at subsequent offsets. To avoid undue complication and confusion 19312with initialization of deeply nested arrays, we simply disallow any 19313non-empty initialization except when the structure is the top-level 19314object. For example: 19315 19316 struct foo { int x; int y[]; }; 19317 struct bar { struct foo z; }; 19318 19319 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 19320 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 19321 struct bar c = { { 1, { } } }; // Valid. 19322 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 19323 19324 19325File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions 19326 193276.18 Structures With No Members 19328=============================== 19329 19330GCC permits a C structure to have no members: 19331 19332 struct empty { 19333 }; 19334 19335 The structure will have size zero. In C++, empty structures are part 19336of the language. G++ treats empty structures as if they had a single 19337member of type `char'. 19338 19339 19340File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions 19341 193426.19 Arrays of Variable Length 19343============================== 19344 19345Variable-length automatic arrays are allowed in ISO C99, and as an 19346extension GCC accepts them in C90 mode and in C++. These arrays are 19347declared like any other automatic arrays, but with a length that is not 19348a constant expression. The storage is allocated at the point of 19349declaration and deallocated when the brace-level is exited. For 19350example: 19351 19352 FILE * 19353 concat_fopen (char *s1, char *s2, char *mode) 19354 { 19355 char str[strlen (s1) + strlen (s2) + 1]; 19356 strcpy (str, s1); 19357 strcat (str, s2); 19358 return fopen (str, mode); 19359 } 19360 19361 Jumping or breaking out of the scope of the array name deallocates the 19362storage. Jumping into the scope is not allowed; you get an error 19363message for it. 19364 19365 You can use the function `alloca' to get an effect much like 19366variable-length arrays. The function `alloca' is available in many 19367other C implementations (but not in all). On the other hand, 19368variable-length arrays are more elegant. 19369 19370 There are other differences between these two methods. Space allocated 19371with `alloca' exists until the containing _function_ returns. The 19372space for a variable-length array is deallocated as soon as the array 19373name's scope ends. (If you use both variable-length arrays and 19374`alloca' in the same function, deallocation of a variable-length array 19375will also deallocate anything more recently allocated with `alloca'.) 19376 19377 You can also use variable-length arrays as arguments to functions: 19378 19379 struct entry 19380 tester (int len, char data[len][len]) 19381 { 19382 /* ... */ 19383 } 19384 19385 The length of an array is computed once when the storage is allocated 19386and is remembered for the scope of the array in case you access it with 19387`sizeof'. 19388 19389 If you want to pass the array first and the length afterward, you can 19390use a forward declaration in the parameter list--another GNU extension. 19391 19392 struct entry 19393 tester (int len; char data[len][len], int len) 19394 { 19395 /* ... */ 19396 } 19397 19398 The `int len' before the semicolon is a "parameter forward 19399declaration", and it serves the purpose of making the name `len' known 19400when the declaration of `data' is parsed. 19401 19402 You can write any number of such parameter forward declarations in the 19403parameter list. They can be separated by commas or semicolons, but the 19404last one must end with a semicolon, which is followed by the "real" 19405parameter declarations. Each forward declaration must match a "real" 19406declaration in parameter name and data type. ISO C99 does not support 19407parameter forward declarations. 19408 19409 19410File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions 19411 194126.20 Macros with a Variable Number of Arguments. 19413================================================ 19414 19415In the ISO C standard of 1999, a macro can be declared to accept a 19416variable number of arguments much as a function can. The syntax for 19417defining the macro is similar to that of a function. Here is an 19418example: 19419 19420 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 19421 19422 Here `...' is a "variable argument". In the invocation of such a 19423macro, it represents the zero or more tokens until the closing 19424parenthesis that ends the invocation, including any commas. This set of 19425tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 19426it appears. See the CPP manual for more information. 19427 19428 GCC has long supported variadic macros, and used a different syntax 19429that allowed you to give a name to the variable arguments just like any 19430other argument. Here is an example: 19431 19432 #define debug(format, args...) fprintf (stderr, format, args) 19433 19434 This is in all ways equivalent to the ISO C example above, but arguably 19435more readable and descriptive. 19436 19437 GNU CPP has two further variadic macro extensions, and permits them to 19438be used with either of the above forms of macro definition. 19439 19440 In standard C, you are not allowed to leave the variable argument out 19441entirely; but you are allowed to pass an empty argument. For example, 19442this invocation is invalid in ISO C, because there is no comma after 19443the string: 19444 19445 debug ("A message") 19446 19447 GNU CPP permits you to completely omit the variable arguments in this 19448way. In the above examples, the compiler would complain, though since 19449the expansion of the macro still has the extra comma after the format 19450string. 19451 19452 To help solve this problem, CPP behaves specially for variable 19453arguments used with the token paste operator, `##'. If instead you 19454write 19455 19456 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 19457 19458 and if the variable arguments are omitted or empty, the `##' operator 19459causes the preprocessor to remove the comma before it. If you do 19460provide some variable arguments in your macro invocation, GNU CPP does 19461not complain about the paste operation and instead places the variable 19462arguments after the comma. Just like any other pasted macro argument, 19463these arguments are not macro expanded. 19464 19465 19466File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 19467 194686.21 Slightly Looser Rules for Escaped Newlines 19469=============================================== 19470 19471Recently, the preprocessor has relaxed its treatment of escaped 19472newlines. Previously, the newline had to immediately follow a 19473backslash. The current implementation allows whitespace in the form of 19474spaces, horizontal and vertical tabs, and form feeds between the 19475backslash and the subsequent newline. The preprocessor issues a 19476warning, but treats it as a valid escaped newline and combines the two 19477lines to form a single logical line. This works within comments and 19478tokens, as well as between tokens. Comments are _not_ treated as 19479whitespace for the purposes of this relaxation, since they have not yet 19480been replaced with spaces. 19481 19482 19483File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 19484 194856.22 Non-Lvalue Arrays May Have Subscripts 19486========================================== 19487 19488In ISO C99, arrays that are not lvalues still decay to pointers, and 19489may be subscripted, although they may not be modified or used after the 19490next sequence point and the unary `&' operator may not be applied to 19491them. As an extension, GCC allows such arrays to be subscripted in C90 19492mode, though otherwise they do not decay to pointers outside C99 mode. 19493For example, this is valid in GNU C though not valid in C90: 19494 19495 struct foo {int a[4];}; 19496 19497 struct foo f(); 19498 19499 bar (int index) 19500 { 19501 return f().a[index]; 19502 } 19503 19504 19505File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 19506 195076.23 Arithmetic on `void'- and Function-Pointers 19508================================================ 19509 19510In GNU C, addition and subtraction operations are supported on pointers 19511to `void' and on pointers to functions. This is done by treating the 19512size of a `void' or of a function as 1. 19513 19514 A consequence of this is that `sizeof' is also allowed on `void' and 19515on function types, and returns 1. 19516 19517 The option `-Wpointer-arith' requests a warning if these extensions 19518are used. 19519 19520 19521File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 19522 195236.24 Non-Constant Initializers 19524============================== 19525 19526As in standard C++ and ISO C99, the elements of an aggregate 19527initializer for an automatic variable are not required to be constant 19528expressions in GNU C. Here is an example of an initializer with 19529run-time varying elements: 19530 19531 foo (float f, float g) 19532 { 19533 float beat_freqs[2] = { f-g, f+g }; 19534 /* ... */ 19535 } 19536 19537 19538File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 19539 195406.25 Compound Literals 19541====================== 19542 19543ISO C99 supports compound literals. A compound literal looks like a 19544cast containing an initializer. Its value is an object of the type 19545specified in the cast, containing the elements specified in the 19546initializer; it is an lvalue. As an extension, GCC supports compound 19547literals in C90 mode and in C++. 19548 19549 Usually, the specified type is a structure. Assume that `struct foo' 19550and `structure' are declared as shown: 19551 19552 struct foo {int a; char b[2];} structure; 19553 19554Here is an example of constructing a `struct foo' with a compound 19555literal: 19556 19557 structure = ((struct foo) {x + y, 'a', 0}); 19558 19559This is equivalent to writing the following: 19560 19561 { 19562 struct foo temp = {x + y, 'a', 0}; 19563 structure = temp; 19564 } 19565 19566 You can also construct an array. If all the elements of the compound 19567literal are (made up of) simple constant expressions, suitable for use 19568in initializers of objects of static storage duration, then the compound 19569literal can be coerced to a pointer to its first element and used in 19570such an initializer, as shown here: 19571 19572 char **foo = (char *[]) { "x", "y", "z" }; 19573 19574 Compound literals for scalar types and union types are is also 19575allowed, but then the compound literal is equivalent to a cast. 19576 19577 As a GNU extension, GCC allows initialization of objects with static 19578storage duration by compound literals (which is not possible in ISO 19579C99, because the initializer is not a constant). It is handled as if 19580the object was initialized only with the bracket enclosed list if the 19581types of the compound literal and the object match. The initializer 19582list of the compound literal must be constant. If the object being 19583initialized has array type of unknown size, the size is determined by 19584compound literal size. 19585 19586 static struct foo x = (struct foo) {1, 'a', 'b'}; 19587 static int y[] = (int []) {1, 2, 3}; 19588 static int z[] = (int [3]) {1}; 19589 19590The above lines are equivalent to the following: 19591 static struct foo x = {1, 'a', 'b'}; 19592 static int y[] = {1, 2, 3}; 19593 static int z[] = {1, 0, 0}; 19594 19595 19596File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions 19597 195986.26 Designated Initializers 19599============================ 19600 19601Standard C90 requires the elements of an initializer to appear in a 19602fixed order, the same as the order of the elements in the array or 19603structure being initialized. 19604 19605 In ISO C99 you can give the elements in any order, specifying the array 19606indices or structure field names they apply to, and GNU C allows this as 19607an extension in C90 mode as well. This extension is not implemented in 19608GNU C++. 19609 19610 To specify an array index, write `[INDEX] =' before the element value. 19611For example, 19612 19613 int a[6] = { [4] = 29, [2] = 15 }; 19614 19615is equivalent to 19616 19617 int a[6] = { 0, 0, 15, 0, 29, 0 }; 19618 19619The index values must be constant expressions, even if the array being 19620initialized is automatic. 19621 19622 An alternative syntax for this which has been obsolete since GCC 2.5 19623but GCC still accepts is to write `[INDEX]' before the element value, 19624with no `='. 19625 19626 To initialize a range of elements to the same value, write `[FIRST ... 19627LAST] = VALUE'. This is a GNU extension. For example, 19628 19629 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 19630 19631If the value in it has side-effects, the side-effects will happen only 19632once, not for each initialized field by the range initializer. 19633 19634Note that the length of the array is the highest value specified plus 19635one. 19636 19637 In a structure initializer, specify the name of a field to initialize 19638with `.FIELDNAME =' before the element value. For example, given the 19639following structure, 19640 19641 struct point { int x, y; }; 19642 19643the following initialization 19644 19645 struct point p = { .y = yvalue, .x = xvalue }; 19646 19647is equivalent to 19648 19649 struct point p = { xvalue, yvalue }; 19650 19651 Another syntax which has the same meaning, obsolete since GCC 2.5, is 19652`FIELDNAME:', as shown here: 19653 19654 struct point p = { y: yvalue, x: xvalue }; 19655 19656 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 19657also use a designator (or the obsolete colon syntax) when initializing 19658a union, to specify which element of the union should be used. For 19659example, 19660 19661 union foo { int i; double d; }; 19662 19663 union foo f = { .d = 4 }; 19664 19665will convert 4 to a `double' to store it in the union using the second 19666element. By contrast, casting 4 to type `union foo' would store it 19667into the union as the integer `i', since it is an integer. (*Note Cast 19668to Union::.) 19669 19670 You can combine this technique of naming elements with ordinary C 19671initialization of successive elements. Each initializer element that 19672does not have a designator applies to the next consecutive element of 19673the array or structure. For example, 19674 19675 int a[6] = { [1] = v1, v2, [4] = v4 }; 19676 19677is equivalent to 19678 19679 int a[6] = { 0, v1, v2, 0, v4, 0 }; 19680 19681 Labeling the elements of an array initializer is especially useful 19682when the indices are characters or belong to an `enum' type. For 19683example: 19684 19685 int whitespace[256] 19686 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 19687 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 19688 19689 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 19690before an `=' to specify a nested subobject to initialize; the list is 19691taken relative to the subobject corresponding to the closest 19692surrounding brace pair. For example, with the `struct point' 19693declaration above: 19694 19695 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 19696 19697If the same field is initialized multiple times, it will have value from 19698the last initialization. If any such overridden initialization has 19699side-effect, it is unspecified whether the side-effect happens or not. 19700Currently, GCC will discard them and issue a warning. 19701 19702 19703File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions 19704 197056.27 Case Ranges 19706================ 19707 19708You can specify a range of consecutive values in a single `case' label, 19709like this: 19710 19711 case LOW ... HIGH: 19712 19713This has the same effect as the proper number of individual `case' 19714labels, one for each integer value from LOW to HIGH, inclusive. 19715 19716 This feature is especially useful for ranges of ASCII character codes: 19717 19718 case 'A' ... 'Z': 19719 19720 *Be careful:* Write spaces around the `...', for otherwise it may be 19721parsed wrong when you use it with integer values. For example, write 19722this: 19723 19724 case 1 ... 5: 19725 19726rather than this: 19727 19728 case 1...5: 19729 19730 19731File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions 19732 197336.28 Cast to a Union Type 19734========================= 19735 19736A cast to union type is similar to other casts, except that the type 19737specified is a union type. You can specify the type either with `union 19738TAG' or with a typedef name. A cast to union is actually a constructor 19739though, not a cast, and hence does not yield an lvalue like normal 19740casts. (*Note Compound Literals::.) 19741 19742 The types that may be cast to the union type are those of the members 19743of the union. Thus, given the following union and variables: 19744 19745 union foo { int i; double d; }; 19746 int x; 19747 double y; 19748 19749both `x' and `y' can be cast to type `union foo'. 19750 19751 Using the cast as the right-hand side of an assignment to a variable of 19752union type is equivalent to storing in a member of the union: 19753 19754 union foo u; 19755 /* ... */ 19756 u = (union foo) x == u.i = x 19757 u = (union foo) y == u.d = y 19758 19759 You can also use the union cast as a function argument: 19760 19761 void hack (union foo); 19762 /* ... */ 19763 hack ((union foo) x); 19764 19765 19766File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions 19767 197686.29 Mixed Declarations and Code 19769================================ 19770 19771ISO C99 and ISO C++ allow declarations and code to be freely mixed 19772within compound statements. As an extension, GCC also allows this in 19773C90 mode. For example, you could do: 19774 19775 int i; 19776 /* ... */ 19777 i++; 19778 int j = i + 2; 19779 19780 Each identifier is visible from where it is declared until the end of 19781the enclosing block. 19782 19783 19784File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 19785 197866.30 Declaring Attributes of Functions 19787====================================== 19788 19789In GNU C, you declare certain things about functions called in your 19790program which help the compiler optimize function calls and check your 19791code more carefully. 19792 19793 The keyword `__attribute__' allows you to specify special attributes 19794when making a declaration. This keyword is followed by an attribute 19795specification inside double parentheses. The following attributes are 19796currently defined for functions on all targets: `aligned', 19797`alloc_size', `noreturn', `returns_twice', `noinline', `noclone', 19798`always_inline', `flatten', `pure', `const', `nothrow', `sentinel', 19799`format', `format_arg', `no_instrument_function', `no_split_stack', 19800`section', `constructor', `destructor', `used', `unused', `deprecated', 19801`weak', `malloc', `alias', `ifunc', `warn_unused_result', `nonnull', 19802`gnu_inline', `externally_visible', `hot', `cold', `artificial', 19803`error' and `warning'. Several other attributes are defined for 19804functions on particular target systems. Other attributes, including 19805`section' are supported for variables declarations (*note Variable 19806Attributes::) and for types (*note Type Attributes::). 19807 19808 GCC plugins may provide their own attributes. 19809 19810 You may also specify attributes with `__' preceding and following each 19811keyword. This allows you to use them in header files without being 19812concerned about a possible macro of the same name. For example, you 19813may use `__noreturn__' instead of `noreturn'. 19814 19815 *Note Attribute Syntax::, for details of the exact syntax for using 19816attributes. 19817 19818`alias ("TARGET")' 19819 The `alias' attribute causes the declaration to be emitted as an 19820 alias for another symbol, which must be specified. For instance, 19821 19822 void __f () { /* Do something. */; } 19823 void f () __attribute__ ((weak, alias ("__f"))); 19824 19825 defines `f' to be a weak alias for `__f'. In C++, the mangled 19826 name for the target must be used. It is an error if `__f' is not 19827 defined in the same translation unit. 19828 19829 Not all target machines support this attribute. 19830 19831`aligned (ALIGNMENT)' 19832 This attribute specifies a minimum alignment for the function, 19833 measured in bytes. 19834 19835 You cannot use this attribute to decrease the alignment of a 19836 function, only to increase it. However, when you explicitly 19837 specify a function alignment this will override the effect of the 19838 `-falign-functions' (*note Optimize Options::) option for this 19839 function. 19840 19841 Note that the effectiveness of `aligned' attributes may be limited 19842 by inherent limitations in your linker. On many systems, the 19843 linker is only able to arrange for functions to be aligned up to a 19844 certain maximum alignment. (For some linkers, the maximum 19845 supported alignment may be very very small.) See your linker 19846 documentation for further information. 19847 19848 The `aligned' attribute can also be used for variables and fields 19849 (*note Variable Attributes::.) 19850 19851`alloc_size' 19852 The `alloc_size' attribute is used to tell the compiler that the 19853 function return value points to memory, where the size is given by 19854 one or two of the functions parameters. GCC uses this information 19855 to improve the correctness of `__builtin_object_size'. 19856 19857 The function parameter(s) denoting the allocated size are 19858 specified by one or two integer arguments supplied to the 19859 attribute. The allocated size is either the value of the single 19860 function argument specified or the product of the two function 19861 arguments specified. Argument numbering starts at one. 19862 19863 For instance, 19864 19865 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 19866 void my_realloc(void*, size_t) __attribute__((alloc_size(2))) 19867 19868 declares that my_calloc will return memory of the size given by 19869 the product of parameter 1 and 2 and that my_realloc will return 19870 memory of the size given by parameter 2. 19871 19872`always_inline' 19873 Generally, functions are not inlined unless optimization is 19874 specified. For functions declared inline, this attribute inlines 19875 the function even if no optimization level was specified. 19876 19877`gnu_inline' 19878 This attribute should be used with a function which is also 19879 declared with the `inline' keyword. It directs GCC to treat the 19880 function as if it were defined in gnu90 mode even when compiling 19881 in C99 or gnu99 mode. 19882 19883 If the function is declared `extern', then this definition of the 19884 function is used only for inlining. In no case is the function 19885 compiled as a standalone function, not even if you take its address 19886 explicitly. Such an address becomes an external reference, as if 19887 you had only declared the function, and had not defined it. This 19888 has almost the effect of a macro. The way to use this is to put a 19889 function definition in a header file with this attribute, and put 19890 another copy of the function, without `extern', in a library file. 19891 The definition in the header file will cause most calls to the 19892 function to be inlined. If any uses of the function remain, they 19893 will refer to the single copy in the library. Note that the two 19894 definitions of the functions need not be precisely the same, 19895 although if they do not have the same effect your program may 19896 behave oddly. 19897 19898 In C, if the function is neither `extern' nor `static', then the 19899 function is compiled as a standalone function, as well as being 19900 inlined where possible. 19901 19902 This is how GCC traditionally handled functions declared `inline'. 19903 Since ISO C99 specifies a different semantics for `inline', this 19904 function attribute is provided as a transition measure and as a 19905 useful feature in its own right. This attribute is available in 19906 GCC 4.1.3 and later. It is available if either of the 19907 preprocessor macros `__GNUC_GNU_INLINE__' or 19908 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 19909 As Fast As a Macro: Inline. 19910 19911 In C++, this attribute does not depend on `extern' in any way, but 19912 it still requires the `inline' keyword to enable its special 19913 behavior. 19914 19915`artificial' 19916 This attribute is useful for small inline wrappers which if 19917 possible should appear during debugging as a unit, depending on 19918 the debug info format it will either mean marking the function as 19919 artificial or using the caller location for all instructions 19920 within the inlined body. 19921 19922`bank_switch' 19923 When added to an interrupt handler with the M32C port, causes the 19924 prologue and epilogue to use bank switching to preserve the 19925 registers rather than saving them on the stack. 19926 19927`flatten' 19928 Generally, inlining into a function is limited. For a function 19929 marked with this attribute, every call inside this function will 19930 be inlined, if possible. Whether the function itself is 19931 considered for inlining depends on its size and the current 19932 inlining parameters. 19933 19934`error ("MESSAGE")' 19935 If this attribute is used on a function declaration and a call to 19936 such a function is not eliminated through dead code elimination or 19937 other optimizations, an error which will include MESSAGE will be 19938 diagnosed. This is useful for compile time checking, especially 19939 together with `__builtin_constant_p' and inline functions where 19940 checking the inline function arguments is not possible through 19941 `extern char [(condition) ? 1 : -1];' tricks. While it is 19942 possible to leave the function undefined and thus invoke a link 19943 failure, when using this attribute the problem will be diagnosed 19944 earlier and with exact location of the call even in presence of 19945 inline functions or when not emitting debugging information. 19946 19947`warning ("MESSAGE")' 19948 If this attribute is used on a function declaration and a call to 19949 such a function is not eliminated through dead code elimination or 19950 other optimizations, a warning which will include MESSAGE will be 19951 diagnosed. This is useful for compile time checking, especially 19952 together with `__builtin_constant_p' and inline functions. While 19953 it is possible to define the function with a message in 19954 `.gnu.warning*' section, when using this attribute the problem 19955 will be diagnosed earlier and with exact location of the call even 19956 in presence of inline functions or when not emitting debugging 19957 information. 19958 19959`cdecl' 19960 On the Intel 386, the `cdecl' attribute causes the compiler to 19961 assume that the calling function will pop off the stack space used 19962 to pass arguments. This is useful to override the effects of the 19963 `-mrtd' switch. 19964 19965`const' 19966 Many functions do not examine any values except their arguments, 19967 and have no effects except the return value. Basically this is 19968 just slightly more strict class than the `pure' attribute below, 19969 since function is not allowed to read global memory. 19970 19971 Note that a function that has pointer arguments and examines the 19972 data pointed to must _not_ be declared `const'. Likewise, a 19973 function that calls a non-`const' function usually must not be 19974 `const'. It does not make sense for a `const' function to return 19975 `void'. 19976 19977 The attribute `const' is not implemented in GCC versions earlier 19978 than 2.5. An alternative way to declare that a function has no 19979 side effects, which works in the current version and in some older 19980 versions, is as follows: 19981 19982 typedef int intfn (); 19983 19984 extern const intfn square; 19985 19986 This approach does not work in GNU C++ from 2.6.0 on, since the 19987 language specifies that the `const' must be attached to the return 19988 value. 19989 19990`constructor' 19991`destructor' 19992`constructor (PRIORITY)' 19993`destructor (PRIORITY)' 19994 The `constructor' attribute causes the function to be called 19995 automatically before execution enters `main ()'. Similarly, the 19996 `destructor' attribute causes the function to be called 19997 automatically after `main ()' has completed or `exit ()' has been 19998 called. Functions with these attributes are useful for 19999 initializing data that will be used implicitly during the 20000 execution of the program. 20001 20002 You may provide an optional integer priority to control the order 20003 in which constructor and destructor functions are run. A 20004 constructor with a smaller priority number runs before a 20005 constructor with a larger priority number; the opposite 20006 relationship holds for destructors. So, if you have a constructor 20007 that allocates a resource and a destructor that deallocates the 20008 same resource, both functions typically have the same priority. 20009 The priorities for constructor and destructor functions are the 20010 same as those specified for namespace-scope C++ objects (*note C++ 20011 Attributes::). 20012 20013 These attributes are not currently implemented for Objective-C. 20014 20015`deprecated' 20016`deprecated (MSG)' 20017 The `deprecated' attribute results in a warning if the function is 20018 used anywhere in the source file. This is useful when identifying 20019 functions that are expected to be removed in a future version of a 20020 program. The warning also includes the location of the declaration 20021 of the deprecated function, to enable users to easily find further 20022 information about why the function is deprecated, or what they 20023 should do instead. Note that the warnings only occurs for uses: 20024 20025 int old_fn () __attribute__ ((deprecated)); 20026 int old_fn (); 20027 int (*fn_ptr)() = old_fn; 20028 20029 results in a warning on line 3 but not line 2. The optional msg 20030 argument, which must be a string, will be printed in the warning if 20031 present. 20032 20033 The `deprecated' attribute can also be used for variables and 20034 types (*note Variable Attributes::, *note Type Attributes::.) 20035 20036`disinterrupt' 20037 On MeP targets, this attribute causes the compiler to emit 20038 instructions to disable interrupts for the duration of the given 20039 function. 20040 20041`dllexport' 20042 On Microsoft Windows targets and Symbian OS targets the 20043 `dllexport' attribute causes the compiler to provide a global 20044 pointer to a pointer in a DLL, so that it can be referenced with 20045 the `dllimport' attribute. On Microsoft Windows targets, the 20046 pointer name is formed by combining `_imp__' and the function or 20047 variable name. 20048 20049 You can use `__declspec(dllexport)' as a synonym for 20050 `__attribute__ ((dllexport))' for compatibility with other 20051 compilers. 20052 20053 On systems that support the `visibility' attribute, this attribute 20054 also implies "default" visibility. It is an error to explicitly 20055 specify any other visibility. 20056 20057 In previous versions of GCC, the `dllexport' attribute was ignored 20058 for inlined functions, unless the `-fkeep-inline-functions' flag 20059 had been used. The default behaviour now is to emit all 20060 dllexported inline functions; however, this can cause object 20061 file-size bloat, in which case the old behaviour can be restored 20062 by using `-fno-keep-inline-dllexport'. 20063 20064 The attribute is also ignored for undefined symbols. 20065 20066 When applied to C++ classes, the attribute marks defined 20067 non-inlined member functions and static data members as exports. 20068 Static consts initialized in-class are not marked unless they are 20069 also defined out-of-class. 20070 20071 For Microsoft Windows targets there are alternative methods for 20072 including the symbol in the DLL's export table such as using a 20073 `.def' file with an `EXPORTS' section or, with GNU ld, using the 20074 `--export-all' linker flag. 20075 20076`dllimport' 20077 On Microsoft Windows and Symbian OS targets, the `dllimport' 20078 attribute causes the compiler to reference a function or variable 20079 via a global pointer to a pointer that is set up by the DLL 20080 exporting the symbol. The attribute implies `extern'. On 20081 Microsoft Windows targets, the pointer name is formed by combining 20082 `_imp__' and the function or variable name. 20083 20084 You can use `__declspec(dllimport)' as a synonym for 20085 `__attribute__ ((dllimport))' for compatibility with other 20086 compilers. 20087 20088 On systems that support the `visibility' attribute, this attribute 20089 also implies "default" visibility. It is an error to explicitly 20090 specify any other visibility. 20091 20092 Currently, the attribute is ignored for inlined functions. If the 20093 attribute is applied to a symbol _definition_, an error is 20094 reported. If a symbol previously declared `dllimport' is later 20095 defined, the attribute is ignored in subsequent references, and a 20096 warning is emitted. The attribute is also overridden by a 20097 subsequent declaration as `dllexport'. 20098 20099 When applied to C++ classes, the attribute marks non-inlined 20100 member functions and static data members as imports. However, the 20101 attribute is ignored for virtual methods to allow creation of 20102 vtables using thunks. 20103 20104 On the SH Symbian OS target the `dllimport' attribute also has 20105 another affect--it can cause the vtable and run-time type 20106 information for a class to be exported. This happens when the 20107 class has a dllimport'ed constructor or a non-inline, non-pure 20108 virtual function and, for either of those two conditions, the 20109 class also has an inline constructor or destructor and has a key 20110 function that is defined in the current translation unit. 20111 20112 For Microsoft Windows based targets the use of the `dllimport' 20113 attribute on functions is not necessary, but provides a small 20114 performance benefit by eliminating a thunk in the DLL. The use of 20115 the `dllimport' attribute on imported variables was required on 20116 older versions of the GNU linker, but can now be avoided by 20117 passing the `--enable-auto-import' switch to the GNU linker. As 20118 with functions, using the attribute for a variable eliminates a 20119 thunk in the DLL. 20120 20121 One drawback to using this attribute is that a pointer to a 20122 _variable_ marked as `dllimport' cannot be used as a constant 20123 address. However, a pointer to a _function_ with the `dllimport' 20124 attribute can be used as a constant initializer; in this case, the 20125 address of a stub function in the import lib is referenced. On 20126 Microsoft Windows targets, the attribute can be disabled for 20127 functions by setting the `-mnop-fun-dllimport' flag. 20128 20129`eightbit_data' 20130 Use this attribute on the H8/300, H8/300H, and H8S to indicate 20131 that the specified variable should be placed into the eight bit 20132 data section. The compiler will generate more efficient code for 20133 certain operations on data in the eight bit data area. Note the 20134 eight bit data area is limited to 256 bytes of data. 20135 20136 You must use GAS and GLD from GNU binutils version 2.7 or later for 20137 this attribute to work correctly. 20138 20139`exception_handler' 20140 Use this attribute on the Blackfin to indicate that the specified 20141 function is an exception handler. The compiler will generate 20142 function entry and exit sequences suitable for use in an exception 20143 handler when this attribute is present. 20144 20145`externally_visible' 20146 This attribute, attached to a global variable or function, 20147 nullifies the effect of the `-fwhole-program' command-line option, 20148 so the object remains visible outside the current compilation 20149 unit. If `-fwhole-program' is used together with `-flto' and 20150 `gold' is used as the linker plugin, `externally_visible' 20151 attributes are automatically added to functions (not variable yet 20152 due to a current `gold' issue) that are accessed outside of LTO 20153 objects according to resolution file produced by `gold'. For 20154 other linkers that cannot generate resolution file, explicit 20155 `externally_visible' attributes are still necessary. 20156 20157`far' 20158 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 20159 use a calling convention that takes care of switching memory banks 20160 when entering and leaving a function. This calling convention is 20161 also the default when using the `-mlong-calls' option. 20162 20163 On 68HC12 the compiler will use the `call' and `rtc' instructions 20164 to call and return from a function. 20165 20166 On 68HC11 the compiler will generate a sequence of instructions to 20167 invoke a board-specific routine to switch the memory bank and call 20168 the real function. The board-specific routine simulates a `call'. 20169 At the end of a function, it will jump to a board-specific routine 20170 instead of using `rts'. The board-specific return routine 20171 simulates the `rtc'. 20172 20173 On MeP targets this causes the compiler to use a calling convention 20174 which assumes the called function is too far away for the built-in 20175 addressing modes. 20176 20177`fast_interrupt' 20178 Use this attribute on the M32C and RX ports to indicate that the 20179 specified function is a fast interrupt handler. This is just like 20180 the `interrupt' attribute, except that `freit' is used to return 20181 instead of `reit'. 20182 20183`fastcall' 20184 On the Intel 386, the `fastcall' attribute causes the compiler to 20185 pass the first argument (if of integral type) in the register ECX 20186 and the second argument (if of integral type) in the register EDX. 20187 Subsequent and other typed arguments are passed on the stack. The 20188 called function will pop the arguments off the stack. If the 20189 number of arguments is variable all arguments are pushed on the 20190 stack. 20191 20192`thiscall' 20193 On the Intel 386, the `thiscall' attribute causes the compiler to 20194 pass the first argument (if of integral type) in the register ECX. 20195 Subsequent and other typed arguments are passed on the stack. The 20196 called function will pop the arguments off the stack. If the 20197 number of arguments is variable all arguments are pushed on the 20198 stack. The `thiscall' attribute is intended for C++ non-static 20199 member functions. As gcc extension this calling convention can be 20200 used for C-functions and for static member methods. 20201 20202`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 20203 The `format' attribute specifies that a function takes `printf', 20204 `scanf', `strftime' or `strfmon' style arguments which should be 20205 type-checked against a format string. For example, the 20206 declaration: 20207 20208 extern int 20209 my_printf (void *my_object, const char *my_format, ...) 20210 __attribute__ ((format (printf, 2, 3))); 20211 20212 causes the compiler to check the arguments in calls to `my_printf' 20213 for consistency with the `printf' style format string argument 20214 `my_format'. 20215 20216 The parameter ARCHETYPE determines how the format string is 20217 interpreted, and should be `printf', `scanf', `strftime', 20218 `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'. (You can 20219 also use `__printf__', `__scanf__', `__strftime__' or 20220 `__strfmon__'.) On MinGW targets, `ms_printf', `ms_scanf', and 20221 `ms_strftime' are also present. ARCHTYPE values such as `printf' 20222 refer to the formats accepted by the system's C run-time library, 20223 while `gnu_' values always refer to the formats accepted by the 20224 GNU C Library. On Microsoft Windows targets, `ms_' values refer 20225 to the formats accepted by the `msvcrt.dll' library. The 20226 parameter STRING-INDEX specifies which argument is the format 20227 string argument (starting from 1), while FIRST-TO-CHECK is the 20228 number of the first argument to check against the format string. 20229 For functions where the arguments are not available to be checked 20230 (such as `vprintf'), specify the third parameter as zero. In this 20231 case the compiler only checks the format string for consistency. 20232 For `strftime' formats, the third parameter is required to be zero. 20233 Since non-static C++ methods have an implicit `this' argument, the 20234 arguments of such methods should be counted from two, not one, when 20235 giving values for STRING-INDEX and FIRST-TO-CHECK. 20236 20237 In the example above, the format string (`my_format') is the second 20238 argument of the function `my_print', and the arguments to check 20239 start with the third argument, so the correct parameters for the 20240 format attribute are 2 and 3. 20241 20242 The `format' attribute allows you to identify your own functions 20243 which take format strings as arguments, so that GCC can check the 20244 calls to these functions for errors. The compiler always (unless 20245 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 20246 standard library functions `printf', `fprintf', `sprintf', 20247 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 20248 `vsprintf' whenever such warnings are requested (using 20249 `-Wformat'), so there is no need to modify the header file 20250 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 20251 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 20252 strictly conforming C standard modes, the X/Open function 20253 `strfmon' is also checked as are `printf_unlocked' and 20254 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 20255 Dialect Options. 20256 20257 For Objective-C dialects, `NSString' (or `__NSString__') is 20258 recognized in the same context. Declarations including these 20259 format attributes will be parsed for correct syntax, however the 20260 result of checking of such format strings is not yet defined, and 20261 will not be carried out by this version of the compiler. 20262 20263 The target may also provide additional types of format checks. 20264 *Note Format Checks Specific to Particular Target Machines: Target 20265 Format Checks. 20266 20267`format_arg (STRING-INDEX)' 20268 The `format_arg' attribute specifies that a function takes a format 20269 string for a `printf', `scanf', `strftime' or `strfmon' style 20270 function and modifies it (for example, to translate it into 20271 another language), so the result can be passed to a `printf', 20272 `scanf', `strftime' or `strfmon' style function (with the 20273 remaining arguments to the format function the same as they would 20274 have been for the unmodified string). For example, the 20275 declaration: 20276 20277 extern char * 20278 my_dgettext (char *my_domain, const char *my_format) 20279 __attribute__ ((format_arg (2))); 20280 20281 causes the compiler to check the arguments in calls to a `printf', 20282 `scanf', `strftime' or `strfmon' type function, whose format 20283 string argument is a call to the `my_dgettext' function, for 20284 consistency with the format string argument `my_format'. If the 20285 `format_arg' attribute had not been specified, all the compiler 20286 could tell in such calls to format functions would be that the 20287 format string argument is not constant; this would generate a 20288 warning when `-Wformat-nonliteral' is used, but the calls could 20289 not be checked without the attribute. 20290 20291 The parameter STRING-INDEX specifies which argument is the format 20292 string argument (starting from one). Since non-static C++ methods 20293 have an implicit `this' argument, the arguments of such methods 20294 should be counted from two. 20295 20296 The `format-arg' attribute allows you to identify your own 20297 functions which modify format strings, so that GCC can check the 20298 calls to `printf', `scanf', `strftime' or `strfmon' type function 20299 whose operands are a call to one of your own function. The 20300 compiler always treats `gettext', `dgettext', and `dcgettext' in 20301 this manner except when strict ISO C support is requested by 20302 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 20303 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 20304 Dialect Options. 20305 20306 For Objective-C dialects, the `format-arg' attribute may refer to 20307 an `NSString' reference for compatibility with the `format' 20308 attribute above. 20309 20310 The target may also allow additional types in `format-arg' 20311 attributes. *Note Format Checks Specific to Particular Target 20312 Machines: Target Format Checks. 20313 20314`function_vector' 20315 Use this attribute on the H8/300, H8/300H, and H8S to indicate 20316 that the specified function should be called through the function 20317 vector. Calling a function through the function vector will 20318 reduce code size, however; the function vector has a limited size 20319 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 20320 and H8S) and shares space with the interrupt vector. 20321 20322 In SH2A target, this attribute declares a function to be called 20323 using the TBR relative addressing mode. The argument to this 20324 attribute is the entry number of the same function in a vector 20325 table containing all the TBR relative addressable functions. For 20326 the successful jump, register TBR should contain the start address 20327 of this TBR relative vector table. In the startup routine of the 20328 user application, user needs to care of this TBR register 20329 initialization. The TBR relative vector table can have at max 256 20330 function entries. The jumps to these functions will be generated 20331 using a SH2A specific, non delayed branch instruction JSR/N 20332 @(disp8,TBR). You must use GAS and GLD from GNU binutils version 20333 2.7 or later for this attribute to work correctly. 20334 20335 Please refer the example of M16C target, to see the use of this 20336 attribute while declaring a function, 20337 20338 In an application, for a function being called once, this 20339 attribute will save at least 8 bytes of code; and if other 20340 successive calls are being made to the same function, it will save 20341 2 bytes of code per each of these calls. 20342 20343 On M16C/M32C targets, the `function_vector' attribute declares a 20344 special page subroutine call function. Use of this attribute 20345 reduces the code size by 2 bytes for each call generated to the 20346 subroutine. The argument to the attribute is the vector number 20347 entry from the special page vector table which contains the 16 20348 low-order bits of the subroutine's entry address. Each vector 20349 table has special page number (18 to 255) which are used in `jsrs' 20350 instruction. Jump addresses of the routines are generated by 20351 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 20352 M32C targets), to the 2 byte addresses set in the vector table. 20353 Therefore you need to ensure that all the special page vector 20354 routines should get mapped within the address range 0x0F0000 to 20355 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 20356 20357 In the following example 2 bytes will be saved for each call to 20358 function `foo'. 20359 20360 void foo (void) __attribute__((function_vector(0x18))); 20361 void foo (void) 20362 { 20363 } 20364 20365 void bar (void) 20366 { 20367 foo(); 20368 } 20369 20370 If functions are defined in one file and are called in another 20371 file, then be sure to write this declaration in both files. 20372 20373 This attribute is ignored for R8C target. 20374 20375`interrupt' 20376 Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MeP, 20377 MIPS, RX and Xstormy16 ports to indicate that the specified 20378 function is an interrupt handler. The compiler will generate 20379 function entry and exit sequences suitable for use in an interrupt 20380 handler when this attribute is present. 20381 20382 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 20383 MicroBlaze, and SH processors can be specified via the 20384 `interrupt_handler' attribute. 20385 20386 Note, on the AVR, interrupts will be enabled inside the function. 20387 20388 Note, for the ARM, you can specify the kind of interrupt to be 20389 handled by adding an optional parameter to the interrupt attribute 20390 like this: 20391 20392 void f () __attribute__ ((interrupt ("IRQ"))); 20393 20394 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT 20395 and UNDEF. 20396 20397 On ARMv7-M the interrupt type is ignored, and the attribute means 20398 the function may be called with a word aligned stack pointer. 20399 20400 On MIPS targets, you can use the following attributes to modify 20401 the behavior of an interrupt handler: 20402 `use_shadow_register_set' 20403 Assume that the handler uses a shadow register set, instead of 20404 the main general-purpose registers. 20405 20406 `keep_interrupts_masked' 20407 Keep interrupts masked for the whole function. Without this 20408 attribute, GCC tries to reenable interrupts for as much of 20409 the function as it can. 20410 20411 `use_debug_exception_return' 20412 Return using the `deret' instruction. Interrupt handlers 20413 that don't have this attribute return using `eret' instead. 20414 20415 You can use any combination of these attributes, as shown below: 20416 void __attribute__ ((interrupt)) v0 (); 20417 void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); 20418 void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); 20419 void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); 20420 void __attribute__ ((interrupt, use_shadow_register_set, 20421 keep_interrupts_masked)) v4 (); 20422 void __attribute__ ((interrupt, use_shadow_register_set, 20423 use_debug_exception_return)) v5 (); 20424 void __attribute__ ((interrupt, keep_interrupts_masked, 20425 use_debug_exception_return)) v6 (); 20426 void __attribute__ ((interrupt, use_shadow_register_set, 20427 keep_interrupts_masked, 20428 use_debug_exception_return)) v7 (); 20429 20430`ifunc ("RESOLVER")' 20431 The `ifunc' attribute is used to mark a function as an indirect 20432 function using the STT_GNU_IFUNC symbol type extension to the ELF 20433 standard. This allows the resolution of the symbol value to be 20434 determined dynamically at load time, and an optimized version of 20435 the routine can be selected for the particular processor or other 20436 system characteristics determined then. To use this attribute, 20437 first define the implementation functions available, and a 20438 resolver function that returns a pointer to the selected 20439 implementation function. The implementation functions' 20440 declarations must match the API of the function being implemented, 20441 the resolver's declaration is be a function returning pointer to 20442 void function returning void: 20443 20444 void *my_memcpy (void *dst, const void *src, size_t len) 20445 { 20446 ... 20447 } 20448 20449 static void (*resolve_memcpy (void)) (void) 20450 { 20451 return my_memcpy; // we'll just always select this routine 20452 } 20453 20454 The exported header file declaring the function the user calls 20455 would contain: 20456 20457 extern void *memcpy (void *, const void *, size_t); 20458 20459 allowing the user to call this as a regular function, unaware of 20460 the implementation. Finally, the indirect function needs to be 20461 defined in the same translation unit as the resolver function: 20462 20463 void *memcpy (void *, const void *, size_t) 20464 __attribute__ ((ifunc ("resolve_memcpy"))); 20465 20466 Indirect functions cannot be weak, and require a recent binutils 20467 (at least version 2.20.1), and GNU C library (at least version 20468 2.11.1). 20469 20470`interrupt_handler' 20471 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 20472 and SH to indicate that the specified function is an interrupt 20473 handler. The compiler will generate function entry and exit 20474 sequences suitable for use in an interrupt handler when this 20475 attribute is present. 20476 20477`interrupt_thread' 20478 Use this attribute on fido, a subarchitecture of the m68k, to 20479 indicate that the specified function is an interrupt handler that 20480 is designed to run as a thread. The compiler omits generate 20481 prologue/epilogue sequences and replaces the return instruction 20482 with a `sleep' instruction. This attribute is available only on 20483 fido. 20484 20485`isr' 20486 Use this attribute on ARM to write Interrupt Service Routines. 20487 This is an alias to the `interrupt' attribute above. 20488 20489`kspisusp' 20490 When used together with `interrupt_handler', `exception_handler' 20491 or `nmi_handler', code will be generated to load the stack pointer 20492 from the USP register in the function prologue. 20493 20494`l1_text' 20495 This attribute specifies a function to be placed into L1 20496 Instruction SRAM. The function will be put into a specific section 20497 named `.l1.text'. With `-mfdpic', function calls with a such 20498 function as the callee or caller will use inlined PLT. 20499 20500`l2' 20501 On the Blackfin, this attribute specifies a function to be placed 20502 into L2 SRAM. The function will be put into a specific section 20503 named `.l1.text'. With `-mfdpic', callers of such functions will 20504 use an inlined PLT. 20505 20506`leaf' 20507 Calls to external functions with this attribute must return to the 20508 current compilation unit only by return or by exception handling. 20509 In particular, leaf functions are not allowed to call callback 20510 function passed to it from the current compilation unit or 20511 directly call functions exported by the unit or longjmp into the 20512 unit. Leaf function might still call functions from other 20513 compilation units and thus they are not necessarily leaf in the 20514 sense that they contain no function calls at all. 20515 20516 The attribute is intended for library functions to improve 20517 dataflow analysis. The compiler takes the hint that any data not 20518 escaping the current compilation unit can not be used or modified 20519 by the leaf function. For example, the `sin' function is a leaf 20520 function, but `qsort' is not. 20521 20522 Note that leaf functions might invoke signals and signal handlers 20523 might be defined in the current compilation unit and use static 20524 variables. The only compliant way to write such a signal handler 20525 is to declare such variables `volatile'. 20526 20527 The attribute has no effect on functions defined within the 20528 current compilation unit. This is to allow easy merging of 20529 multiple compilation units into one, for example, by using the 20530 link time optimization. For this reason the attribute is not 20531 allowed on types to annotate indirect calls. 20532 20533`long_call/short_call' 20534 This attribute specifies how a particular function is called on 20535 ARM. Both attributes override the `-mlong-calls' (*note ARM 20536 Options::) command-line switch and `#pragma long_calls' settings. 20537 The `long_call' attribute indicates that the function might be far 20538 away from the call site and require a different (more expensive) 20539 calling sequence. The `short_call' attribute always places the 20540 offset to the function from the call site into the `BL' 20541 instruction directly. 20542 20543`longcall/shortcall' 20544 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 20545 indicates that the function might be far away from the call site 20546 and require a different (more expensive) calling sequence. The 20547 `shortcall' attribute indicates that the function is always close 20548 enough for the shorter calling sequence to be used. These 20549 attributes override both the `-mlongcall' switch and, on the 20550 RS/6000 and PowerPC, the `#pragma longcall' setting. 20551 20552 *Note RS/6000 and PowerPC Options::, for more information on 20553 whether long calls are necessary. 20554 20555`long_call/near/far' 20556 These attributes specify how a particular function is called on 20557 MIPS. The attributes override the `-mlong-calls' (*note MIPS 20558 Options::) command-line switch. The `long_call' and `far' 20559 attributes are synonyms, and cause the compiler to always call the 20560 function by first loading its address into a register, and then 20561 using the contents of that register. The `near' attribute has the 20562 opposite effect; it specifies that non-PIC calls should be made 20563 using the more efficient `jal' instruction. 20564 20565`malloc' 20566 The `malloc' attribute is used to tell the compiler that a function 20567 may be treated as if any non-`NULL' pointer it returns cannot 20568 alias any other pointer valid when the function returns. This 20569 will often improve optimization. Standard functions with this 20570 property include `malloc' and `calloc'. `realloc'-like functions 20571 have this property as long as the old pointer is never referred to 20572 (including comparing it to the new pointer) after the function 20573 returns a non-`NULL' value. 20574 20575`mips16/nomips16' 20576 On MIPS targets, you can use the `mips16' and `nomips16' function 20577 attributes to locally select or turn off MIPS16 code generation. 20578 A function with the `mips16' attribute is emitted as MIPS16 code, 20579 while MIPS16 code generation is disabled for functions with the 20580 `nomips16' attribute. These attributes override the `-mips16' and 20581 `-mno-mips16' options on the command line (*note MIPS Options::). 20582 20583 When compiling files containing mixed MIPS16 and non-MIPS16 code, 20584 the preprocessor symbol `__mips16' reflects the setting on the 20585 command line, not that within individual functions. Mixed MIPS16 20586 and non-MIPS16 code may interact badly with some GCC extensions 20587 such as `__builtin_apply' (*note Constructing Calls::). 20588 20589`model (MODEL-NAME)' 20590 On the M32R/D, use this attribute to set the addressability of an 20591 object, and of the code generated for a function. The identifier 20592 MODEL-NAME is one of `small', `medium', or `large', representing 20593 each of the code models. 20594 20595 Small model objects live in the lower 16MB of memory (so that their 20596 addresses can be loaded with the `ld24' instruction), and are 20597 callable with the `bl' instruction. 20598 20599 Medium model objects may live anywhere in the 32-bit address space 20600 (the compiler will generate `seth/add3' instructions to load their 20601 addresses), and are callable with the `bl' instruction. 20602 20603 Large model objects may live anywhere in the 32-bit address space 20604 (the compiler will generate `seth/add3' instructions to load their 20605 addresses), and may not be reachable with the `bl' instruction 20606 (the compiler will generate the much slower `seth/add3/jl' 20607 instruction sequence). 20608 20609 On IA-64, use this attribute to set the addressability of an 20610 object. At present, the only supported identifier for MODEL-NAME 20611 is `small', indicating addressability via "small" (22-bit) 20612 addresses (so that their addresses can be loaded with the `addl' 20613 instruction). Caveat: such addressing is by definition not 20614 position independent and hence this attribute must not be used for 20615 objects defined by shared libraries. 20616 20617`ms_abi/sysv_abi' 20618 On 64-bit x86_64-*-* targets, you can use an ABI attribute to 20619 indicate which calling convention should be used for a function. 20620 The `ms_abi' attribute tells the compiler to use the Microsoft 20621 ABI, while the `sysv_abi' attribute tells the compiler to use the 20622 ABI used on GNU/Linux and other systems. The default is to use 20623 the Microsoft ABI when targeting Windows. On all other systems, 20624 the default is the AMD ABI. 20625 20626 Note, the `ms_abi' attribute for Windows targets currently requires 20627 the `-maccumulate-outgoing-args' option. 20628 20629`callee_pop_aggregate_return (NUMBER)' 20630 On 32-bit i?86-*-* targets, you can control by those attribute for 20631 aggregate return in memory, if the caller is responsible to pop 20632 the hidden pointer together with the rest of the arguments - 20633 NUMBER equal to zero -, or if the callee is responsible to pop 20634 hidden pointer - NUMBER equal to one. 20635 20636 For i?86-netware, the caller pops the stack for the hidden 20637 arguments pointing to aggregate return value. This differs from 20638 the default i386 ABI which assumes that the callee pops the stack 20639 for hidden pointer. 20640 20641`ms_hook_prologue' 20642 On 32 bit i[34567]86-*-* targets and 64 bit x86_64-*-* targets, 20643 you can use this function attribute to make gcc generate the 20644 "hot-patching" function prologue used in Win32 API functions in 20645 Microsoft Windows XP Service Pack 2 and newer. 20646 20647`naked' 20648 Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to 20649 indicate that the specified function does not need 20650 prologue/epilogue sequences generated by the compiler. It is up 20651 to the programmer to provide these sequences. The only statements 20652 that can be safely included in naked functions are `asm' 20653 statements that do not have operands. All other statements, 20654 including declarations of local variables, `if' statements, and so 20655 forth, should be avoided. Naked functions should be used to 20656 implement the body of an assembly function, while allowing the 20657 compiler to construct the requisite function declaration for the 20658 assembler. 20659 20660`near' 20661 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 20662 use the normal calling convention based on `jsr' and `rts'. This 20663 attribute can be used to cancel the effect of the `-mlong-calls' 20664 option. 20665 20666 On MeP targets this attribute causes the compiler to assume the 20667 called function is close enough to use the normal calling 20668 convention, overriding the `-mtf' command line option. 20669 20670`nesting' 20671 Use this attribute together with `interrupt_handler', 20672 `exception_handler' or `nmi_handler' to indicate that the function 20673 entry code should enable nested interrupts or exceptions. 20674 20675`nmi_handler' 20676 Use this attribute on the Blackfin to indicate that the specified 20677 function is an NMI handler. The compiler will generate function 20678 entry and exit sequences suitable for use in an NMI handler when 20679 this attribute is present. 20680 20681`no_instrument_function' 20682 If `-finstrument-functions' is given, profiling function calls will 20683 be generated at entry and exit of most user-compiled functions. 20684 Functions with this attribute will not be so instrumented. 20685 20686`no_split_stack' 20687 If `-fsplit-stack' is given, functions will have a small prologue 20688 which decides whether to split the stack. Functions with the 20689 `no_split_stack' attribute will not have that prologue, and thus 20690 may run with only a small amount of stack space available. 20691 20692`noinline' 20693 This function attribute prevents a function from being considered 20694 for inlining. If the function does not have side-effects, there 20695 are optimizations other than inlining that causes function calls 20696 to be optimized away, although the function call is live. To keep 20697 such calls from being optimized away, put 20698 asm (""); 20699 (*note Extended Asm::) in the called function, to serve as a 20700 special side-effect. 20701 20702`noclone' 20703 This function attribute prevents a function from being considered 20704 for cloning - a mechanism which produces specialized copies of 20705 functions and which is (currently) performed by interprocedural 20706 constant propagation. 20707 20708`nonnull (ARG-INDEX, ...)' 20709 The `nonnull' attribute specifies that some function parameters 20710 should be non-null pointers. For instance, the declaration: 20711 20712 extern void * 20713 my_memcpy (void *dest, const void *src, size_t len) 20714 __attribute__((nonnull (1, 2))); 20715 20716 causes the compiler to check that, in calls to `my_memcpy', 20717 arguments DEST and SRC are non-null. If the compiler determines 20718 that a null pointer is passed in an argument slot marked as 20719 non-null, and the `-Wnonnull' option is enabled, a warning is 20720 issued. The compiler may also choose to make optimizations based 20721 on the knowledge that certain function arguments will not be null. 20722 20723 If no argument index list is given to the `nonnull' attribute, all 20724 pointer arguments are marked as non-null. To illustrate, the 20725 following declaration is equivalent to the previous example: 20726 20727 extern void * 20728 my_memcpy (void *dest, const void *src, size_t len) 20729 __attribute__((nonnull)); 20730 20731`noreturn' 20732 A few standard library functions, such as `abort' and `exit', 20733 cannot return. GCC knows this automatically. Some programs define 20734 their own functions that never return. You can declare them 20735 `noreturn' to tell the compiler this fact. For example, 20736 20737 void fatal () __attribute__ ((noreturn)); 20738 20739 void 20740 fatal (/* ... */) 20741 { 20742 /* ... */ /* Print error message. */ /* ... */ 20743 exit (1); 20744 } 20745 20746 The `noreturn' keyword tells the compiler to assume that `fatal' 20747 cannot return. It can then optimize without regard to what would 20748 happen if `fatal' ever did return. This makes slightly better 20749 code. More importantly, it helps avoid spurious warnings of 20750 uninitialized variables. 20751 20752 The `noreturn' keyword does not affect the exceptional path when 20753 that applies: a `noreturn'-marked function may still return to the 20754 caller by throwing an exception or calling `longjmp'. 20755 20756 Do not assume that registers saved by the calling function are 20757 restored before calling the `noreturn' function. 20758 20759 It does not make sense for a `noreturn' function to have a return 20760 type other than `void'. 20761 20762 The attribute `noreturn' is not implemented in GCC versions 20763 earlier than 2.5. An alternative way to declare that a function 20764 does not return, which works in the current version and in some 20765 older versions, is as follows: 20766 20767 typedef void voidfn (); 20768 20769 volatile voidfn fatal; 20770 20771 This approach does not work in GNU C++. 20772 20773`nothrow' 20774 The `nothrow' attribute is used to inform the compiler that a 20775 function cannot throw an exception. For example, most functions in 20776 the standard C library can be guaranteed not to throw an exception 20777 with the notable exceptions of `qsort' and `bsearch' that take 20778 function pointer arguments. The `nothrow' attribute is not 20779 implemented in GCC versions earlier than 3.3. 20780 20781`optimize' 20782 The `optimize' attribute is used to specify that a function is to 20783 be compiled with different optimization options than specified on 20784 the command line. Arguments can either be numbers or strings. 20785 Numbers are assumed to be an optimization level. Strings that 20786 begin with `O' are assumed to be an optimization option, while 20787 other options are assumed to be used with a `-f' prefix. You can 20788 also use the `#pragma GCC optimize' pragma to set the optimization 20789 options that affect more than one function. *Note Function 20790 Specific Option Pragmas::, for details about the `#pragma GCC 20791 optimize' pragma. 20792 20793 This can be used for instance to have frequently executed functions 20794 compiled with more aggressive optimization options that produce 20795 faster and larger code, while other functions can be called with 20796 less aggressive options. 20797 20798`pcs' 20799 The `pcs' attribute can be used to control the calling convention 20800 used for a function on ARM. The attribute takes an argument that 20801 specifies the calling convention to use. 20802 20803 When compiling using the AAPCS ABI (or a variant of that) then 20804 valid values for the argument are `"aapcs"' and `"aapcs-vfp"'. In 20805 order to use a variant other than `"aapcs"' then the compiler must 20806 be permitted to use the appropriate co-processor registers (i.e., 20807 the VFP registers must be available in order to use `"aapcs-vfp"'). 20808 For example, 20809 20810 /* Argument passed in r0, and result returned in r0+r1. */ 20811 double f2d (float) __attribute__((pcs("aapcs"))); 20812 20813 Variadic functions always use the `"aapcs"' calling convention and 20814 the compiler will reject attempts to specify an alternative. 20815 20816`pure' 20817 Many functions have no effects except the return value and their 20818 return value depends only on the parameters and/or global 20819 variables. Such a function can be subject to common subexpression 20820 elimination and loop optimization just as an arithmetic operator 20821 would be. These functions should be declared with the attribute 20822 `pure'. For example, 20823 20824 int square (int) __attribute__ ((pure)); 20825 20826 says that the hypothetical function `square' is safe to call fewer 20827 times than the program says. 20828 20829 Some of common examples of pure functions are `strlen' or `memcmp'. 20830 Interesting non-pure functions are functions with infinite loops 20831 or those depending on volatile memory or other system resource, 20832 that may change between two consecutive calls (such as `feof' in a 20833 multithreading environment). 20834 20835 The attribute `pure' is not implemented in GCC versions earlier 20836 than 2.96. 20837 20838`hot' 20839 The `hot' attribute is used to inform the compiler that a function 20840 is a hot spot of the compiled program. The function is optimized 20841 more aggressively and on many target it is placed into special 20842 subsection of the text section so all hot functions appears close 20843 together improving locality. 20844 20845 When profile feedback is available, via `-fprofile-use', hot 20846 functions are automatically detected and this attribute is ignored. 20847 20848 The `hot' attribute is not implemented in GCC versions earlier 20849 than 4.3. 20850 20851`cold' 20852 The `cold' attribute is used to inform the compiler that a 20853 function is unlikely executed. The function is optimized for size 20854 rather than speed and on many targets it is placed into special 20855 subsection of the text section so all cold functions appears close 20856 together improving code locality of non-cold parts of program. 20857 The paths leading to call of cold functions within code are marked 20858 as unlikely by the branch prediction mechanism. It is thus useful 20859 to mark functions used to handle unlikely conditions, such as 20860 `perror', as cold to improve optimization of hot functions that do 20861 call marked functions in rare occasions. 20862 20863 When profile feedback is available, via `-fprofile-use', hot 20864 functions are automatically detected and this attribute is ignored. 20865 20866 The `cold' attribute is not implemented in GCC versions earlier 20867 than 4.3. 20868 20869`regparm (NUMBER)' 20870 On the Intel 386, the `regparm' attribute causes the compiler to 20871 pass arguments number one to NUMBER if they are of integral type 20872 in registers EAX, EDX, and ECX instead of on the stack. Functions 20873 that take a variable number of arguments will continue to be 20874 passed all of their arguments on the stack. 20875 20876 Beware that on some ELF systems this attribute is unsuitable for 20877 global functions in shared libraries with lazy binding (which is 20878 the default). Lazy binding will send the first call via resolving 20879 code in the loader, which might assume EAX, EDX and ECX can be 20880 clobbered, as per the standard calling conventions. Solaris 8 is 20881 affected by this. GNU systems with GLIBC 2.1 or higher, and 20882 FreeBSD, are believed to be safe since the loaders there save EAX, 20883 EDX and ECX. (Lazy binding can be disabled with the linker or the 20884 loader if desired, to avoid the problem.) 20885 20886`sseregparm' 20887 On the Intel 386 with SSE support, the `sseregparm' attribute 20888 causes the compiler to pass up to 3 floating point arguments in 20889 SSE registers instead of on the stack. Functions that take a 20890 variable number of arguments will continue to pass all of their 20891 floating point arguments on the stack. 20892 20893`force_align_arg_pointer' 20894 On the Intel x86, the `force_align_arg_pointer' attribute may be 20895 applied to individual function definitions, generating an alternate 20896 prologue and epilogue that realigns the runtime stack if necessary. 20897 This supports mixing legacy codes that run with a 4-byte aligned 20898 stack with modern codes that keep a 16-byte stack for SSE 20899 compatibility. 20900 20901`resbank' 20902 On the SH2A target, this attribute enables the high-speed register 20903 saving and restoration using a register bank for 20904 `interrupt_handler' routines. Saving to the bank is performed 20905 automatically after the CPU accepts an interrupt that uses a 20906 register bank. 20907 20908 The nineteen 32-bit registers comprising general register R0 to 20909 R14, control register GBR, and system registers MACH, MACL, and PR 20910 and the vector table address offset are saved into a register 20911 bank. Register banks are stacked in first-in last-out (FILO) 20912 sequence. Restoration from the bank is executed by issuing a 20913 RESBANK instruction. 20914 20915`returns_twice' 20916 The `returns_twice' attribute tells the compiler that a function 20917 may return more than one time. The compiler will ensure that all 20918 registers are dead before calling such a function and will emit a 20919 warning about the variables that may be clobbered after the second 20920 return from the function. Examples of such functions are `setjmp' 20921 and `vfork'. The `longjmp'-like counterpart of such function, if 20922 any, might need to be marked with the `noreturn' attribute. 20923 20924`saveall' 20925 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 20926 indicate that all registers except the stack pointer should be 20927 saved in the prologue regardless of whether they are used or not. 20928 20929`save_volatiles' 20930 Use this attribute on the MicroBlaze to indicate that the function 20931 is an interrupt handler. All volatile registers (in addition to 20932 non-volatile registers) will be saved in the function prologue. 20933 If the function is a leaf function, only volatiles used by the 20934 function are saved. A normal function return is generated instead 20935 of a return from interrupt. 20936 20937`section ("SECTION-NAME")' 20938 Normally, the compiler places the code it generates in the `text' 20939 section. Sometimes, however, you need additional sections, or you 20940 need certain particular functions to appear in special sections. 20941 The `section' attribute specifies that a function lives in a 20942 particular section. For example, the declaration: 20943 20944 extern void foobar (void) __attribute__ ((section ("bar"))); 20945 20946 puts the function `foobar' in the `bar' section. 20947 20948 Some file formats do not support arbitrary sections so the 20949 `section' attribute is not available on all platforms. If you 20950 need to map the entire contents of a module to a particular 20951 section, consider using the facilities of the linker instead. 20952 20953`sentinel' 20954 This function attribute ensures that a parameter in a function 20955 call is an explicit `NULL'. The attribute is only valid on 20956 variadic functions. By default, the sentinel is located at 20957 position zero, the last parameter of the function call. If an 20958 optional integer position argument P is supplied to the attribute, 20959 the sentinel must be located at position P counting backwards from 20960 the end of the argument list. 20961 20962 __attribute__ ((sentinel)) 20963 is equivalent to 20964 __attribute__ ((sentinel(0))) 20965 20966 The attribute is automatically set with a position of 0 for the 20967 built-in functions `execl' and `execlp'. The built-in function 20968 `execle' has the attribute set with a position of 1. 20969 20970 A valid `NULL' in this context is defined as zero with any pointer 20971 type. If your system defines the `NULL' macro with an integer type 20972 then you need to add an explicit cast. GCC replaces `stddef.h' 20973 with a copy that redefines NULL appropriately. 20974 20975 The warnings for missing or incorrect sentinels are enabled with 20976 `-Wformat'. 20977 20978`short_call' 20979 See long_call/short_call. 20980 20981`shortcall' 20982 See longcall/shortcall. 20983 20984`signal' 20985 Use this attribute on the AVR to indicate that the specified 20986 function is a signal handler. The compiler will generate function 20987 entry and exit sequences suitable for use in a signal handler when 20988 this attribute is present. Interrupts will be disabled inside the 20989 function. 20990 20991`sp_switch' 20992 Use this attribute on the SH to indicate an `interrupt_handler' 20993 function should switch to an alternate stack. It expects a string 20994 argument that names a global variable holding the address of the 20995 alternate stack. 20996 20997 void *alt_stack; 20998 void f () __attribute__ ((interrupt_handler, 20999 sp_switch ("alt_stack"))); 21000 21001`stdcall' 21002 On the Intel 386, the `stdcall' attribute causes the compiler to 21003 assume that the called function will pop off the stack space used 21004 to pass arguments, unless it takes a variable number of arguments. 21005 21006`syscall_linkage' 21007 This attribute is used to modify the IA64 calling convention by 21008 marking all input registers as live at all function exits. This 21009 makes it possible to restart a system call after an interrupt 21010 without having to save/restore the input registers. This also 21011 prevents kernel data from leaking into application code. 21012 21013`target' 21014 The `target' attribute is used to specify that a function is to be 21015 compiled with different target options than specified on the 21016 command line. This can be used for instance to have functions 21017 compiled with a different ISA (instruction set architecture) than 21018 the default. You can also use the `#pragma GCC target' pragma to 21019 set more than one function to be compiled with specific target 21020 options. *Note Function Specific Option Pragmas::, for details 21021 about the `#pragma GCC target' pragma. 21022 21023 For instance on a 386, you could compile one function with 21024 `target("sse4.1,arch=core2")' and another with 21025 `target("sse4a,arch=amdfam10")' that would be equivalent to 21026 compiling the first function with `-msse4.1' and `-march=core2' 21027 options, and the second function with `-msse4a' and 21028 `-march=amdfam10' options. It is up to the user to make sure that 21029 a function is only invoked on a machine that supports the 21030 particular ISA it was compiled for (for example by using `cpuid' 21031 on 386 to determine what feature bits and architecture family are 21032 used). 21033 21034 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 21035 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 21036 21037 On the 386, the following options are allowed: 21038 21039 `abm' 21040 `no-abm' 21041 Enable/disable the generation of the advanced bit 21042 instructions. 21043 21044 `aes' 21045 `no-aes' 21046 Enable/disable the generation of the AES instructions. 21047 21048 `mmx' 21049 `no-mmx' 21050 Enable/disable the generation of the MMX instructions. 21051 21052 `pclmul' 21053 `no-pclmul' 21054 Enable/disable the generation of the PCLMUL instructions. 21055 21056 `popcnt' 21057 `no-popcnt' 21058 Enable/disable the generation of the POPCNT instruction. 21059 21060 `sse' 21061 `no-sse' 21062 Enable/disable the generation of the SSE instructions. 21063 21064 `sse2' 21065 `no-sse2' 21066 Enable/disable the generation of the SSE2 instructions. 21067 21068 `sse3' 21069 `no-sse3' 21070 Enable/disable the generation of the SSE3 instructions. 21071 21072 `sse4' 21073 `no-sse4' 21074 Enable/disable the generation of the SSE4 instructions (both 21075 SSE4.1 and SSE4.2). 21076 21077 `sse4.1' 21078 `no-sse4.1' 21079 Enable/disable the generation of the sse4.1 instructions. 21080 21081 `sse4.2' 21082 `no-sse4.2' 21083 Enable/disable the generation of the sse4.2 instructions. 21084 21085 `sse4a' 21086 `no-sse4a' 21087 Enable/disable the generation of the SSE4A instructions. 21088 21089 `fma4' 21090 `no-fma4' 21091 Enable/disable the generation of the FMA4 instructions. 21092 21093 `xop' 21094 `no-xop' 21095 Enable/disable the generation of the XOP instructions. 21096 21097 `lwp' 21098 `no-lwp' 21099 Enable/disable the generation of the LWP instructions. 21100 21101 `ssse3' 21102 `no-ssse3' 21103 Enable/disable the generation of the SSSE3 instructions. 21104 21105 `cld' 21106 `no-cld' 21107 Enable/disable the generation of the CLD before string moves. 21108 21109 `fancy-math-387' 21110 `no-fancy-math-387' 21111 Enable/disable the generation of the `sin', `cos', and `sqrt' 21112 instructions on the 387 floating point unit. 21113 21114 `fused-madd' 21115 `no-fused-madd' 21116 Enable/disable the generation of the fused multiply/add 21117 instructions. 21118 21119 `ieee-fp' 21120 `no-ieee-fp' 21121 Enable/disable the generation of floating point that depends 21122 on IEEE arithmetic. 21123 21124 `inline-all-stringops' 21125 `no-inline-all-stringops' 21126 Enable/disable inlining of string operations. 21127 21128 `inline-stringops-dynamically' 21129 `no-inline-stringops-dynamically' 21130 Enable/disable the generation of the inline code to do small 21131 string operations and calling the library routines for large 21132 operations. 21133 21134 `align-stringops' 21135 `no-align-stringops' 21136 Do/do not align destination of inlined string operations. 21137 21138 `recip' 21139 `no-recip' 21140 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 21141 RSQRTPS instructions followed an additional Newton-Raphson 21142 step instead of doing a floating point division. 21143 21144 `arch=ARCH' 21145 Specify the architecture to generate code for in compiling 21146 the function. 21147 21148 `tune=TUNE' 21149 Specify the architecture to tune for in compiling the 21150 function. 21151 21152 `fpmath=FPMATH' 21153 Specify which floating point unit to use. The 21154 `target("fpmath=sse,387")' option must be specified as 21155 `target("fpmath=sse+387")' because the comma would separate 21156 different options. 21157 21158 On the PowerPC, the following options are allowed: 21159 21160 `altivec' 21161 `no-altivec' 21162 Generate code that uses (does not use) AltiVec instructions. 21163 In 32-bit code, you cannot enable Altivec instructions unless 21164 `-mabi=altivec' was used on the command line. 21165 21166 `cmpb' 21167 `no-cmpb' 21168 Generate code that uses (does not use) the compare bytes 21169 instruction implemented on the POWER6 processor and other 21170 processors that support the PowerPC V2.05 architecture. 21171 21172 `dlmzb' 21173 `no-dlmzb' 21174 Generate code that uses (does not use) the string-search 21175 `dlmzb' instruction on the IBM 405, 440, 464 and 476 21176 processors. This instruction is generated by default when 21177 targetting those processors. 21178 21179 `fprnd' 21180 `no-fprnd' 21181 Generate code that uses (does not use) the FP round to integer 21182 instructions implemented on the POWER5+ processor and other 21183 processors that support the PowerPC V2.03 architecture. 21184 21185 `hard-dfp' 21186 `no-hard-dfp' 21187 Generate code that uses (does not use) the decimal floating 21188 point instructions implemented on some POWER processors. 21189 21190 `isel' 21191 `no-isel' 21192 Generate code that uses (does not use) ISEL instruction. 21193 21194 `mfcrf' 21195 `no-mfcrf' 21196 Generate code that uses (does not use) the move from condition 21197 register field instruction implemented on the POWER4 21198 processor and other processors that support the PowerPC V2.01 21199 architecture. 21200 21201 `mfpgpr' 21202 `no-mfpgpr' 21203 Generate code that uses (does not use) the FP move to/from 21204 general purpose register instructions implemented on the 21205 POWER6X processor and other processors that support the 21206 extended PowerPC V2.05 architecture. 21207 21208 `mulhw' 21209 `no-mulhw' 21210 Generate code that uses (does not use) the half-word multiply 21211 and multiply-accumulate instructions on the IBM 405, 440, 464 21212 and 476 processors. These instructions are generated by 21213 default when targetting those processors. 21214 21215 `multiple' 21216 `no-multiple' 21217 Generate code that uses (does not use) the load multiple word 21218 instructions and the store multiple word instructions. 21219 21220 `update' 21221 `no-update' 21222 Generate code that uses (does not use) the load or store 21223 instructions that update the base register to the address of 21224 the calculated memory location. 21225 21226 `popcntb' 21227 `no-popcntb' 21228 Generate code that uses (does not use) the popcount and double 21229 precision FP reciprocal estimate instruction implemented on 21230 the POWER5 processor and other processors that support the 21231 PowerPC V2.02 architecture. 21232 21233 `popcntd' 21234 `no-popcntd' 21235 Generate code that uses (does not use) the popcount 21236 instruction implemented on the POWER7 processor and other 21237 processors that support the PowerPC V2.06 architecture. 21238 21239 `powerpc-gfxopt' 21240 `no-powerpc-gfxopt' 21241 Generate code that uses (does not use) the optional PowerPC 21242 architecture instructions in the Graphics group, including 21243 floating-point select. 21244 21245 `powerpc-gpopt' 21246 `no-powerpc-gpopt' 21247 Generate code that uses (does not use) the optional PowerPC 21248 architecture instructions in the General Purpose group, 21249 including floating-point square root. 21250 21251 `recip-precision' 21252 `no-recip-precision' 21253 Assume (do not assume) that the reciprocal estimate 21254 instructions provide higher precision estimates than is 21255 mandated by the powerpc ABI. 21256 21257 `string' 21258 `no-string' 21259 Generate code that uses (does not use) the load string 21260 instructions and the store string word instructions to save 21261 multiple registers and do small block moves. 21262 21263 `vsx' 21264 `no-vsx' 21265 Generate code that uses (does not use) vector/scalar (VSX) 21266 instructions, and also enable the use of built-in functions 21267 that allow more direct access to the VSX instruction set. In 21268 32-bit code, you cannot enable VSX or Altivec instructions 21269 unless `-mabi=altivec' was used on the command line. 21270 21271 `friz' 21272 `no-friz' 21273 Generate (do not generate) the `friz' instruction when the 21274 `-funsafe-math-optimizations' option is used to optimize 21275 rounding a floating point value to 64-bit integer and back to 21276 floating point. The `friz' instruction does not return the 21277 same value if the floating point number is too large to fit 21278 in an integer. 21279 21280 `avoid-indexed-addresses' 21281 `no-avoid-indexed-addresses' 21282 Generate code that tries to avoid (not avoid) the use of 21283 indexed load or store instructions. 21284 21285 `paired' 21286 `no-paired' 21287 Generate code that uses (does not use) the generation of 21288 PAIRED simd instructions. 21289 21290 `longcall' 21291 `no-longcall' 21292 Generate code that assumes (does not assume) that all calls 21293 are far away so that a longer more expensive calling sequence 21294 is required. 21295 21296 `cpu=CPU' 21297 Specify the architecture to generate code for when compiling 21298 the function. If you select the `"target("cpu=power7)"' 21299 attribute when generating 32-bit code, VSX and Altivec 21300 instructions are not generated unless you use the 21301 `-mabi=altivec' option on the command line. 21302 21303 `tune=TUNE' 21304 Specify the architecture to tune for when compiling the 21305 function. If you do not specify the `target("tune=TUNE")' 21306 attribute and you do specify the `target("cpu=CPU")' 21307 attribute, compilation will tune for the CPU architecture, 21308 and not the default tuning specified on the command line. 21309 21310 On the 386/x86_64 and PowerPC backends, you can use either multiple 21311 strings to specify multiple options, or you can separate the option 21312 with a comma (`,'). 21313 21314 On the 386/x86_64 and PowerPC backends, the inliner will not 21315 inline a function that has different target options than the 21316 caller, unless the callee has a subset of the target options of 21317 the caller. For example a function declared with `target("sse3")' 21318 can inline a function with `target("sse2")', since `-msse3' 21319 implies `-msse2'. 21320 21321 The `target' attribute is not implemented in GCC versions earlier 21322 than 4.4 for the i386/x86_64 and 4.6 for the PowerPC backends. It 21323 is not currently implemented for other backends. 21324 21325`tiny_data' 21326 Use this attribute on the H8/300H and H8S to indicate that the 21327 specified variable should be placed into the tiny data section. 21328 The compiler will generate more efficient code for loads and stores 21329 on data in the tiny data section. Note the tiny data area is 21330 limited to slightly under 32kbytes of data. 21331 21332`trap_exit' 21333 Use this attribute on the SH for an `interrupt_handler' to return 21334 using `trapa' instead of `rte'. This attribute expects an integer 21335 argument specifying the trap number to be used. 21336 21337`unused' 21338 This attribute, attached to a function, means that the function is 21339 meant to be possibly unused. GCC will not produce a warning for 21340 this function. 21341 21342`used' 21343 This attribute, attached to a function, means that code must be 21344 emitted for the function even if it appears that the function is 21345 not referenced. This is useful, for example, when the function is 21346 referenced only in inline assembly. 21347 21348`version_id' 21349 This IA64 HP-UX attribute, attached to a global variable or 21350 function, renames a symbol to contain a version string, thus 21351 allowing for function level versioning. HP-UX system header files 21352 may use version level functioning for some system calls. 21353 21354 extern int foo () __attribute__((version_id ("20040821"))); 21355 21356 Calls to FOO will be mapped to calls to FOO{20040821}. 21357 21358`visibility ("VISIBILITY_TYPE")' 21359 This attribute affects the linkage of the declaration to which it 21360 is attached. There are four supported VISIBILITY_TYPE values: 21361 default, hidden, protected or internal visibility. 21362 21363 void __attribute__ ((visibility ("protected"))) 21364 f () { /* Do something. */; } 21365 int i __attribute__ ((visibility ("hidden"))); 21366 21367 The possible values of VISIBILITY_TYPE correspond to the 21368 visibility settings in the ELF gABI. 21369 21370 "default" 21371 Default visibility is the normal case for the object file 21372 format. This value is available for the visibility attribute 21373 to override other options that may change the assumed 21374 visibility of entities. 21375 21376 On ELF, default visibility means that the declaration is 21377 visible to other modules and, in shared libraries, means that 21378 the declared entity may be overridden. 21379 21380 On Darwin, default visibility means that the declaration is 21381 visible to other modules. 21382 21383 Default visibility corresponds to "external linkage" in the 21384 language. 21385 21386 "hidden" 21387 Hidden visibility indicates that the entity declared will 21388 have a new form of linkage, which we'll call "hidden 21389 linkage". Two declarations of an object with hidden linkage 21390 refer to the same object if they are in the same shared 21391 object. 21392 21393 "internal" 21394 Internal visibility is like hidden visibility, but with 21395 additional processor specific semantics. Unless otherwise 21396 specified by the psABI, GCC defines internal visibility to 21397 mean that a function is _never_ called from another module. 21398 Compare this with hidden functions which, while they cannot 21399 be referenced directly by other modules, can be referenced 21400 indirectly via function pointers. By indicating that a 21401 function cannot be called from outside the module, GCC may 21402 for instance omit the load of a PIC register since it is known 21403 that the calling function loaded the correct value. 21404 21405 "protected" 21406 Protected visibility is like default visibility except that it 21407 indicates that references within the defining module will 21408 bind to the definition in that module. That is, the declared 21409 entity cannot be overridden by another module. 21410 21411 21412 All visibilities are supported on many, but not all, ELF targets 21413 (supported when the assembler supports the `.visibility' 21414 pseudo-op). Default visibility is supported everywhere. Hidden 21415 visibility is supported on Darwin targets. 21416 21417 The visibility attribute should be applied only to declarations 21418 which would otherwise have external linkage. The attribute should 21419 be applied consistently, so that the same entity should not be 21420 declared with different settings of the attribute. 21421 21422 In C++, the visibility attribute applies to types as well as 21423 functions and objects, because in C++ types have linkage. A class 21424 must not have greater visibility than its non-static data member 21425 types and bases, and class members default to the visibility of 21426 their class. Also, a declaration without explicit visibility is 21427 limited to the visibility of its type. 21428 21429 In C++, you can mark member functions and static member variables 21430 of a class with the visibility attribute. This is useful if you 21431 know a particular method or static member variable should only be 21432 used from one shared object; then you can mark it hidden while the 21433 rest of the class has default visibility. Care must be taken to 21434 avoid breaking the One Definition Rule; for example, it is usually 21435 not useful to mark an inline method as hidden without marking the 21436 whole class as hidden. 21437 21438 A C++ namespace declaration can also have the visibility attribute. 21439 This attribute applies only to the particular namespace body, not 21440 to other definitions of the same namespace; it is equivalent to 21441 using `#pragma GCC visibility' before and after the namespace 21442 definition (*note Visibility Pragmas::). 21443 21444 In C++, if a template argument has limited visibility, this 21445 restriction is implicitly propagated to the template instantiation. 21446 Otherwise, template instantiations and specializations default to 21447 the visibility of their template. 21448 21449 If both the template and enclosing class have explicit visibility, 21450 the visibility from the template is used. 21451 21452`vliw' 21453 On MeP, the `vliw' attribute tells the compiler to emit 21454 instructions in VLIW mode instead of core mode. Note that this 21455 attribute is not allowed unless a VLIW coprocessor has been 21456 configured and enabled through command line options. 21457 21458`warn_unused_result' 21459 The `warn_unused_result' attribute causes a warning to be emitted 21460 if a caller of the function with this attribute does not use its 21461 return value. This is useful for functions where not checking the 21462 result is either a security problem or always a bug, such as 21463 `realloc'. 21464 21465 int fn () __attribute__ ((warn_unused_result)); 21466 int foo () 21467 { 21468 if (fn () < 0) return -1; 21469 fn (); 21470 return 0; 21471 } 21472 21473 results in warning on line 5. 21474 21475`weak' 21476 The `weak' attribute causes the declaration to be emitted as a weak 21477 symbol rather than a global. This is primarily useful in defining 21478 library functions which can be overridden in user code, though it 21479 can also be used with non-function declarations. Weak symbols are 21480 supported for ELF targets, and also for a.out targets when using 21481 the GNU assembler and linker. 21482 21483`weakref' 21484`weakref ("TARGET")' 21485 The `weakref' attribute marks a declaration as a weak reference. 21486 Without arguments, it should be accompanied by an `alias' attribute 21487 naming the target symbol. Optionally, the TARGET may be given as 21488 an argument to `weakref' itself. In either case, `weakref' 21489 implicitly marks the declaration as `weak'. Without a TARGET, 21490 given as an argument to `weakref' or to `alias', `weakref' is 21491 equivalent to `weak'. 21492 21493 static int x() __attribute__ ((weakref ("y"))); 21494 /* is equivalent to... */ 21495 static int x() __attribute__ ((weak, weakref, alias ("y"))); 21496 /* and to... */ 21497 static int x() __attribute__ ((weakref)); 21498 static int x() __attribute__ ((alias ("y"))); 21499 21500 A weak reference is an alias that does not by itself require a 21501 definition to be given for the target symbol. If the target 21502 symbol is only referenced through weak references, then it becomes 21503 a `weak' undefined symbol. If it is directly referenced, however, 21504 then such strong references prevail, and a definition will be 21505 required for the symbol, not necessarily in the same translation 21506 unit. 21507 21508 The effect is equivalent to moving all references to the alias to a 21509 separate translation unit, renaming the alias to the aliased 21510 symbol, declaring it as weak, compiling the two separate 21511 translation units and performing a reloadable link on them. 21512 21513 At present, a declaration to which `weakref' is attached can only 21514 be `static'. 21515 21516 21517 You can specify multiple attributes in a declaration by separating them 21518by commas within the double parentheses or by immediately following an 21519attribute declaration with another attribute declaration. 21520 21521 Some people object to the `__attribute__' feature, suggesting that ISO 21522C's `#pragma' should be used instead. At the time `__attribute__' was 21523designed, there were two reasons for not doing this. 21524 21525 1. It is impossible to generate `#pragma' commands from a macro. 21526 21527 2. There is no telling what the same `#pragma' might mean in another 21528 compiler. 21529 21530 These two reasons applied to almost any application that might have 21531been proposed for `#pragma'. It was basically a mistake to use 21532`#pragma' for _anything_. 21533 21534 The ISO C99 standard includes `_Pragma', which now allows pragmas to 21535be generated from macros. In addition, a `#pragma GCC' namespace is 21536now in use for GCC-specific pragmas. However, it has been found 21537convenient to use `__attribute__' to achieve a natural attachment of 21538attributes to their corresponding declarations, whereas `#pragma GCC' 21539is of use for constructs that do not naturally form part of the 21540grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other 21541Directives. 21542 21543 21544File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 21545 215466.31 Attribute Syntax 21547===================== 21548 21549This section describes the syntax with which `__attribute__' may be 21550used, and the constructs to which attribute specifiers bind, for the C 21551language. Some details may vary for C++ and Objective-C. Because of 21552infelicities in the grammar for attributes, some forms described here 21553may not be successfully parsed in all cases. 21554 21555 There are some problems with the semantics of attributes in C++. For 21556example, there are no manglings for attributes, although they may affect 21557code generation, so problems may arise when attributed types are used in 21558conjunction with templates or overloading. Similarly, `typeid' does 21559not distinguish between types with different attributes. Support for 21560attributes in C++ may be restricted in future to attributes on 21561declarations only, but not on nested declarators. 21562 21563 *Note Function Attributes::, for details of the semantics of attributes 21564applying to functions. *Note Variable Attributes::, for details of the 21565semantics of attributes applying to variables. *Note Type Attributes::, 21566for details of the semantics of attributes applying to structure, union 21567and enumerated types. 21568 21569 An "attribute specifier" is of the form `__attribute__ 21570((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 21571comma-separated sequence of "attributes", where each attribute is one 21572of the following: 21573 21574 * Empty. Empty attributes are ignored. 21575 21576 * A word (which may be an identifier such as `unused', or a reserved 21577 word such as `const'). 21578 21579 * A word, followed by, in parentheses, parameters for the attribute. 21580 These parameters take one of the following forms: 21581 21582 * An identifier. For example, `mode' attributes use this form. 21583 21584 * An identifier followed by a comma and a non-empty 21585 comma-separated list of expressions. For example, `format' 21586 attributes use this form. 21587 21588 * A possibly empty comma-separated list of expressions. For 21589 example, `format_arg' attributes use this form with the list 21590 being a single integer constant expression, and `alias' 21591 attributes use this form with the list being a single string 21592 constant. 21593 21594 An "attribute specifier list" is a sequence of one or more attribute 21595specifiers, not separated by any other tokens. 21596 21597 In GNU C, an attribute specifier list may appear after the colon 21598following a label, other than a `case' or `default' label. The only 21599attribute it makes sense to use after a label is `unused'. This 21600feature is intended for code generated by programs which contains labels 21601that may be unused but which is compiled with `-Wall'. It would not 21602normally be appropriate to use in it human-written code, though it 21603could be useful in cases where the code that jumps to the label is 21604contained within an `#ifdef' conditional. GNU C++ only permits 21605attributes on labels if the attribute specifier is immediately followed 21606by a semicolon (i.e., the label applies to an empty statement). If the 21607semicolon is missing, C++ label attributes are ambiguous, as it is 21608permissible for a declaration, which could begin with an attribute 21609list, to be labelled in C++. Declarations cannot be labelled in C90 or 21610C99, so the ambiguity does not arise there. 21611 21612 An attribute specifier list may appear as part of a `struct', `union' 21613or `enum' specifier. It may go either immediately after the `struct', 21614`union' or `enum' keyword, or after the closing brace. The former 21615syntax is preferred. Where attribute specifiers follow the closing 21616brace, they are considered to relate to the structure, union or 21617enumerated type defined, not to any enclosing declaration the type 21618specifier appears in, and the type defined is not complete until after 21619the attribute specifiers. 21620 21621 Otherwise, an attribute specifier appears as part of a declaration, 21622counting declarations of unnamed parameters and type names, and relates 21623to that declaration (which may be nested in another declaration, for 21624example in the case of a parameter declaration), or to a particular 21625declarator within a declaration. Where an attribute specifier is 21626applied to a parameter declared as a function or an array, it should 21627apply to the function or array rather than the pointer to which the 21628parameter is implicitly converted, but this is not yet correctly 21629implemented. 21630 21631 Any list of specifiers and qualifiers at the start of a declaration may 21632contain attribute specifiers, whether or not such a list may in that 21633context contain storage class specifiers. (Some attributes, however, 21634are essentially in the nature of storage class specifiers, and only make 21635sense where storage class specifiers may be used; for example, 21636`section'.) There is one necessary limitation to this syntax: the 21637first old-style parameter declaration in a function definition cannot 21638begin with an attribute specifier, because such an attribute applies to 21639the function instead by syntax described below (which, however, is not 21640yet implemented in this case). In some other cases, attribute 21641specifiers are permitted by this grammar but not yet supported by the 21642compiler. All attribute specifiers in this place relate to the 21643declaration as a whole. In the obsolescent usage where a type of `int' 21644is implied by the absence of type specifiers, such a list of specifiers 21645and qualifiers may be an attribute specifier list with no other 21646specifiers or qualifiers. 21647 21648 At present, the first parameter in a function prototype must have some 21649type specifier which is not an attribute specifier; this resolves an 21650ambiguity in the interpretation of `void f(int (__attribute__((foo)) 21651x))', but is subject to change. At present, if the parentheses of a 21652function declarator contain only attributes then those attributes are 21653ignored, rather than yielding an error or warning or implying a single 21654parameter of type int, but this is subject to change. 21655 21656 An attribute specifier list may appear immediately before a declarator 21657(other than the first) in a comma-separated list of declarators in a 21658declaration of more than one identifier using a single list of 21659specifiers and qualifiers. Such attribute specifiers apply only to the 21660identifier before whose declarator they appear. For example, in 21661 21662 __attribute__((noreturn)) void d0 (void), 21663 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 21664 d2 (void) 21665 21666the `noreturn' attribute applies to all the functions declared; the 21667`format' attribute only applies to `d1'. 21668 21669 An attribute specifier list may appear immediately before the comma, 21670`=' or semicolon terminating the declaration of an identifier other 21671than a function definition. Such attribute specifiers apply to the 21672declared object or function. Where an assembler name for an object or 21673function is specified (*note Asm Labels::), the attribute must follow 21674the `asm' specification. 21675 21676 An attribute specifier list may, in future, be permitted to appear 21677after the declarator in a function definition (before any old-style 21678parameter declarations or the function body). 21679 21680 Attribute specifiers may be mixed with type qualifiers appearing inside 21681the `[]' of a parameter array declarator, in the C99 construct by which 21682such qualifiers are applied to the pointer to which the array is 21683implicitly converted. Such attribute specifiers apply to the pointer, 21684not to the array, but at present this is not implemented and they are 21685ignored. 21686 21687 An attribute specifier list may appear at the start of a nested 21688declarator. At present, there are some limitations in this usage: the 21689attributes correctly apply to the declarator, but for most individual 21690attributes the semantics this implies are not implemented. When 21691attribute specifiers follow the `*' of a pointer declarator, they may 21692be mixed with any type qualifiers present. The following describes the 21693formal semantics of this syntax. It will make the most sense if you 21694are familiar with the formal specification of declarators in the ISO C 21695standard. 21696 21697 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 21698where `T' contains declaration specifiers that specify a type TYPE 21699(such as `int') and `D1' is a declarator that contains an identifier 21700IDENT. The type specified for IDENT for derived declarators whose type 21701does not include an attribute specifier is as in the ISO C standard. 21702 21703 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 21704declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 21705TYPE" for IDENT, then `T D1' specifies the type 21706"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 21707 21708 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 21709D', and the declaration `T D' specifies the type 21710"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 21711the type "DERIVED-DECLARATOR-TYPE-LIST 21712TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT. 21713 21714 For example, 21715 21716 void (__attribute__((noreturn)) ****f) (void); 21717 21718specifies the type "pointer to pointer to pointer to pointer to 21719non-returning function returning `void'". As another example, 21720 21721 char *__attribute__((aligned(8))) *f; 21722 21723specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 21724again that this does not work with most attributes; for example, the 21725usage of `aligned' and `noreturn' attributes given above is not yet 21726supported. 21727 21728 For compatibility with existing code written for compiler versions that 21729did not implement attributes on nested declarators, some laxity is 21730allowed in the placing of attributes. If an attribute that only applies 21731to types is applied to a declaration, it will be treated as applying to 21732the type of that declaration. If an attribute that only applies to 21733declarations is applied to the type of a declaration, it will be treated 21734as applying to that declaration; and, for compatibility with code 21735placing the attributes immediately before the identifier declared, such 21736an attribute applied to a function return type will be treated as 21737applying to the function type, and such an attribute applied to an array 21738element type will be treated as applying to the array type. If an 21739attribute that only applies to function types is applied to a 21740pointer-to-function type, it will be treated as applying to the pointer 21741target type; if such an attribute is applied to a function return type 21742that is not a pointer-to-function type, it will be treated as applying 21743to the function type. 21744 21745 21746File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 21747 217486.32 Prototypes and Old-Style Function Definitions 21749================================================== 21750 21751GNU C extends ISO C to allow a function prototype to override a later 21752old-style non-prototype definition. Consider the following example: 21753 21754 /* Use prototypes unless the compiler is old-fashioned. */ 21755 #ifdef __STDC__ 21756 #define P(x) x 21757 #else 21758 #define P(x) () 21759 #endif 21760 21761 /* Prototype function declaration. */ 21762 int isroot P((uid_t)); 21763 21764 /* Old-style function definition. */ 21765 int 21766 isroot (x) /* ??? lossage here ??? */ 21767 uid_t x; 21768 { 21769 return x == 0; 21770 } 21771 21772 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 21773this example, because subword arguments in old-style non-prototype 21774definitions are promoted. Therefore in this example the function 21775definition's argument is really an `int', which does not match the 21776prototype argument type of `short'. 21777 21778 This restriction of ISO C makes it hard to write code that is portable 21779to traditional C compilers, because the programmer does not know 21780whether the `uid_t' type is `short', `int', or `long'. Therefore, in 21781cases like these GNU C allows a prototype to override a later old-style 21782definition. More precisely, in GNU C, a function prototype argument 21783type overrides the argument type specified by a later old-style 21784definition if the former type is the same as the latter type before 21785promotion. Thus in GNU C the above example is equivalent to the 21786following: 21787 21788 int isroot (uid_t); 21789 21790 int 21791 isroot (uid_t x) 21792 { 21793 return x == 0; 21794 } 21795 21796GNU C++ does not support old-style function definitions, so this 21797extension is irrelevant. 21798 21799 21800File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 21801 218026.33 C++ Style Comments 21803======================= 21804 21805In GNU C, you may use C++ style comments, which start with `//' and 21806continue until the end of the line. Many other C implementations allow 21807such comments, and they are included in the 1999 C standard. However, 21808C++ style comments are not recognized if you specify an `-std' option 21809specifying a version of ISO C before C99, or `-ansi' (equivalent to 21810`-std=c90'). 21811 21812 21813File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 21814 218156.34 Dollar Signs in Identifier Names 21816===================================== 21817 21818In GNU C, you may normally use dollar signs in identifier names. This 21819is because many traditional C implementations allow such identifiers. 21820However, dollar signs in identifiers are not supported on a few target 21821machines, typically because the target assembler does not allow them. 21822 21823 21824File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 21825 218266.35 The Character <ESC> in Constants 21827===================================== 21828 21829You can use the sequence `\e' in a string or character constant to 21830stand for the ASCII character <ESC>. 21831 21832 21833File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 21834 218356.36 Specifying Attributes of Variables 21836======================================= 21837 21838The keyword `__attribute__' allows you to specify special attributes of 21839variables or structure fields. This keyword is followed by an 21840attribute specification inside double parentheses. Some attributes are 21841currently defined generically for variables. Other attributes are 21842defined for variables on particular target systems. Other attributes 21843are available for functions (*note Function Attributes::) and for types 21844(*note Type Attributes::). Other front ends might define more 21845attributes (*note Extensions to the C++ Language: C++ Extensions.). 21846 21847 You may also specify attributes with `__' preceding and following each 21848keyword. This allows you to use them in header files without being 21849concerned about a possible macro of the same name. For example, you 21850may use `__aligned__' instead of `aligned'. 21851 21852 *Note Attribute Syntax::, for details of the exact syntax for using 21853attributes. 21854 21855`aligned (ALIGNMENT)' 21856 This attribute specifies a minimum alignment for the variable or 21857 structure field, measured in bytes. For example, the declaration: 21858 21859 int x __attribute__ ((aligned (16))) = 0; 21860 21861 causes the compiler to allocate the global variable `x' on a 21862 16-byte boundary. On a 68040, this could be used in conjunction 21863 with an `asm' expression to access the `move16' instruction which 21864 requires 16-byte aligned operands. 21865 21866 You can also specify the alignment of structure fields. For 21867 example, to create a double-word aligned `int' pair, you could 21868 write: 21869 21870 struct foo { int x[2] __attribute__ ((aligned (8))); }; 21871 21872 This is an alternative to creating a union with a `double' member 21873 that forces the union to be double-word aligned. 21874 21875 As in the preceding examples, you can explicitly specify the 21876 alignment (in bytes) that you wish the compiler to use for a given 21877 variable or structure field. Alternatively, you can leave out the 21878 alignment factor and just ask the compiler to align a variable or 21879 field to the default alignment for the target architecture you are 21880 compiling for. The default alignment is sufficient for all scalar 21881 types, but may not be enough for all vector types on a target 21882 which supports vector operations. The default alignment is fixed 21883 for a particular target ABI. 21884 21885 Gcc also provides a target specific macro `__BIGGEST_ALIGNMENT__', 21886 which is the largest alignment ever used for any data type on the 21887 target machine you are compiling for. For example, you could 21888 write: 21889 21890 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 21891 21892 The compiler automatically sets the alignment for the declared 21893 variable or field to `__BIGGEST_ALIGNMENT__'. Doing this can 21894 often make copy operations more efficient, because the compiler can 21895 use whatever instructions copy the biggest chunks of memory when 21896 performing copies to or from the variables or fields that you have 21897 aligned this way. Note that the value of `__BIGGEST_ALIGNMENT__' 21898 may change depending on command line options. 21899 21900 When used on a struct, or struct member, the `aligned' attribute 21901 can only increase the alignment; in order to decrease it, the 21902 `packed' attribute must be specified as well. When used as part 21903 of a typedef, the `aligned' attribute can both increase and 21904 decrease alignment, and specifying the `packed' attribute will 21905 generate a warning. 21906 21907 Note that the effectiveness of `aligned' attributes may be limited 21908 by inherent limitations in your linker. On many systems, the 21909 linker is only able to arrange for variables to be aligned up to a 21910 certain maximum alignment. (For some linkers, the maximum 21911 supported alignment may be very very small.) If your linker is 21912 only able to align variables up to a maximum of 8 byte alignment, 21913 then specifying `aligned(16)' in an `__attribute__' will still 21914 only provide you with 8 byte alignment. See your linker 21915 documentation for further information. 21916 21917 The `aligned' attribute can also be used for functions (*note 21918 Function Attributes::.) 21919 21920`cleanup (CLEANUP_FUNCTION)' 21921 The `cleanup' attribute runs a function when the variable goes out 21922 of scope. This attribute can only be applied to auto function 21923 scope variables; it may not be applied to parameters or variables 21924 with static storage duration. The function must take one 21925 parameter, a pointer to a type compatible with the variable. The 21926 return value of the function (if any) is ignored. 21927 21928 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run 21929 during the stack unwinding that happens during the processing of 21930 the exception. Note that the `cleanup' attribute does not allow 21931 the exception to be caught, only to perform an action. It is 21932 undefined what happens if CLEANUP_FUNCTION does not return 21933 normally. 21934 21935`common' 21936`nocommon' 21937 The `common' attribute requests GCC to place a variable in 21938 "common" storage. The `nocommon' attribute requests the 21939 opposite--to allocate space for it directly. 21940 21941 These attributes override the default chosen by the `-fno-common' 21942 and `-fcommon' flags respectively. 21943 21944`deprecated' 21945`deprecated (MSG)' 21946 The `deprecated' attribute results in a warning if the variable is 21947 used anywhere in the source file. This is useful when identifying 21948 variables that are expected to be removed in a future version of a 21949 program. The warning also includes the location of the declaration 21950 of the deprecated variable, to enable users to easily find further 21951 information about why the variable is deprecated, or what they 21952 should do instead. Note that the warning only occurs for uses: 21953 21954 extern int old_var __attribute__ ((deprecated)); 21955 extern int old_var; 21956 int new_fn () { return old_var; } 21957 21958 results in a warning on line 3 but not line 2. The optional msg 21959 argument, which must be a string, will be printed in the warning if 21960 present. 21961 21962 The `deprecated' attribute can also be used for functions and 21963 types (*note Function Attributes::, *note Type Attributes::.) 21964 21965`mode (MODE)' 21966 This attribute specifies the data type for the 21967 declaration--whichever type corresponds to the mode MODE. This in 21968 effect lets you request an integer or floating point type 21969 according to its width. 21970 21971 You may also specify a mode of `byte' or `__byte__' to indicate 21972 the mode corresponding to a one-byte integer, `word' or `__word__' 21973 for the mode of a one-word integer, and `pointer' or `__pointer__' 21974 for the mode used to represent pointers. 21975 21976`packed' 21977 The `packed' attribute specifies that a variable or structure field 21978 should have the smallest possible alignment--one byte for a 21979 variable, and one bit for a field, unless you specify a larger 21980 value with the `aligned' attribute. 21981 21982 Here is a structure in which the field `x' is packed, so that it 21983 immediately follows `a': 21984 21985 struct foo 21986 { 21987 char a; 21988 int x[2] __attribute__ ((packed)); 21989 }; 21990 21991 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' 21992 attribute on bit-fields of type `char'. This has been fixed in 21993 GCC 4.4 but the change can lead to differences in the structure 21994 layout. See the documentation of `-Wpacked-bitfield-compat' for 21995 more information. 21996 21997`section ("SECTION-NAME")' 21998 Normally, the compiler places the objects it generates in sections 21999 like `data' and `bss'. Sometimes, however, you need additional 22000 sections, or you need certain particular variables to appear in 22001 special sections, for example to map to special hardware. The 22002 `section' attribute specifies that a variable (or function) lives 22003 in a particular section. For example, this small program uses 22004 several specific section names: 22005 22006 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 22007 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 22008 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 22009 int init_data __attribute__ ((section ("INITDATA"))); 22010 22011 main() 22012 { 22013 /* Initialize stack pointer */ 22014 init_sp (stack + sizeof (stack)); 22015 22016 /* Initialize initialized data */ 22017 memcpy (&init_data, &data, &edata - &data); 22018 22019 /* Turn on the serial ports */ 22020 init_duart (&a); 22021 init_duart (&b); 22022 } 22023 22024 Use the `section' attribute with _global_ variables and not 22025 _local_ variables, as shown in the example. 22026 22027 You may use the `section' attribute with initialized or 22028 uninitialized global variables but the linker requires each object 22029 be defined once, with the exception that uninitialized variables 22030 tentatively go in the `common' (or `bss') section and can be 22031 multiply "defined". Using the `section' attribute will change 22032 what section the variable goes into and may cause the linker to 22033 issue an error if an uninitialized variable has multiple 22034 definitions. You can force a variable to be initialized with the 22035 `-fno-common' flag or the `nocommon' attribute. 22036 22037 Some file formats do not support arbitrary sections so the 22038 `section' attribute is not available on all platforms. If you 22039 need to map the entire contents of a module to a particular 22040 section, consider using the facilities of the linker instead. 22041 22042`shared' 22043 On Microsoft Windows, in addition to putting variable definitions 22044 in a named section, the section can also be shared among all 22045 running copies of an executable or DLL. For example, this small 22046 program defines shared data by putting it in a named section 22047 `shared' and marking the section shareable: 22048 22049 int foo __attribute__((section ("shared"), shared)) = 0; 22050 22051 int 22052 main() 22053 { 22054 /* Read and write foo. All running 22055 copies see the same value. */ 22056 return 0; 22057 } 22058 22059 You may only use the `shared' attribute along with `section' 22060 attribute with a fully initialized global definition because of 22061 the way linkers work. See `section' attribute for more 22062 information. 22063 22064 The `shared' attribute is only available on Microsoft Windows. 22065 22066`tls_model ("TLS_MODEL")' 22067 The `tls_model' attribute sets thread-local storage model (*note 22068 Thread-Local::) of a particular `__thread' variable, overriding 22069 `-ftls-model=' command-line switch on a per-variable basis. The 22070 TLS_MODEL argument should be one of `global-dynamic', 22071 `local-dynamic', `initial-exec' or `local-exec'. 22072 22073 Not all targets support this attribute. 22074 22075`unused' 22076 This attribute, attached to a variable, means that the variable is 22077 meant to be possibly unused. GCC will not produce a warning for 22078 this variable. 22079 22080`used' 22081 This attribute, attached to a variable, means that the variable 22082 must be emitted even if it appears that the variable is not 22083 referenced. 22084 22085`vector_size (BYTES)' 22086 This attribute specifies the vector size for the variable, 22087 measured in bytes. For example, the declaration: 22088 22089 int foo __attribute__ ((vector_size (16))); 22090 22091 causes the compiler to set the mode for `foo', to be 16 bytes, 22092 divided into `int' sized units. Assuming a 32-bit int (a vector of 22093 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI. 22094 22095 This attribute is only applicable to integral and float scalars, 22096 although arrays, pointers, and function return values are allowed 22097 in conjunction with this construct. 22098 22099 Aggregates with this attribute are invalid, even if they are of 22100 the same size as a corresponding scalar. For example, the 22101 declaration: 22102 22103 struct S { int a; }; 22104 struct S __attribute__ ((vector_size (16))) foo; 22105 22106 is invalid even if the size of the structure is the same as the 22107 size of the `int'. 22108 22109`selectany' 22110 The `selectany' attribute causes an initialized global variable to 22111 have link-once semantics. When multiple definitions of the 22112 variable are encountered by the linker, the first is selected and 22113 the remainder are discarded. Following usage by the Microsoft 22114 compiler, the linker is told _not_ to warn about size or content 22115 differences of the multiple definitions. 22116 22117 Although the primary usage of this attribute is for POD types, the 22118 attribute can also be applied to global C++ objects that are 22119 initialized by a constructor. In this case, the static 22120 initialization and destruction code for the object is emitted in 22121 each translation defining the object, but the calls to the 22122 constructor and destructor are protected by a link-once guard 22123 variable. 22124 22125 The `selectany' attribute is only available on Microsoft Windows 22126 targets. You can use `__declspec (selectany)' as a synonym for 22127 `__attribute__ ((selectany))' for compatibility with other 22128 compilers. 22129 22130`weak' 22131 The `weak' attribute is described in *note Function Attributes::. 22132 22133`dllimport' 22134 The `dllimport' attribute is described in *note Function 22135 Attributes::. 22136 22137`dllexport' 22138 The `dllexport' attribute is described in *note Function 22139 Attributes::. 22140 22141 221426.36.1 Blackfin Variable Attributes 22143----------------------------------- 22144 22145Three attributes are currently defined for the Blackfin. 22146 22147`l1_data' 22148`l1_data_A' 22149`l1_data_B' 22150 Use these attributes on the Blackfin to place the variable into L1 22151 Data SRAM. Variables with `l1_data' attribute will be put into 22152 the specific section named `.l1.data'. Those with `l1_data_A' 22153 attribute will be put into the specific section named 22154 `.l1.data.A'. Those with `l1_data_B' attribute will be put into 22155 the specific section named `.l1.data.B'. 22156 22157`l2' 22158 Use this attribute on the Blackfin to place the variable into L2 22159 SRAM. Variables with `l2' attribute will be put into the specific 22160 section named `.l2.data'. 22161 221626.36.2 M32R/D Variable Attributes 22163--------------------------------- 22164 22165One attribute is currently defined for the M32R/D. 22166 22167`model (MODEL-NAME)' 22168 Use this attribute on the M32R/D to set the addressability of an 22169 object. The identifier MODEL-NAME is one of `small', `medium', or 22170 `large', representing each of the code models. 22171 22172 Small model objects live in the lower 16MB of memory (so that their 22173 addresses can be loaded with the `ld24' instruction). 22174 22175 Medium and large model objects may live anywhere in the 32-bit 22176 address space (the compiler will generate `seth/add3' instructions 22177 to load their addresses). 22178 221796.36.3 MeP Variable Attributes 22180------------------------------ 22181 22182The MeP target has a number of addressing modes and busses. The `near' 22183space spans the standard memory space's first 16 megabytes (24 bits). 22184The `far' space spans the entire 32-bit memory space. The `based' 22185space is a 128 byte region in the memory space which is addressed 22186relative to the `$tp' register. The `tiny' space is a 65536 byte 22187region relative to the `$gp' register. In addition to these memory 22188regions, the MeP target has a separate 16-bit control bus which is 22189specified with `cb' attributes. 22190 22191`based' 22192 Any variable with the `based' attribute will be assigned to the 22193 `.based' section, and will be accessed with relative to the `$tp' 22194 register. 22195 22196`tiny' 22197 Likewise, the `tiny' attribute assigned variables to the `.tiny' 22198 section, relative to the `$gp' register. 22199 22200`near' 22201 Variables with the `near' attribute are assumed to have addresses 22202 that fit in a 24-bit addressing mode. This is the default for 22203 large variables (`-mtiny=4' is the default) but this attribute can 22204 override `-mtiny=' for small variables, or override `-ml'. 22205 22206`far' 22207 Variables with the `far' attribute are addressed using a full 22208 32-bit address. Since this covers the entire memory space, this 22209 allows modules to make no assumptions about where variables might 22210 be stored. 22211 22212`io' 22213`io (ADDR)' 22214 Variables with the `io' attribute are used to address 22215 memory-mapped peripherals. If an address is specified, the 22216 variable is assigned that address, else it is not assigned an 22217 address (it is assumed some other module will assign an address). 22218 Example: 22219 22220 int timer_count __attribute__((io(0x123))); 22221 22222`cb' 22223`cb (ADDR)' 22224 Variables with the `cb' attribute are used to access the control 22225 bus, using special instructions. `addr' indicates the control bus 22226 address. Example: 22227 22228 int cpu_clock __attribute__((cb(0x123))); 22229 22230 222316.36.4 i386 Variable Attributes 22232------------------------------- 22233 22234Two attributes are currently defined for i386 configurations: 22235`ms_struct' and `gcc_struct' 22236 22237`ms_struct' 22238`gcc_struct' 22239 If `packed' is used on a structure, or if bit-fields are used it 22240 may be that the Microsoft ABI packs them differently than GCC 22241 would normally pack them. Particularly when moving packed data 22242 between functions compiled with GCC and the native Microsoft 22243 compiler (either via function call or as data in a file), it may 22244 be necessary to access either format. 22245 22246 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 22247 Windows X86 compilers to match the native Microsoft compiler. 22248 22249 The Microsoft structure layout algorithm is fairly simple with the 22250 exception of the bitfield packing: 22251 22252 The padding and alignment of members of structures and whether a 22253 bit field can straddle a storage-unit boundary 22254 22255 1. Structure members are stored sequentially in the order in 22256 which they are declared: the first member has the lowest 22257 memory address and the last member the highest. 22258 22259 2. Every data object has an alignment-requirement. The 22260 alignment-requirement for all data except structures, unions, 22261 and arrays is either the size of the object or the current 22262 packing size (specified with either the aligned attribute or 22263 the pack pragma), whichever is less. For structures, unions, 22264 and arrays, the alignment-requirement is the largest 22265 alignment-requirement of its members. Every object is 22266 allocated an offset so that: 22267 22268 offset % alignment-requirement == 0 22269 22270 3. Adjacent bit fields are packed into the same 1-, 2-, or 22271 4-byte allocation unit if the integral types are the same 22272 size and if the next bit field fits into the current 22273 allocation unit without crossing the boundary imposed by the 22274 common alignment requirements of the bit fields. 22275 22276 Handling of zero-length bitfields: 22277 22278 MSVC interprets zero-length bitfields in the following ways: 22279 22280 1. If a zero-length bitfield is inserted between two bitfields 22281 that would normally be coalesced, the bitfields will not be 22282 coalesced. 22283 22284 For example: 22285 22286 struct 22287 { 22288 unsigned long bf_1 : 12; 22289 unsigned long : 0; 22290 unsigned long bf_2 : 12; 22291 } t1; 22292 22293 The size of `t1' would be 8 bytes with the zero-length 22294 bitfield. If the zero-length bitfield were removed, `t1''s 22295 size would be 4 bytes. 22296 22297 2. If a zero-length bitfield is inserted after a bitfield, 22298 `foo', and the alignment of the zero-length bitfield is 22299 greater than the member that follows it, `bar', `bar' will be 22300 aligned as the type of the zero-length bitfield. 22301 22302 For example: 22303 22304 struct 22305 { 22306 char foo : 4; 22307 short : 0; 22308 char bar; 22309 } t2; 22310 22311 struct 22312 { 22313 char foo : 4; 22314 short : 0; 22315 double bar; 22316 } t3; 22317 22318 For `t2', `bar' will be placed at offset 2, rather than 22319 offset 1. Accordingly, the size of `t2' will be 4. For 22320 `t3', the zero-length bitfield will not affect the alignment 22321 of `bar' or, as a result, the size of the structure. 22322 22323 Taking this into account, it is important to note the 22324 following: 22325 22326 1. If a zero-length bitfield follows a normal bitfield, the 22327 type of the zero-length bitfield may affect the 22328 alignment of the structure as whole. For example, `t2' 22329 has a size of 4 bytes, since the zero-length bitfield 22330 follows a normal bitfield, and is of type short. 22331 22332 2. Even if a zero-length bitfield is not followed by a 22333 normal bitfield, it may still affect the alignment of 22334 the structure: 22335 22336 struct 22337 { 22338 char foo : 6; 22339 long : 0; 22340 } t4; 22341 22342 Here, `t4' will take up 4 bytes. 22343 22344 3. Zero-length bitfields following non-bitfield members are 22345 ignored: 22346 22347 struct 22348 { 22349 char foo; 22350 long : 0; 22351 char bar; 22352 } t5; 22353 22354 Here, `t5' will take up 2 bytes. 22355 223566.36.5 PowerPC Variable Attributes 22357---------------------------------- 22358 22359Three attributes currently are defined for PowerPC configurations: 22360`altivec', `ms_struct' and `gcc_struct'. 22361 22362 For full documentation of the struct attributes please see the 22363documentation in *note i386 Variable Attributes::. 22364 22365 For documentation of `altivec' attribute please see the documentation 22366in *note PowerPC Type Attributes::. 22367 223686.36.6 SPU Variable Attributes 22369------------------------------ 22370 22371The SPU supports the `spu_vector' attribute for variables. For 22372documentation of this attribute please see the documentation in *note 22373SPU Type Attributes::. 22374 223756.36.7 Xstormy16 Variable Attributes 22376------------------------------------ 22377 22378One attribute is currently defined for xstormy16 configurations: 22379`below100'. 22380 22381`below100' 22382 If a variable has the `below100' attribute (`BELOW100' is allowed 22383 also), GCC will place the variable in the first 0x100 bytes of 22384 memory and use special opcodes to access it. Such variables will 22385 be placed in either the `.bss_below100' section or the 22386 `.data_below100' section. 22387 22388 223896.36.8 AVR Variable Attributes 22390------------------------------ 22391 22392`progmem' 22393 The `progmem' attribute is used on the AVR to place data in the 22394 Program Memory address space. The AVR is a Harvard Architecture 22395 processor and data normally resides in the Data Memory address 22396 space. 22397 22398 22399File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 22400 224016.37 Specifying Attributes of Types 22402=================================== 22403 22404The keyword `__attribute__' allows you to specify special attributes of 22405`struct' and `union' types when you define such types. This keyword is 22406followed by an attribute specification inside double parentheses. 22407Seven attributes are currently defined for types: `aligned', `packed', 22408`transparent_union', `unused', `deprecated', `visibility', and 22409`may_alias'. Other attributes are defined for functions (*note 22410Function Attributes::) and for variables (*note Variable Attributes::). 22411 22412 You may also specify any one of these attributes with `__' preceding 22413and following its keyword. This allows you to use these attributes in 22414header files without being concerned about a possible macro of the same 22415name. For example, you may use `__aligned__' instead of `aligned'. 22416 22417 You may specify type attributes in an enum, struct or union type 22418declaration or definition, or for other types in a `typedef' 22419declaration. 22420 22421 For an enum, struct or union type, you may specify attributes either 22422between the enum, struct or union tag and the name of the type, or just 22423past the closing curly brace of the _definition_. The former syntax is 22424preferred. 22425 22426 *Note Attribute Syntax::, for details of the exact syntax for using 22427attributes. 22428 22429`aligned (ALIGNMENT)' 22430 This attribute specifies a minimum alignment (in bytes) for 22431 variables of the specified type. For example, the declarations: 22432 22433 struct S { short f[3]; } __attribute__ ((aligned (8))); 22434 typedef int more_aligned_int __attribute__ ((aligned (8))); 22435 22436 force the compiler to insure (as far as it can) that each variable 22437 whose type is `struct S' or `more_aligned_int' will be allocated 22438 and aligned _at least_ on a 8-byte boundary. On a SPARC, having 22439 all variables of type `struct S' aligned to 8-byte boundaries 22440 allows the compiler to use the `ldd' and `std' (doubleword load and 22441 store) instructions when copying one variable of type `struct S' to 22442 another, thus improving run-time efficiency. 22443 22444 Note that the alignment of any given `struct' or `union' type is 22445 required by the ISO C standard to be at least a perfect multiple of 22446 the lowest common multiple of the alignments of all of the members 22447 of the `struct' or `union' in question. This means that you _can_ 22448 effectively adjust the alignment of a `struct' or `union' type by 22449 attaching an `aligned' attribute to any one of the members of such 22450 a type, but the notation illustrated in the example above is a 22451 more obvious, intuitive, and readable way to request the compiler 22452 to adjust the alignment of an entire `struct' or `union' type. 22453 22454 As in the preceding example, you can explicitly specify the 22455 alignment (in bytes) that you wish the compiler to use for a given 22456 `struct' or `union' type. Alternatively, you can leave out the 22457 alignment factor and just ask the compiler to align a type to the 22458 maximum useful alignment for the target machine you are compiling 22459 for. For example, you could write: 22460 22461 struct S { short f[3]; } __attribute__ ((aligned)); 22462 22463 Whenever you leave out the alignment factor in an `aligned' 22464 attribute specification, the compiler automatically sets the 22465 alignment for the type to the largest alignment which is ever used 22466 for any data type on the target machine you are compiling for. 22467 Doing this can often make copy operations more efficient, because 22468 the compiler can use whatever instructions copy the biggest chunks 22469 of memory when performing copies to or from the variables which 22470 have types that you have aligned this way. 22471 22472 In the example above, if the size of each `short' is 2 bytes, then 22473 the size of the entire `struct S' type is 6 bytes. The smallest 22474 power of two which is greater than or equal to that is 8, so the 22475 compiler sets the alignment for the entire `struct S' type to 8 22476 bytes. 22477 22478 Note that although you can ask the compiler to select a 22479 time-efficient alignment for a given type and then declare only 22480 individual stand-alone objects of that type, the compiler's 22481 ability to select a time-efficient alignment is primarily useful 22482 only when you plan to create arrays of variables having the 22483 relevant (efficiently aligned) type. If you declare or use arrays 22484 of variables of an efficiently-aligned type, then it is likely 22485 that your program will also be doing pointer arithmetic (or 22486 subscripting, which amounts to the same thing) on pointers to the 22487 relevant type, and the code that the compiler generates for these 22488 pointer arithmetic operations will often be more efficient for 22489 efficiently-aligned types than for other types. 22490 22491 The `aligned' attribute can only increase the alignment; but you 22492 can decrease it by specifying `packed' as well. See below. 22493 22494 Note that the effectiveness of `aligned' attributes may be limited 22495 by inherent limitations in your linker. On many systems, the 22496 linker is only able to arrange for variables to be aligned up to a 22497 certain maximum alignment. (For some linkers, the maximum 22498 supported alignment may be very very small.) If your linker is 22499 only able to align variables up to a maximum of 8 byte alignment, 22500 then specifying `aligned(16)' in an `__attribute__' will still 22501 only provide you with 8 byte alignment. See your linker 22502 documentation for further information. 22503 22504`packed' 22505 This attribute, attached to `struct' or `union' type definition, 22506 specifies that each member (other than zero-width bitfields) of 22507 the structure or union is placed to minimize the memory required. 22508 When attached to an `enum' definition, it indicates that the 22509 smallest integral type should be used. 22510 22511 Specifying this attribute for `struct' and `union' types is 22512 equivalent to specifying the `packed' attribute on each of the 22513 structure or union members. Specifying the `-fshort-enums' flag 22514 on the line is equivalent to specifying the `packed' attribute on 22515 all `enum' definitions. 22516 22517 In the following example `struct my_packed_struct''s members are 22518 packed closely together, but the internal layout of its `s' member 22519 is not packed--to do that, `struct my_unpacked_struct' would need 22520 to be packed too. 22521 22522 struct my_unpacked_struct 22523 { 22524 char c; 22525 int i; 22526 }; 22527 22528 struct __attribute__ ((__packed__)) my_packed_struct 22529 { 22530 char c; 22531 int i; 22532 struct my_unpacked_struct s; 22533 }; 22534 22535 You may only specify this attribute on the definition of an `enum', 22536 `struct' or `union', not on a `typedef' which does not also define 22537 the enumerated type, structure or union. 22538 22539`transparent_union' 22540 This attribute, attached to a `union' type definition, indicates 22541 that any function parameter having that union type causes calls to 22542 that function to be treated in a special way. 22543 22544 First, the argument corresponding to a transparent union type can 22545 be of any type in the union; no cast is required. Also, if the 22546 union contains a pointer type, the corresponding argument can be a 22547 null pointer constant or a void pointer expression; and if the 22548 union contains a void pointer type, the corresponding argument can 22549 be any pointer expression. If the union member type is a pointer, 22550 qualifiers like `const' on the referenced type must be respected, 22551 just as with normal pointer conversions. 22552 22553 Second, the argument is passed to the function using the calling 22554 conventions of the first member of the transparent union, not the 22555 calling conventions of the union itself. All members of the union 22556 must have the same machine representation; this is necessary for 22557 this argument passing to work properly. 22558 22559 Transparent unions are designed for library functions that have 22560 multiple interfaces for compatibility reasons. For example, 22561 suppose the `wait' function must accept either a value of type 22562 `int *' to comply with Posix, or a value of type `union wait *' to 22563 comply with the 4.1BSD interface. If `wait''s parameter were 22564 `void *', `wait' would accept both kinds of arguments, but it 22565 would also accept any other pointer type and this would make 22566 argument type checking less useful. Instead, `<sys/wait.h>' might 22567 define the interface as follows: 22568 22569 typedef union __attribute__ ((__transparent_union__)) 22570 { 22571 int *__ip; 22572 union wait *__up; 22573 } wait_status_ptr_t; 22574 22575 pid_t wait (wait_status_ptr_t); 22576 22577 This interface allows either `int *' or `union wait *' arguments 22578 to be passed, using the `int *' calling convention. The program 22579 can call `wait' with arguments of either type: 22580 22581 int w1 () { int w; return wait (&w); } 22582 int w2 () { union wait w; return wait (&w); } 22583 22584 With this interface, `wait''s implementation might look like this: 22585 22586 pid_t wait (wait_status_ptr_t p) 22587 { 22588 return waitpid (-1, p.__ip, 0); 22589 } 22590 22591`unused' 22592 When attached to a type (including a `union' or a `struct'), this 22593 attribute means that variables of that type are meant to appear 22594 possibly unused. GCC will not produce a warning for any variables 22595 of that type, even if the variable appears to do nothing. This is 22596 often the case with lock or thread classes, which are usually 22597 defined and then not referenced, but contain constructors and 22598 destructors that have nontrivial bookkeeping functions. 22599 22600`deprecated' 22601`deprecated (MSG)' 22602 The `deprecated' attribute results in a warning if the type is 22603 used anywhere in the source file. This is useful when identifying 22604 types that are expected to be removed in a future version of a 22605 program. If possible, the warning also includes the location of 22606 the declaration of the deprecated type, to enable users to easily 22607 find further information about why the type is deprecated, or what 22608 they should do instead. Note that the warnings only occur for 22609 uses and then only if the type is being applied to an identifier 22610 that itself is not being declared as deprecated. 22611 22612 typedef int T1 __attribute__ ((deprecated)); 22613 T1 x; 22614 typedef T1 T2; 22615 T2 y; 22616 typedef T1 T3 __attribute__ ((deprecated)); 22617 T3 z __attribute__ ((deprecated)); 22618 22619 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 22620 warning is issued for line 4 because T2 is not explicitly 22621 deprecated. Line 5 has no warning because T3 is explicitly 22622 deprecated. Similarly for line 6. The optional msg argument, 22623 which must be a string, will be printed in the warning if present. 22624 22625 The `deprecated' attribute can also be used for functions and 22626 variables (*note Function Attributes::, *note Variable 22627 Attributes::.) 22628 22629`may_alias' 22630 Accesses through pointers to types with this attribute are not 22631 subject to type-based alias analysis, but are instead assumed to 22632 be able to alias any other type of objects. In the context of 22633 6.5/7 an lvalue expression dereferencing such a pointer is treated 22634 like having a character type. See `-fstrict-aliasing' for more 22635 information on aliasing issues. This extension exists to support 22636 some vector APIs, in which pointers to one vector type are 22637 permitted to alias pointers to a different vector type. 22638 22639 Note that an object of a type with this attribute does not have any 22640 special semantics. 22641 22642 Example of use: 22643 22644 typedef short __attribute__((__may_alias__)) short_a; 22645 22646 int 22647 main (void) 22648 { 22649 int a = 0x12345678; 22650 short_a *b = (short_a *) &a; 22651 22652 b[1] = 0; 22653 22654 if (a == 0x12345678) 22655 abort(); 22656 22657 exit(0); 22658 } 22659 22660 If you replaced `short_a' with `short' in the variable 22661 declaration, the above program would abort when compiled with 22662 `-fstrict-aliasing', which is on by default at `-O2' or above in 22663 recent GCC versions. 22664 22665`visibility' 22666 In C++, attribute visibility (*note Function Attributes::) can 22667 also be applied to class, struct, union and enum types. Unlike 22668 other type attributes, the attribute must appear between the 22669 initial keyword and the name of the type; it cannot appear after 22670 the body of the type. 22671 22672 Note that the type visibility is applied to vague linkage entities 22673 associated with the class (vtable, typeinfo node, etc.). In 22674 particular, if a class is thrown as an exception in one shared 22675 object and caught in another, the class must have default 22676 visibility. Otherwise the two shared objects will be unable to 22677 use the same typeinfo node and exception handling will break. 22678 22679 226806.37.1 ARM Type Attributes 22681-------------------------- 22682 22683On those ARM targets that support `dllimport' (such as Symbian OS), you 22684can use the `notshared' attribute to indicate that the virtual table 22685and other similar data for a class should not be exported from a DLL. 22686For example: 22687 22688 class __declspec(notshared) C { 22689 public: 22690 __declspec(dllimport) C(); 22691 virtual void f(); 22692 } 22693 22694 __declspec(dllexport) 22695 C::C() {} 22696 22697 In this code, `C::C' is exported from the current DLL, but the virtual 22698table for `C' is not exported. (You can use `__attribute__' instead of 22699`__declspec' if you prefer, but most Symbian OS code uses `__declspec'.) 22700 227016.37.2 MeP Type Attributes 22702-------------------------- 22703 22704Many of the MeP variable attributes may be applied to types as well. 22705Specifically, the `based', `tiny', `near', and `far' attributes may be 22706applied to either. The `io' and `cb' attributes may not be applied to 22707types. 22708 227096.37.3 i386 Type Attributes 22710--------------------------- 22711 22712Two attributes are currently defined for i386 configurations: 22713`ms_struct' and `gcc_struct'. 22714 22715`ms_struct' 22716`gcc_struct' 22717 If `packed' is used on a structure, or if bit-fields are used it 22718 may be that the Microsoft ABI packs them differently than GCC 22719 would normally pack them. Particularly when moving packed data 22720 between functions compiled with GCC and the native Microsoft 22721 compiler (either via function call or as data in a file), it may 22722 be necessary to access either format. 22723 22724 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 22725 Windows X86 compilers to match the native Microsoft compiler. 22726 22727 To specify multiple attributes, separate them by commas within the 22728double parentheses: for example, `__attribute__ ((aligned (16), 22729packed))'. 22730 227316.37.4 PowerPC Type Attributes 22732------------------------------ 22733 22734Three attributes currently are defined for PowerPC configurations: 22735`altivec', `ms_struct' and `gcc_struct'. 22736 22737 For full documentation of the `ms_struct' and `gcc_struct' attributes 22738please see the documentation in *note i386 Type Attributes::. 22739 22740 The `altivec' attribute allows one to declare AltiVec vector data 22741types supported by the AltiVec Programming Interface Manual. The 22742attribute requires an argument to specify one of three vector types: 22743`vector__', `pixel__' (always followed by unsigned short), and `bool__' 22744(always followed by unsigned). 22745 22746 __attribute__((altivec(vector__))) 22747 __attribute__((altivec(pixel__))) unsigned short 22748 __attribute__((altivec(bool__))) unsigned 22749 22750 These attributes mainly are intended to support the `__vector', 22751`__pixel', and `__bool' AltiVec keywords. 22752 227536.37.5 SPU Type Attributes 22754-------------------------- 22755 22756The SPU supports the `spu_vector' attribute for types. This attribute 22757allows one to declare vector data types supported by the 22758Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 22759to support the `__vector' keyword. 22760 22761 22762File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 22763 227646.38 Inquiring on Alignment of Types or Variables 22765================================================= 22766 22767The keyword `__alignof__' allows you to inquire about how an object is 22768aligned, or the minimum alignment usually required by a type. Its 22769syntax is just like `sizeof'. 22770 22771 For example, if the target machine requires a `double' value to be 22772aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 22773is true on many RISC machines. On more traditional machine designs, 22774`__alignof__ (double)' is 4 or even 2. 22775 22776 Some machines never actually require alignment; they allow reference 22777to any data type even at an odd address. For these machines, 22778`__alignof__' reports the smallest alignment that GCC will give the 22779data type, usually as mandated by the target ABI. 22780 22781 If the operand of `__alignof__' is an lvalue rather than a type, its 22782value is the required alignment for its type, taking into account any 22783minimum alignment specified with GCC's `__attribute__' extension (*note 22784Variable Attributes::). For example, after this declaration: 22785 22786 struct foo { int x; char y; } foo1; 22787 22788the value of `__alignof__ (foo1.y)' is 1, even though its actual 22789alignment is probably 2 or 4, the same as `__alignof__ (int)'. 22790 22791 It is an error to ask for the alignment of an incomplete type. 22792 22793 22794File: gcc.info, Node: Inline, Next: Volatiles, Prev: Alignment, Up: C Extensions 22795 227966.39 An Inline Function is As Fast As a Macro 22797============================================= 22798 22799By declaring a function inline, you can direct GCC to make calls to 22800that function faster. One way GCC can achieve this is to integrate 22801that function's code into the code for its callers. This makes 22802execution faster by eliminating the function-call overhead; in 22803addition, if any of the actual argument values are constant, their 22804known values may permit simplifications at compile time so that not all 22805of the inline function's code needs to be included. The effect on code 22806size is less predictable; object code may be larger or smaller with 22807function inlining, depending on the particular case. You can also 22808direct GCC to try to integrate all "simple enough" functions into their 22809callers with the option `-finline-functions'. 22810 22811 GCC implements three different semantics of declaring a function 22812inline. One is available with `-std=gnu89' or `-fgnu89-inline' or when 22813`gnu_inline' attribute is present on all inline declarations, another 22814when `-std=c99', `-std=c1x', `-std=gnu99' or `-std=gnu1x' (without 22815`-fgnu89-inline'), and the third is used when compiling C++. 22816 22817 To declare a function inline, use the `inline' keyword in its 22818declaration, like this: 22819 22820 static inline int 22821 inc (int *a) 22822 { 22823 return (*a)++; 22824 } 22825 22826 If you are writing a header file to be included in ISO C90 programs, 22827write `__inline__' instead of `inline'. *Note Alternate Keywords::. 22828 22829 The three types of inlining behave similarly in two important cases: 22830when the `inline' keyword is used on a `static' function, like the 22831example above, and when a function is first declared without using the 22832`inline' keyword and then is defined with `inline', like this: 22833 22834 extern int inc (int *a); 22835 inline int 22836 inc (int *a) 22837 { 22838 return (*a)++; 22839 } 22840 22841 In both of these common cases, the program behaves the same as if you 22842had not used the `inline' keyword, except for its speed. 22843 22844 When a function is both inline and `static', if all calls to the 22845function are integrated into the caller, and the function's address is 22846never used, then the function's own assembler code is never referenced. 22847In this case, GCC does not actually output assembler code for the 22848function, unless you specify the option `-fkeep-inline-functions'. 22849Some calls cannot be integrated for various reasons (in particular, 22850calls that precede the function's definition cannot be integrated, and 22851neither can recursive calls within the definition). If there is a 22852nonintegrated call, then the function is compiled to assembler code as 22853usual. The function must also be compiled as usual if the program 22854refers to its address, because that can't be inlined. 22855 22856 Note that certain usages in a function definition can make it 22857unsuitable for inline substitution. Among these usages are: use of 22858varargs, use of alloca, use of variable sized data types (*note 22859Variable Length::), use of computed goto (*note Labels as Values::), 22860use of nonlocal goto, and nested functions (*note Nested Functions::). 22861Using `-Winline' will warn when a function marked `inline' could not be 22862substituted, and will give the reason for the failure. 22863 22864 As required by ISO C++, GCC considers member functions defined within 22865the body of a class to be marked inline even if they are not explicitly 22866declared with the `inline' keyword. You can override this with 22867`-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 22868Dialect Options. 22869 22870 GCC does not inline any functions when not optimizing unless you 22871specify the `always_inline' attribute for the function, like this: 22872 22873 /* Prototype. */ 22874 inline void foo (const char) __attribute__((always_inline)); 22875 22876 The remainder of this section is specific to GNU C90 inlining. 22877 22878 When an inline function is not `static', then the compiler must assume 22879that there may be calls from other source files; since a global symbol 22880can be defined only once in any program, the function must not be 22881defined in the other source files, so the calls therein cannot be 22882integrated. Therefore, a non-`static' inline function is always 22883compiled on its own in the usual fashion. 22884 22885 If you specify both `inline' and `extern' in the function definition, 22886then the definition is used only for inlining. In no case is the 22887function compiled on its own, not even if you refer to its address 22888explicitly. Such an address becomes an external reference, as if you 22889had only declared the function, and had not defined it. 22890 22891 This combination of `inline' and `extern' has almost the effect of a 22892macro. The way to use it is to put a function definition in a header 22893file with these keywords, and put another copy of the definition 22894(lacking `inline' and `extern') in a library file. The definition in 22895the header file will cause most calls to the function to be inlined. 22896If any uses of the function remain, they will refer to the single copy 22897in the library. 22898 22899 22900File: gcc.info, Node: Volatiles, Next: Extended Asm, Prev: Inline, Up: C Extensions 22901 229026.40 When is a Volatile Object Accessed? 22903======================================== 22904 22905C has the concept of volatile objects. These are normally accessed by 22906pointers and used for accessing hardware or inter-thread communication. 22907The standard encourages compilers to refrain from optimizations 22908concerning accesses to volatile objects, but leaves it implementation 22909defined as to what constitutes a volatile access. The minimum 22910requirement is that at a sequence point all previous accesses to 22911volatile objects have stabilized and no subsequent accesses have 22912occurred. Thus an implementation is free to reorder and combine 22913volatile accesses which occur between sequence points, but cannot do so 22914for accesses across a sequence point. The use of volatile does not 22915allow you to violate the restriction on updating objects multiple times 22916between two sequence points. 22917 22918 Accesses to non-volatile objects are not ordered with respect to 22919volatile accesses. You cannot use a volatile object as a memory 22920barrier to order a sequence of writes to non-volatile memory. For 22921instance: 22922 22923 int *ptr = SOMETHING; 22924 volatile int vobj; 22925 *ptr = SOMETHING; 22926 vobj = 1; 22927 22928 Unless *PTR and VOBJ can be aliased, it is not guaranteed that the 22929write to *PTR will have occurred by the time the update of VOBJ has 22930happened. If you need this guarantee, you must use a stronger memory 22931barrier such as: 22932 22933 int *ptr = SOMETHING; 22934 volatile int vobj; 22935 *ptr = SOMETHING; 22936 asm volatile ("" : : : "memory"); 22937 vobj = 1; 22938 22939 A scalar volatile object is read when it is accessed in a void context: 22940 22941 volatile int *src = SOMEVALUE; 22942 *src; 22943 22944 Such expressions are rvalues, and GCC implements this as a read of the 22945volatile object being pointed to. 22946 22947 Assignments are also expressions and have an rvalue. However when 22948assigning to a scalar volatile, the volatile object is not reread, 22949regardless of whether the assignment expression's rvalue is used or 22950not. If the assignment's rvalue is used, the value is that assigned to 22951the volatile object. For instance, there is no read of VOBJ in all the 22952following cases: 22953 22954 int obj; 22955 volatile int vobj; 22956 vobj = SOMETHING; 22957 obj = vobj = SOMETHING; 22958 obj ? vobj = ONETHING : vobj = ANOTHERTHING; 22959 obj = (SOMETHING, vobj = ANOTHERTHING); 22960 22961 If you need to read the volatile object after an assignment has 22962occurred, you must use a separate expression with an intervening 22963sequence point. 22964 22965 As bitfields are not individually addressable, volatile bitfields may 22966be implicitly read when written to, or when adjacent bitfields are 22967accessed. Bitfield operations may be optimized such that adjacent 22968bitfields are only partially accessed, if they straddle a storage unit 22969boundary. For these reasons it is unwise to use volatile bitfields to 22970access hardware. 22971 22972 22973File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Volatiles, Up: C Extensions 22974 229756.41 Assembler Instructions with C Expression Operands 22976====================================================== 22977 22978In an assembler instruction using `asm', you can specify the operands 22979of the instruction using C expressions. This means you need not guess 22980which registers or memory locations will contain the data you want to 22981use. 22982 22983 You must specify an assembler instruction template much like what 22984appears in a machine description, plus an operand constraint string for 22985each operand. 22986 22987 For example, here is how to use the 68881's `fsinx' instruction: 22988 22989 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 22990 22991Here `angle' is the C expression for the input operand while `result' 22992is that of the output operand. Each has `"f"' as its operand 22993constraint, saying that a floating point register is required. The `=' 22994in `=f' indicates that the operand is an output; all output operands' 22995constraints must use `='. The constraints use the same language used 22996in the machine description (*note Constraints::). 22997 22998 Each operand is described by an operand-constraint string followed by 22999the C expression in parentheses. A colon separates the assembler 23000template from the first output operand and another separates the last 23001output operand from the first input, if any. Commas separate the 23002operands within each group. The total number of operands is currently 23003limited to 30; this limitation may be lifted in some future version of 23004GCC. 23005 23006 If there are no output operands but there are input operands, you must 23007place two consecutive colons surrounding the place where the output 23008operands would go. 23009 23010 As of GCC version 3.1, it is also possible to specify input and output 23011operands using symbolic names which can be referenced within the 23012assembler code. These names are specified inside square brackets 23013preceding the constraint string, and can be referenced inside the 23014assembler code using `%[NAME]' instead of a percentage sign followed by 23015the operand number. Using named operands the above example could look 23016like: 23017 23018 asm ("fsinx %[angle],%[output]" 23019 : [output] "=f" (result) 23020 : [angle] "f" (angle)); 23021 23022Note that the symbolic operand names have no relation whatsoever to 23023other C identifiers. You may use any name you like, even those of 23024existing C symbols, but you must ensure that no two operands within the 23025same assembler construct use the same symbolic name. 23026 23027 Output operand expressions must be lvalues; the compiler can check 23028this. The input operands need not be lvalues. The compiler cannot 23029check whether the operands have data types that are reasonable for the 23030instruction being executed. It does not parse the assembler instruction 23031template and does not know what it means or even whether it is valid 23032assembler input. The extended `asm' feature is most often used for 23033machine instructions the compiler itself does not know exist. If the 23034output expression cannot be directly addressed (for example, it is a 23035bit-field), your constraint must allow a register. In that case, GCC 23036will use the register as the output of the `asm', and then store that 23037register into the output. 23038 23039 The ordinary output operands must be write-only; GCC will assume that 23040the values in these operands before the instruction are dead and need 23041not be generated. Extended asm supports input-output or read-write 23042operands. Use the constraint character `+' to indicate such an operand 23043and list it with the output operands. You should only use read-write 23044operands when the constraints for the operand (or the operand in which 23045only some of the bits are to be changed) allow a register. 23046 23047 You may, as an alternative, logically split its function into two 23048separate operands, one input operand and one write-only output operand. 23049The connection between them is expressed by constraints which say they 23050need to be in the same location when the instruction executes. You can 23051use the same C expression for both operands, or different expressions. 23052For example, here we write the (fictitious) `combine' instruction with 23053`bar' as its read-only source operand and `foo' as its read-write 23054destination: 23055 23056 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 23057 23058The constraint `"0"' for operand 1 says that it must occupy the same 23059location as operand 0. A number in constraint is allowed only in an 23060input operand and it must refer to an output operand. 23061 23062 Only a number in the constraint can guarantee that one operand will be 23063in the same place as another. The mere fact that `foo' is the value of 23064both operands is not enough to guarantee that they will be in the same 23065place in the generated assembler code. The following would not work 23066reliably: 23067 23068 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 23069 23070 Various optimizations or reloading could cause operands 0 and 1 to be 23071in different registers; GCC knows no reason not to do so. For example, 23072the compiler might find a copy of the value of `foo' in one register and 23073use it for operand 1, but generate the output operand 0 in a different 23074register (copying it afterward to `foo''s own address). Of course, 23075since the register for operand 1 is not even mentioned in the assembler 23076code, the result will not work, but GCC can't tell that. 23077 23078 As of GCC version 3.1, one may write `[NAME]' instead of the operand 23079number for a matching constraint. For example: 23080 23081 asm ("cmoveq %1,%2,%[result]" 23082 : [result] "=r"(result) 23083 : "r" (test), "r"(new), "[result]"(old)); 23084 23085 Sometimes you need to make an `asm' operand be a specific register, 23086but there's no matching constraint letter for that register _by 23087itself_. To force the operand into that register, use a local variable 23088for the operand and specify the register in the variable declaration. 23089*Note Explicit Reg Vars::. Then for the `asm' operand, use any 23090register constraint letter that matches the register: 23091 23092 register int *p1 asm ("r0") = ...; 23093 register int *p2 asm ("r1") = ...; 23094 register int *result asm ("r0"); 23095 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 23096 23097 In the above example, beware that a register that is call-clobbered by 23098the target ABI will be overwritten by any function call in the 23099assignment, including library calls for arithmetic operators. Also a 23100register may be clobbered when generating some operations, like 23101variable shift, memory copy or memory move on x86. Assuming it is a 23102call-clobbered register, this may happen to `r0' above by the 23103assignment to `p2'. If you have to use such a register, use temporary 23104variables for expressions between the register assignment and use: 23105 23106 int t1 = ...; 23107 register int *p1 asm ("r0") = ...; 23108 register int *p2 asm ("r1") = t1; 23109 register int *result asm ("r0"); 23110 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 23111 23112 Some instructions clobber specific hard registers. To describe this, 23113write a third colon after the input operands, followed by the names of 23114the clobbered hard registers (given as strings). Here is a realistic 23115example for the VAX: 23116 23117 asm volatile ("movc3 %0,%1,%2" 23118 : /* no outputs */ 23119 : "g" (from), "g" (to), "g" (count) 23120 : "r0", "r1", "r2", "r3", "r4", "r5"); 23121 23122 You may not write a clobber description in a way that overlaps with an 23123input or output operand. For example, you may not have an operand 23124describing a register class with one member if you mention that register 23125in the clobber list. Variables declared to live in specific registers 23126(*note Explicit Reg Vars::), and used as asm input or output operands 23127must have no part mentioned in the clobber description. There is no 23128way for you to specify that an input operand is modified without also 23129specifying it as an output operand. Note that if all the output 23130operands you specify are for this purpose (and hence unused), you will 23131then also need to specify `volatile' for the `asm' construct, as 23132described below, to prevent GCC from deleting the `asm' statement as 23133unused. 23134 23135 If you refer to a particular hardware register from the assembler code, 23136you will probably have to list the register after the third colon to 23137tell the compiler the register's value is modified. In some assemblers, 23138the register names begin with `%'; to produce one `%' in the assembler 23139code, you must write `%%' in the input. 23140 23141 If your assembler instruction can alter the condition code register, 23142add `cc' to the list of clobbered registers. GCC on some machines 23143represents the condition codes as a specific hardware register; `cc' 23144serves to name this register. On other machines, the condition code is 23145handled differently, and specifying `cc' has no effect. But it is 23146valid no matter what the machine. 23147 23148 If your assembler instructions access memory in an unpredictable 23149fashion, add `memory' to the list of clobbered registers. This will 23150cause GCC to not keep memory values cached in registers across the 23151assembler instruction and not optimize stores or loads to that memory. 23152You will also want to add the `volatile' keyword if the memory affected 23153is not listed in the inputs or outputs of the `asm', as the `memory' 23154clobber does not count as a side-effect of the `asm'. If you know how 23155large the accessed memory is, you can add it as input or output but if 23156this is not known, you should add `memory'. As an example, if you 23157access ten bytes of a string, you can use a memory input like: 23158 23159 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 23160 23161 Note that in the following example the memory input is necessary, 23162otherwise GCC might optimize the store to `x' away: 23163 int foo () 23164 { 23165 int x = 42; 23166 int *y = &x; 23167 int result; 23168 asm ("magic stuff accessing an 'int' pointed to by '%1'" 23169 "=&d" (r) : "a" (y), "m" (*y)); 23170 return result; 23171 } 23172 23173 You can put multiple assembler instructions together in a single `asm' 23174template, separated by the characters normally used in assembly code 23175for the system. A combination that works in most places is a newline 23176to break the line, plus a tab character to move to the instruction field 23177(written as `\n\t'). Sometimes semicolons can be used, if the 23178assembler allows semicolons as a line-breaking character. Note that 23179some assembler dialects use semicolons to start a comment. The input 23180operands are guaranteed not to use any of the clobbered registers, and 23181neither will the output operands' addresses, so you can read and write 23182the clobbered registers as many times as you like. Here is an example 23183of multiple instructions in a template; it assumes the subroutine 23184`_foo' accepts arguments in registers 9 and 10: 23185 23186 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 23187 : /* no outputs */ 23188 : "g" (from), "g" (to) 23189 : "r9", "r10"); 23190 23191 Unless an output operand has the `&' constraint modifier, GCC may 23192allocate it in the same register as an unrelated input operand, on the 23193assumption the inputs are consumed before the outputs are produced. 23194This assumption may be false if the assembler code actually consists of 23195more than one instruction. In such a case, use `&' for each output 23196operand that may not overlap an input. *Note Modifiers::. 23197 23198 If you want to test the condition code produced by an assembler 23199instruction, you must include a branch and a label in the `asm' 23200construct, as follows: 23201 23202 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 23203 : "g" (result) 23204 : "g" (input)); 23205 23206This assumes your assembler supports local labels, as the GNU assembler 23207and most Unix assemblers do. 23208 23209 Speaking of labels, jumps from one `asm' to another are not supported. 23210The compiler's optimizers do not know about these jumps, and therefore 23211they cannot take account of them when deciding how to optimize. *Note 23212Extended asm with goto::. 23213 23214 Usually the most convenient way to use these `asm' instructions is to 23215encapsulate them in macros that look like functions. For example, 23216 23217 #define sin(x) \ 23218 ({ double __value, __arg = (x); \ 23219 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 23220 __value; }) 23221 23222Here the variable `__arg' is used to make sure that the instruction 23223operates on a proper `double' value, and to accept only those arguments 23224`x' which can convert automatically to a `double'. 23225 23226 Another way to make sure the instruction operates on the correct data 23227type is to use a cast in the `asm'. This is different from using a 23228variable `__arg' in that it converts more different types. For 23229example, if the desired type were `int', casting the argument to `int' 23230would accept a pointer with no complaint, while assigning the argument 23231to an `int' variable named `__arg' would warn about using a pointer 23232unless the caller explicitly casts it. 23233 23234 If an `asm' has output operands, GCC assumes for optimization purposes 23235the instruction has no side effects except to change the output 23236operands. This does not mean instructions with a side effect cannot be 23237used, but you must be careful, because the compiler may eliminate them 23238if the output operands aren't used, or move them out of loops, or 23239replace two with one if they constitute a common subexpression. Also, 23240if your instruction does have a side effect on a variable that otherwise 23241appears not to change, the old value of the variable may be reused later 23242if it happens to be found in a register. 23243 23244 You can prevent an `asm' instruction from being deleted by writing the 23245keyword `volatile' after the `asm'. For example: 23246 23247 #define get_and_set_priority(new) \ 23248 ({ int __old; \ 23249 asm volatile ("get_and_set_priority %0, %1" \ 23250 : "=g" (__old) : "g" (new)); \ 23251 __old; }) 23252 23253The `volatile' keyword indicates that the instruction has important 23254side-effects. GCC will not delete a volatile `asm' if it is reachable. 23255(The instruction can still be deleted if GCC can prove that 23256control-flow will never reach the location of the instruction.) Note 23257that even a volatile `asm' instruction can be moved relative to other 23258code, including across jump instructions. For example, on many targets 23259there is a system register which can be set to control the rounding 23260mode of floating point operations. You might try setting it with a 23261volatile `asm', like this PowerPC example: 23262 23263 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 23264 sum = x + y; 23265 23266This will not work reliably, as the compiler may move the addition back 23267before the volatile `asm'. To make it work you need to add an 23268artificial dependency to the `asm' referencing a variable in the code 23269you don't want moved, for example: 23270 23271 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 23272 sum = x + y; 23273 23274 Similarly, you can't expect a sequence of volatile `asm' instructions 23275to remain perfectly consecutive. If you want consecutive output, use a 23276single `asm'. Also, GCC will perform some optimizations across a 23277volatile `asm' instruction; GCC does not "forget everything" when it 23278encounters a volatile `asm' instruction the way some other compilers do. 23279 23280 An `asm' instruction without any output operands will be treated 23281identically to a volatile `asm' instruction. 23282 23283 It is a natural idea to look for a way to give access to the condition 23284code left by the assembler instruction. However, when we attempted to 23285implement this, we found no way to make it work reliably. The problem 23286is that output operands might need reloading, which would result in 23287additional following "store" instructions. On most machines, these 23288instructions would alter the condition code before there was time to 23289test it. This problem doesn't arise for ordinary "test" and "compare" 23290instructions because they don't have any output operands. 23291 23292 For reasons similar to those described above, it is not possible to 23293give an assembler instruction access to the condition code left by 23294previous instructions. 23295 23296 As of GCC version 4.5, `asm goto' may be used to have the assembly 23297jump to one or more C labels. In this form, a fifth section after the 23298clobber list contains a list of all C labels to which the assembly may 23299jump. Each label operand is implicitly self-named. The `asm' is also 23300assumed to fall through to the next statement. 23301 23302 This form of `asm' is restricted to not have outputs. This is due to 23303a internal restriction in the compiler that control transfer 23304instructions cannot have outputs. This restriction on `asm goto' may 23305be lifted in some future version of the compiler. In the mean time, 23306`asm goto' may include a memory clobber, and so leave outputs in memory. 23307 23308 int frob(int x) 23309 { 23310 int y; 23311 asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5" 23312 : : "r"(x), "r"(&y) : "r5", "memory" : error); 23313 return y; 23314 error: 23315 return -1; 23316 } 23317 23318 In this (inefficient) example, the `frob' instruction sets the carry 23319bit to indicate an error. The `jc' instruction detects this and 23320branches to the `error' label. Finally, the output of the `frob' 23321instruction (`%r5') is stored into the memory for variable `y', which 23322is later read by the `return' statement. 23323 23324 void doit(void) 23325 { 23326 int i = 0; 23327 asm goto ("mfsr %%r1, 123; jmp %%r1;" 23328 ".pushsection doit_table;" 23329 ".long %l0, %l1, %l2, %l3;" 23330 ".popsection" 23331 : : : "r1" : label1, label2, label3, label4); 23332 __builtin_unreachable (); 23333 23334 label1: 23335 f1(); 23336 return; 23337 label2: 23338 f2(); 23339 return; 23340 label3: 23341 i = 1; 23342 label4: 23343 f3(i); 23344 } 23345 23346 In this (also inefficient) example, the `mfsr' instruction reads an 23347address from some out-of-band machine register, and the following `jmp' 23348instruction branches to that address. The address read by the `mfsr' 23349instruction is assumed to have been previously set via some 23350application-specific mechanism to be one of the four values stored in 23351the `doit_table' section. Finally, the `asm' is followed by a call to 23352`__builtin_unreachable' to indicate that the `asm' does not in fact 23353fall through. 23354 23355 #define TRACE1(NUM) \ 23356 do { \ 23357 asm goto ("0: nop;" \ 23358 ".pushsection trace_table;" \ 23359 ".long 0b, %l0;" \ 23360 ".popsection" \ 23361 : : : : trace#NUM); \ 23362 if (0) { trace#NUM: trace(); } \ 23363 } while (0) 23364 #define TRACE TRACE1(__COUNTER__) 23365 23366 In this example (which in fact inspired the `asm goto' feature) we 23367want on rare occasions to call the `trace' function; on other occasions 23368we'd like to keep the overhead to the absolute minimum. The normal 23369code path consists of a single `nop' instruction. However, we record 23370the address of this `nop' together with the address of a label that 23371calls the `trace' function. This allows the `nop' instruction to be 23372patched at runtime to be an unconditional branch to the stored label. 23373It is assumed that an optimizing compiler will move the labeled block 23374out of line, to optimize the fall through path from the `asm'. 23375 23376 If you are writing a header file that should be includable in ISO C 23377programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 23378 233796.41.1 Size of an `asm' 23380----------------------- 23381 23382Some targets require that GCC track the size of each instruction used in 23383order to generate correct code. Because the final length of an `asm' 23384is only known by the assembler, GCC must make an estimate as to how big 23385it will be. The estimate is formed by counting the number of 23386statements in the pattern of the `asm' and multiplying that by the 23387length of the longest instruction on that processor. Statements in the 23388`asm' are identified by newline characters and whatever statement 23389separator characters are supported by the assembler; on most processors 23390this is the ``;'' character. 23391 23392 Normally, GCC's estimate is perfectly adequate to ensure that correct 23393code is generated, but it is possible to confuse the compiler if you use 23394pseudo instructions or assembler macros that expand into multiple real 23395instructions or if you use assembler directives that expand to more 23396space in the object file than would be needed for a single instruction. 23397If this happens then the assembler will produce a diagnostic saying that 23398a label is unreachable. 23399 234006.41.2 i386 floating point asm operands 23401--------------------------------------- 23402 23403There are several rules on the usage of stack-like regs in asm_operands 23404insns. These rules apply only to the operands that are stack-like regs: 23405 23406 1. Given a set of input regs that die in an asm_operands, it is 23407 necessary to know which are implicitly popped by the asm, and 23408 which must be explicitly popped by gcc. 23409 23410 An input reg that is implicitly popped by the asm must be 23411 explicitly clobbered, unless it is constrained to match an output 23412 operand. 23413 23414 2. For any input reg that is implicitly popped by an asm, it is 23415 necessary to know how to adjust the stack to compensate for the 23416 pop. If any non-popped input is closer to the top of the 23417 reg-stack than the implicitly popped reg, it would not be possible 23418 to know what the stack looked like--it's not clear how the rest of 23419 the stack "slides up". 23420 23421 All implicitly popped input regs must be closer to the top of the 23422 reg-stack than any input that is not implicitly popped. 23423 23424 It is possible that if an input dies in an insn, reload might use 23425 the input reg for an output reload. Consider this example: 23426 23427 asm ("foo" : "=t" (a) : "f" (b)); 23428 23429 This asm says that input B is not popped by the asm, and that the 23430 asm pushes a result onto the reg-stack, i.e., the stack is one 23431 deeper after the asm than it was before. But, it is possible that 23432 reload will think that it can use the same reg for both the input 23433 and the output, if input B dies in this insn. 23434 23435 If any input operand uses the `f' constraint, all output reg 23436 constraints must use the `&' earlyclobber. 23437 23438 The asm above would be written as 23439 23440 asm ("foo" : "=&t" (a) : "f" (b)); 23441 23442 3. Some operands need to be in particular places on the stack. All 23443 output operands fall in this category--there is no other way to 23444 know which regs the outputs appear in unless the user indicates 23445 this in the constraints. 23446 23447 Output operands must specifically indicate which reg an output 23448 appears in after an asm. `=f' is not allowed: the operand 23449 constraints must select a class with a single reg. 23450 23451 4. Output operands may not be "inserted" between existing stack regs. 23452 Since no 387 opcode uses a read/write operand, all output operands 23453 are dead before the asm_operands, and are pushed by the 23454 asm_operands. It makes no sense to push anywhere but the top of 23455 the reg-stack. 23456 23457 Output operands must start at the top of the reg-stack: output 23458 operands may not "skip" a reg. 23459 23460 5. Some asm statements may need extra stack space for internal 23461 calculations. This can be guaranteed by clobbering stack registers 23462 unrelated to the inputs and outputs. 23463 23464 23465 Here are a couple of reasonable asms to want to write. This asm takes 23466one input, which is internally popped, and produces two outputs. 23467 23468 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 23469 23470 This asm takes two inputs, which are popped by the `fyl2xp1' opcode, 23471and replaces them with one output. The user must code the `st(1)' 23472clobber for reg-stack.c to know that `fyl2xp1' pops both inputs. 23473 23474 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 23475 23476 23477File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 23478 234796.42 Constraints for `asm' Operands 23480=================================== 23481 23482Here are specific details on what constraint letters you can use with 23483`asm' operands. Constraints can say whether an operand may be in a 23484register, and which kinds of register; whether the operand can be a 23485memory reference, and which kinds of address; whether the operand may 23486be an immediate constant, and which possible values it may have. 23487Constraints can also require two operands to match. Side-effects 23488aren't allowed in operands of inline `asm', unless `<' or `>' 23489constraints are used, because there is no guarantee that the 23490side-effects will happen exactly once in an instruction that can update 23491the addressing register. 23492 23493* Menu: 23494 23495* Simple Constraints:: Basic use of constraints. 23496* Multi-Alternative:: When an insn has two alternative constraint-patterns. 23497* Modifiers:: More precise control over effects of constraints. 23498* Machine Constraints:: Special constraints for some particular machines. 23499 23500 23501File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 23502 235036.42.1 Simple Constraints 23504------------------------- 23505 23506The simplest kind of constraint is a string full of letters, each of 23507which describes one kind of operand that is permitted. Here are the 23508letters that are allowed: 23509 23510whitespace 23511 Whitespace characters are ignored and can be inserted at any 23512 position except the first. This enables each alternative for 23513 different operands to be visually aligned in the machine 23514 description even if they have different number of constraints and 23515 modifiers. 23516 23517`m' 23518 A memory operand is allowed, with any kind of address that the 23519 machine supports in general. Note that the letter used for the 23520 general memory constraint can be re-defined by a back end using 23521 the `TARGET_MEM_CONSTRAINT' macro. 23522 23523`o' 23524 A memory operand is allowed, but only if the address is 23525 "offsettable". This means that adding a small integer (actually, 23526 the width in bytes of the operand, as determined by its machine 23527 mode) may be added to the address and the result is also a valid 23528 memory address. 23529 23530 For example, an address which is constant is offsettable; so is an 23531 address that is the sum of a register and a constant (as long as a 23532 slightly larger constant is also within the range of 23533 address-offsets supported by the machine); but an autoincrement or 23534 autodecrement address is not offsettable. More complicated 23535 indirect/indexed addresses may or may not be offsettable depending 23536 on the other addressing modes that the machine supports. 23537 23538 Note that in an output operand which can be matched by another 23539 operand, the constraint letter `o' is valid only when accompanied 23540 by both `<' (if the target machine has predecrement addressing) 23541 and `>' (if the target machine has preincrement addressing). 23542 23543`V' 23544 A memory operand that is not offsettable. In other words, 23545 anything that would fit the `m' constraint but not the `o' 23546 constraint. 23547 23548`<' 23549 A memory operand with autodecrement addressing (either 23550 predecrement or postdecrement) is allowed. In inline `asm' this 23551 constraint is only allowed if the operand is used exactly once in 23552 an instruction that can handle the side-effects. Not using an 23553 operand with `<' in constraint string in the inline `asm' pattern 23554 at all or using it in multiple instructions isn't valid, because 23555 the side-effects wouldn't be performed or would be performed more 23556 than once. Furthermore, on some targets the operand with `<' in 23557 constraint string must be accompanied by special instruction 23558 suffixes like `%U0' instruction suffix on PowerPC or `%P0' on 23559 IA-64. 23560 23561`>' 23562 A memory operand with autoincrement addressing (either 23563 preincrement or postincrement) is allowed. In inline `asm' the 23564 same restrictions as for `<' apply. 23565 23566`r' 23567 A register operand is allowed provided that it is in a general 23568 register. 23569 23570`i' 23571 An immediate integer operand (one with constant value) is allowed. 23572 This includes symbolic constants whose values will be known only at 23573 assembly time or later. 23574 23575`n' 23576 An immediate integer operand with a known numeric value is allowed. 23577 Many systems cannot support assembly-time constants for operands 23578 less than a word wide. Constraints for these operands should use 23579 `n' rather than `i'. 23580 23581`I', `J', `K', ... `P' 23582 Other letters in the range `I' through `P' may be defined in a 23583 machine-dependent fashion to permit immediate integer operands with 23584 explicit integer values in specified ranges. For example, on the 23585 68000, `I' is defined to stand for the range of values 1 to 8. 23586 This is the range permitted as a shift count in the shift 23587 instructions. 23588 23589`E' 23590 An immediate floating operand (expression code `const_double') is 23591 allowed, but only if the target floating point format is the same 23592 as that of the host machine (on which the compiler is running). 23593 23594`F' 23595 An immediate floating operand (expression code `const_double' or 23596 `const_vector') is allowed. 23597 23598`G', `H' 23599 `G' and `H' may be defined in a machine-dependent fashion to 23600 permit immediate floating operands in particular ranges of values. 23601 23602`s' 23603 An immediate integer operand whose value is not an explicit 23604 integer is allowed. 23605 23606 This might appear strange; if an insn allows a constant operand 23607 with a value not known at compile time, it certainly must allow 23608 any known value. So why use `s' instead of `i'? Sometimes it 23609 allows better code to be generated. 23610 23611 For example, on the 68000 in a fullword instruction it is possible 23612 to use an immediate operand; but if the immediate value is between 23613 -128 and 127, better code results from loading the value into a 23614 register and using the register. This is because the load into 23615 the register can be done with a `moveq' instruction. We arrange 23616 for this to happen by defining the letter `K' to mean "any integer 23617 outside the range -128 to 127", and then specifying `Ks' in the 23618 operand constraints. 23619 23620`g' 23621 Any register, memory or immediate integer operand is allowed, 23622 except for registers that are not general registers. 23623 23624`X' 23625 Any operand whatsoever is allowed. 23626 23627`0', `1', `2', ... `9' 23628 An operand that matches the specified operand number is allowed. 23629 If a digit is used together with letters within the same 23630 alternative, the digit should come last. 23631 23632 This number is allowed to be more than a single digit. If multiple 23633 digits are encountered consecutively, they are interpreted as a 23634 single decimal integer. There is scant chance for ambiguity, 23635 since to-date it has never been desirable that `10' be interpreted 23636 as matching either operand 1 _or_ operand 0. Should this be 23637 desired, one can use multiple alternatives instead. 23638 23639 This is called a "matching constraint" and what it really means is 23640 that the assembler has only a single operand that fills two roles 23641 which `asm' distinguishes. For example, an add instruction uses 23642 two input operands and an output operand, but on most CISC 23643 machines an add instruction really has only two operands, one of 23644 them an input-output operand: 23645 23646 addl #35,r12 23647 23648 Matching constraints are used in these circumstances. More 23649 precisely, the two operands that match must include one input-only 23650 operand and one output-only operand. Moreover, the digit must be a 23651 smaller number than the number of the operand that uses it in the 23652 constraint. 23653 23654`p' 23655 An operand that is a valid memory address is allowed. This is for 23656 "load address" and "push address" instructions. 23657 23658 `p' in the constraint must be accompanied by `address_operand' as 23659 the predicate in the `match_operand'. This predicate interprets 23660 the mode specified in the `match_operand' as the mode of the memory 23661 reference for which the address would be valid. 23662 23663OTHER-LETTERS 23664 Other letters can be defined in machine-dependent fashion to stand 23665 for particular classes of registers or other arbitrary operand 23666 types. `d', `a' and `f' are defined on the 68000/68020 to stand 23667 for data, address and floating point registers. 23668 23669 23670File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 23671 236726.42.2 Multiple Alternative Constraints 23673--------------------------------------- 23674 23675Sometimes a single instruction has multiple alternative sets of possible 23676operands. For example, on the 68000, a logical-or instruction can 23677combine register or an immediate value into memory, or it can combine 23678any kind of operand into a register; but it cannot combine one memory 23679location into another. 23680 23681 These constraints are represented as multiple alternatives. An 23682alternative can be described by a series of letters for each operand. 23683The overall constraint for an operand is made from the letters for this 23684operand from the first alternative, a comma, the letters for this 23685operand from the second alternative, a comma, and so on until the last 23686alternative. 23687 23688 If all the operands fit any one alternative, the instruction is valid. 23689Otherwise, for each alternative, the compiler counts how many 23690instructions must be added to copy the operands so that that 23691alternative applies. The alternative requiring the least copying is 23692chosen. If two alternatives need the same amount of copying, the one 23693that comes first is chosen. These choices can be altered with the `?' 23694and `!' characters: 23695 23696`?' 23697 Disparage slightly the alternative that the `?' appears in, as a 23698 choice when no alternative applies exactly. The compiler regards 23699 this alternative as one unit more costly for each `?' that appears 23700 in it. 23701 23702`!' 23703 Disparage severely the alternative that the `!' appears in. This 23704 alternative can still be used if it fits without reloading, but if 23705 reloading is needed, some other alternative will be used. 23706 23707 23708File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 23709 237106.42.3 Constraint Modifier Characters 23711------------------------------------- 23712 23713Here are constraint modifier characters. 23714 23715`=' 23716 Means that this operand is write-only for this instruction: the 23717 previous value is discarded and replaced by output data. 23718 23719`+' 23720 Means that this operand is both read and written by the 23721 instruction. 23722 23723 When the compiler fixes up the operands to satisfy the constraints, 23724 it needs to know which operands are inputs to the instruction and 23725 which are outputs from it. `=' identifies an output; `+' 23726 identifies an operand that is both input and output; all other 23727 operands are assumed to be input only. 23728 23729 If you specify `=' or `+' in a constraint, you put it in the first 23730 character of the constraint string. 23731 23732`&' 23733 Means (in a particular alternative) that this operand is an 23734 "earlyclobber" operand, which is modified before the instruction is 23735 finished using the input operands. Therefore, this operand may 23736 not lie in a register that is used as an input operand or as part 23737 of any memory address. 23738 23739 `&' applies only to the alternative in which it is written. In 23740 constraints with multiple alternatives, sometimes one alternative 23741 requires `&' while others do not. See, for example, the `movdf' 23742 insn of the 68000. 23743 23744 An input operand can be tied to an earlyclobber operand if its only 23745 use as an input occurs before the early result is written. Adding 23746 alternatives of this form often allows GCC to produce better code 23747 when only some of the inputs can be affected by the earlyclobber. 23748 See, for example, the `mulsi3' insn of the ARM. 23749 23750 `&' does not obviate the need to write `='. 23751 23752`%' 23753 Declares the instruction to be commutative for this operand and the 23754 following operand. This means that the compiler may interchange 23755 the two operands if that is the cheapest way to make all operands 23756 fit the constraints. GCC can only handle one commutative pair in 23757 an asm; if you use more, the compiler may fail. Note that you 23758 need not use the modifier if the two alternatives are strictly 23759 identical; this would only waste time in the reload pass. The 23760 modifier is not operational after register allocation, so the 23761 result of `define_peephole2' and `define_split's performed after 23762 reload cannot rely on `%' to make the intended insn match. 23763 23764`#' 23765 Says that all following characters, up to the next comma, are to be 23766 ignored as a constraint. They are significant only for choosing 23767 register preferences. 23768 23769`*' 23770 Says that the following character should be ignored when choosing 23771 register preferences. `*' has no effect on the meaning of the 23772 constraint as a constraint, and no effect on reloading. 23773 23774 23775 23776File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 23777 237786.42.4 Constraints for Particular Machines 23779------------------------------------------ 23780 23781Whenever possible, you should use the general-purpose constraint letters 23782in `asm' arguments, since they will convey meaning more readily to 23783people reading your code. Failing that, use the constraint letters 23784that usually have very similar meanings across architectures. The most 23785commonly used constraints are `m' and `r' (for memory and 23786general-purpose registers respectively; *note Simple Constraints::), and 23787`I', usually the letter indicating the most common immediate-constant 23788format. 23789 23790 Each architecture defines additional constraints. These constraints 23791are used by the compiler itself for instruction generation, as well as 23792for `asm' statements; therefore, some of the constraints are not 23793particularly useful for `asm'. Here is a summary of some of the 23794machine-dependent constraints available on some particular machines; it 23795includes both constraints that are useful for `asm' and constraints 23796that aren't. The compiler source file mentioned in the table heading 23797for each architecture is the definitive reference for the meanings of 23798that architecture's constraints. 23799 23800_ARM family--`config/arm/arm.h'_ 23801 23802 `f' 23803 Floating-point register 23804 23805 `w' 23806 VFP floating-point register 23807 23808 `F' 23809 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 23810 4.0, 5.0 or 10.0 23811 23812 `G' 23813 Floating-point constant that would satisfy the constraint `F' 23814 if it were negated 23815 23816 `I' 23817 Integer that is valid as an immediate operand in a data 23818 processing instruction. That is, an integer in the range 0 23819 to 255 rotated by a multiple of 2 23820 23821 `J' 23822 Integer in the range -4095 to 4095 23823 23824 `K' 23825 Integer that satisfies constraint `I' when inverted (ones 23826 complement) 23827 23828 `L' 23829 Integer that satisfies constraint `I' when negated (twos 23830 complement) 23831 23832 `M' 23833 Integer in the range 0 to 32 23834 23835 `Q' 23836 A memory reference where the exact address is in a single 23837 register (``m'' is preferable for `asm' statements) 23838 23839 `R' 23840 An item in the constant pool 23841 23842 `S' 23843 A symbol in the text segment of the current file 23844 23845 `Uv' 23846 A memory reference suitable for VFP load/store insns 23847 (reg+constant offset) 23848 23849 `Uy' 23850 A memory reference suitable for iWMMXt load/store 23851 instructions. 23852 23853 `Uq' 23854 A memory reference suitable for the ARMv4 ldrsb instruction. 23855 23856_AVR family--`config/avr/constraints.md'_ 23857 23858 `l' 23859 Registers from r0 to r15 23860 23861 `a' 23862 Registers from r16 to r23 23863 23864 `d' 23865 Registers from r16 to r31 23866 23867 `w' 23868 Registers from r24 to r31. These registers can be used in 23869 `adiw' command 23870 23871 `e' 23872 Pointer register (r26-r31) 23873 23874 `b' 23875 Base pointer register (r28-r31) 23876 23877 `q' 23878 Stack pointer register (SPH:SPL) 23879 23880 `t' 23881 Temporary register r0 23882 23883 `x' 23884 Register pair X (r27:r26) 23885 23886 `y' 23887 Register pair Y (r29:r28) 23888 23889 `z' 23890 Register pair Z (r31:r30) 23891 23892 `I' 23893 Constant greater than -1, less than 64 23894 23895 `J' 23896 Constant greater than -64, less than 1 23897 23898 `K' 23899 Constant integer 2 23900 23901 `L' 23902 Constant integer 0 23903 23904 `M' 23905 Constant that fits in 8 bits 23906 23907 `N' 23908 Constant integer -1 23909 23910 `O' 23911 Constant integer 8, 16, or 24 23912 23913 `P' 23914 Constant integer 1 23915 23916 `G' 23917 A floating point constant 0.0 23918 23919 `R' 23920 Integer constant in the range -6 ... 5. 23921 23922 `Q' 23923 A memory address based on Y or Z pointer with displacement. 23924 23925_CRX Architecture--`config/crx/crx.h'_ 23926 23927 `b' 23928 Registers from r0 to r14 (registers without stack pointer) 23929 23930 `l' 23931 Register r16 (64-bit accumulator lo register) 23932 23933 `h' 23934 Register r17 (64-bit accumulator hi register) 23935 23936 `k' 23937 Register pair r16-r17. (64-bit accumulator lo-hi pair) 23938 23939 `I' 23940 Constant that fits in 3 bits 23941 23942 `J' 23943 Constant that fits in 4 bits 23944 23945 `K' 23946 Constant that fits in 5 bits 23947 23948 `L' 23949 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 23950 23951 `G' 23952 Floating point constant that is legal for store immediate 23953 23954_Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 23955 23956 `a' 23957 General register 1 23958 23959 `f' 23960 Floating point register 23961 23962 `q' 23963 Shift amount register 23964 23965 `x' 23966 Floating point register (deprecated) 23967 23968 `y' 23969 Upper floating point register (32-bit), floating point 23970 register (64-bit) 23971 23972 `Z' 23973 Any register 23974 23975 `I' 23976 Signed 11-bit integer constant 23977 23978 `J' 23979 Signed 14-bit integer constant 23980 23981 `K' 23982 Integer constant that can be deposited with a `zdepi' 23983 instruction 23984 23985 `L' 23986 Signed 5-bit integer constant 23987 23988 `M' 23989 Integer constant 0 23990 23991 `N' 23992 Integer constant that can be loaded with a `ldil' instruction 23993 23994 `O' 23995 Integer constant whose value plus one is a power of 2 23996 23997 `P' 23998 Integer constant that can be used for `and' operations in 23999 `depi' and `extru' instructions 24000 24001 `S' 24002 Integer constant 31 24003 24004 `U' 24005 Integer constant 63 24006 24007 `G' 24008 Floating-point constant 0.0 24009 24010 `A' 24011 A `lo_sum' data-linkage-table memory operand 24012 24013 `Q' 24014 A memory operand that can be used as the destination operand 24015 of an integer store instruction 24016 24017 `R' 24018 A scaled or unscaled indexed memory operand 24019 24020 `T' 24021 A memory operand for floating-point loads and stores 24022 24023 `W' 24024 A register indirect memory operand 24025 24026_picoChip family--`picochip.h'_ 24027 24028 `k' 24029 Stack register. 24030 24031 `f' 24032 Pointer register. A register which can be used to access 24033 memory without supplying an offset. Any other register can 24034 be used to access memory, but will need a constant offset. 24035 In the case of the offset being zero, it is more efficient to 24036 use a pointer register, since this reduces code size. 24037 24038 `t' 24039 A twin register. A register which may be paired with an 24040 adjacent register to create a 32-bit register. 24041 24042 `a' 24043 Any absolute memory address (e.g., symbolic constant, symbolic 24044 constant + offset). 24045 24046 `I' 24047 4-bit signed integer. 24048 24049 `J' 24050 4-bit unsigned integer. 24051 24052 `K' 24053 8-bit signed integer. 24054 24055 `M' 24056 Any constant whose absolute value is no greater than 4-bits. 24057 24058 `N' 24059 10-bit signed integer 24060 24061 `O' 24062 16-bit signed integer. 24063 24064 24065_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 24066 24067 `b' 24068 Address base register 24069 24070 `d' 24071 Floating point register (containing 64-bit value) 24072 24073 `f' 24074 Floating point register (containing 32-bit value) 24075 24076 `v' 24077 Altivec vector register 24078 24079 `wd' 24080 VSX vector register to hold vector double data 24081 24082 `wf' 24083 VSX vector register to hold vector float data 24084 24085 `ws' 24086 VSX vector register to hold scalar float data 24087 24088 `wa' 24089 Any VSX register 24090 24091 `h' 24092 `MQ', `CTR', or `LINK' register 24093 24094 `q' 24095 `MQ' register 24096 24097 `c' 24098 `CTR' register 24099 24100 `l' 24101 `LINK' register 24102 24103 `x' 24104 `CR' register (condition register) number 0 24105 24106 `y' 24107 `CR' register (condition register) 24108 24109 `z' 24110 `XER[CA]' carry bit (part of the XER register) 24111 24112 `I' 24113 Signed 16-bit constant 24114 24115 `J' 24116 Unsigned 16-bit constant shifted left 16 bits (use `L' 24117 instead for `SImode' constants) 24118 24119 `K' 24120 Unsigned 16-bit constant 24121 24122 `L' 24123 Signed 16-bit constant shifted left 16 bits 24124 24125 `M' 24126 Constant larger than 31 24127 24128 `N' 24129 Exact power of 2 24130 24131 `O' 24132 Zero 24133 24134 `P' 24135 Constant whose negation is a signed 16-bit constant 24136 24137 `G' 24138 Floating point constant that can be loaded into a register 24139 with one instruction per word 24140 24141 `H' 24142 Integer/Floating point constant that can be loaded into a 24143 register using three instructions 24144 24145 `m' 24146 Memory operand. Normally, `m' does not allow addresses that 24147 update the base register. If `<' or `>' constraint is also 24148 used, they are allowed and therefore on PowerPC targets in 24149 that case it is only safe to use `m<>' in an `asm' statement 24150 if that `asm' statement accesses the operand exactly once. 24151 The `asm' statement must also use `%U<OPNO>' as a placeholder 24152 for the "update" flag in the corresponding load or store 24153 instruction. For example: 24154 24155 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 24156 24157 is correct but: 24158 24159 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 24160 24161 is not. 24162 24163 `es' 24164 A "stable" memory operand; that is, one which does not 24165 include any automodification of the base register. This used 24166 to be useful when `m' allowed automodification of the base 24167 register, but as those are now only allowed when `<' or `>' 24168 is used, `es' is basically the same as `m' without `<' and 24169 `>'. 24170 24171 `Q' 24172 Memory operand that is an offset from a register (it is 24173 usually better to use `m' or `es' in `asm' statements) 24174 24175 `Z' 24176 Memory operand that is an indexed or indirect from a register 24177 (it is usually better to use `m' or `es' in `asm' statements) 24178 24179 `R' 24180 AIX TOC entry 24181 24182 `a' 24183 Address operand that is an indexed or indirect from a 24184 register (`p' is preferable for `asm' statements) 24185 24186 `S' 24187 Constant suitable as a 64-bit mask operand 24188 24189 `T' 24190 Constant suitable as a 32-bit mask operand 24191 24192 `U' 24193 System V Release 4 small data area reference 24194 24195 `t' 24196 AND masks that can be performed by two rldic{l, r} 24197 instructions 24198 24199 `W' 24200 Vector constant that does not require memory 24201 24202 `j' 24203 Vector constant that is all zeros. 24204 24205 24206_Intel 386--`config/i386/constraints.md'_ 24207 24208 `R' 24209 Legacy register--the eight integer registers available on all 24210 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 24211 24212 `q' 24213 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 24214 `c', and `d'; in 64-bit mode, any integer register. 24215 24216 `Q' 24217 Any register accessible as `Rh': `a', `b', `c', and `d'. 24218 24219 `a' 24220 The `a' register. 24221 24222 `b' 24223 The `b' register. 24224 24225 `c' 24226 The `c' register. 24227 24228 `d' 24229 The `d' register. 24230 24231 `S' 24232 The `si' register. 24233 24234 `D' 24235 The `di' register. 24236 24237 `A' 24238 The `a' and `d' registers. This class is used for 24239 instructions that return double word results in the `ax:dx' 24240 register pair. Single word values will be allocated either 24241 in `ax' or `dx'. For example on i386 the following 24242 implements `rdtsc': 24243 24244 unsigned long long rdtsc (void) 24245 { 24246 unsigned long long tick; 24247 __asm__ __volatile__("rdtsc":"=A"(tick)); 24248 return tick; 24249 } 24250 24251 This is not correct on x86_64 as it would allocate tick in 24252 either `ax' or `dx'. You have to use the following variant 24253 instead: 24254 24255 unsigned long long rdtsc (void) 24256 { 24257 unsigned int tickl, tickh; 24258 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 24259 return ((unsigned long long)tickh << 32)|tickl; 24260 } 24261 24262 `f' 24263 Any 80387 floating-point (stack) register. 24264 24265 `t' 24266 Top of 80387 floating-point stack (`%st(0)'). 24267 24268 `u' 24269 Second from top of 80387 floating-point stack (`%st(1)'). 24270 24271 `y' 24272 Any MMX register. 24273 24274 `x' 24275 Any SSE register. 24276 24277 `Yz' 24278 First SSE register (`%xmm0'). 24279 24280 `I' 24281 Integer constant in the range 0 ... 31, for 32-bit shifts. 24282 24283 `J' 24284 Integer constant in the range 0 ... 63, for 64-bit shifts. 24285 24286 `K' 24287 Signed 8-bit integer constant. 24288 24289 `L' 24290 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 24291 24292 `M' 24293 0, 1, 2, or 3 (shifts for the `lea' instruction). 24294 24295 `N' 24296 Unsigned 8-bit integer constant (for `in' and `out' 24297 instructions). 24298 24299 `G' 24300 Standard 80387 floating point constant. 24301 24302 `C' 24303 Standard SSE floating point constant. 24304 24305 `e' 24306 32-bit signed integer constant, or a symbolic reference known 24307 to fit that range (for immediate operands in sign-extending 24308 x86-64 instructions). 24309 24310 `Z' 24311 32-bit unsigned integer constant, or a symbolic reference 24312 known to fit that range (for immediate operands in 24313 zero-extending x86-64 instructions). 24314 24315 24316_Intel IA-64--`config/ia64/ia64.h'_ 24317 24318 `a' 24319 General register `r0' to `r3' for `addl' instruction 24320 24321 `b' 24322 Branch register 24323 24324 `c' 24325 Predicate register (`c' as in "conditional") 24326 24327 `d' 24328 Application register residing in M-unit 24329 24330 `e' 24331 Application register residing in I-unit 24332 24333 `f' 24334 Floating-point register 24335 24336 `m' 24337 Memory operand. If used together with `<' or `>', the 24338 operand can have postincrement and postdecrement which 24339 require printing with `%Pn' on IA-64. 24340 24341 `G' 24342 Floating-point constant 0.0 or 1.0 24343 24344 `I' 24345 14-bit signed integer constant 24346 24347 `J' 24348 22-bit signed integer constant 24349 24350 `K' 24351 8-bit signed integer constant for logical instructions 24352 24353 `L' 24354 8-bit adjusted signed integer constant for compare pseudo-ops 24355 24356 `M' 24357 6-bit unsigned integer constant for shift counts 24358 24359 `N' 24360 9-bit signed integer constant for load and store 24361 postincrements 24362 24363 `O' 24364 The constant zero 24365 24366 `P' 24367 0 or -1 for `dep' instruction 24368 24369 `Q' 24370 Non-volatile memory for floating-point loads and stores 24371 24372 `R' 24373 Integer constant in the range 1 to 4 for `shladd' instruction 24374 24375 `S' 24376 Memory operand except postincrement and postdecrement. This 24377 is now roughly the same as `m' when not used together with `<' 24378 or `>'. 24379 24380_FRV--`config/frv/frv.h'_ 24381 24382 `a' 24383 Register in the class `ACC_REGS' (`acc0' to `acc7'). 24384 24385 `b' 24386 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 24387 24388 `c' 24389 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 24390 to `icc3'). 24391 24392 `d' 24393 Register in the class `GPR_REGS' (`gr0' to `gr63'). 24394 24395 `e' 24396 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 24397 registers are excluded not in the class but through the use 24398 of a machine mode larger than 4 bytes. 24399 24400 `f' 24401 Register in the class `FPR_REGS' (`fr0' to `fr63'). 24402 24403 `h' 24404 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 24405 registers are excluded not in the class but through the use 24406 of a machine mode larger than 4 bytes. 24407 24408 `l' 24409 Register in the class `LR_REG' (the `lr' register). 24410 24411 `q' 24412 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 24413 Register numbers not divisible by 4 are excluded not in the 24414 class but through the use of a machine mode larger than 8 24415 bytes. 24416 24417 `t' 24418 Register in the class `ICC_REGS' (`icc0' to `icc3'). 24419 24420 `u' 24421 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 24422 24423 `v' 24424 Register in the class `ICR_REGS' (`cc4' to `cc7'). 24425 24426 `w' 24427 Register in the class `FCR_REGS' (`cc0' to `cc3'). 24428 24429 `x' 24430 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 24431 Register numbers not divisible by 4 are excluded not in the 24432 class but through the use of a machine mode larger than 8 24433 bytes. 24434 24435 `z' 24436 Register in the class `SPR_REGS' (`lcr' and `lr'). 24437 24438 `A' 24439 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 24440 24441 `B' 24442 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 24443 24444 `C' 24445 Register in the class `CR_REGS' (`cc0' to `cc7'). 24446 24447 `G' 24448 Floating point constant zero 24449 24450 `I' 24451 6-bit signed integer constant 24452 24453 `J' 24454 10-bit signed integer constant 24455 24456 `L' 24457 16-bit signed integer constant 24458 24459 `M' 24460 16-bit unsigned integer constant 24461 24462 `N' 24463 12-bit signed integer constant that is negative--i.e. in the 24464 range of -2048 to -1 24465 24466 `O' 24467 Constant zero 24468 24469 `P' 24470 12-bit signed integer constant that is greater than 24471 zero--i.e. in the range of 1 to 2047. 24472 24473 24474_Blackfin family--`config/bfin/constraints.md'_ 24475 24476 `a' 24477 P register 24478 24479 `d' 24480 D register 24481 24482 `z' 24483 A call clobbered P register. 24484 24485 `qN' 24486 A single register. If N is in the range 0 to 7, the 24487 corresponding D register. If it is `A', then the register P0. 24488 24489 `D' 24490 Even-numbered D register 24491 24492 `W' 24493 Odd-numbered D register 24494 24495 `e' 24496 Accumulator register. 24497 24498 `A' 24499 Even-numbered accumulator register. 24500 24501 `B' 24502 Odd-numbered accumulator register. 24503 24504 `b' 24505 I register 24506 24507 `v' 24508 B register 24509 24510 `f' 24511 M register 24512 24513 `c' 24514 Registers used for circular buffering, i.e. I, B, or L 24515 registers. 24516 24517 `C' 24518 The CC register. 24519 24520 `t' 24521 LT0 or LT1. 24522 24523 `k' 24524 LC0 or LC1. 24525 24526 `u' 24527 LB0 or LB1. 24528 24529 `x' 24530 Any D, P, B, M, I or L register. 24531 24532 `y' 24533 Additional registers typically used only in prologues and 24534 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 24535 USP. 24536 24537 `w' 24538 Any register except accumulators or CC. 24539 24540 `Ksh' 24541 Signed 16 bit integer (in the range -32768 to 32767) 24542 24543 `Kuh' 24544 Unsigned 16 bit integer (in the range 0 to 65535) 24545 24546 `Ks7' 24547 Signed 7 bit integer (in the range -64 to 63) 24548 24549 `Ku7' 24550 Unsigned 7 bit integer (in the range 0 to 127) 24551 24552 `Ku5' 24553 Unsigned 5 bit integer (in the range 0 to 31) 24554 24555 `Ks4' 24556 Signed 4 bit integer (in the range -8 to 7) 24557 24558 `Ks3' 24559 Signed 3 bit integer (in the range -3 to 4) 24560 24561 `Ku3' 24562 Unsigned 3 bit integer (in the range 0 to 7) 24563 24564 `PN' 24565 Constant N, where N is a single-digit constant in the range 0 24566 to 4. 24567 24568 `PA' 24569 An integer equal to one of the MACFLAG_XXX constants that is 24570 suitable for use with either accumulator. 24571 24572 `PB' 24573 An integer equal to one of the MACFLAG_XXX constants that is 24574 suitable for use only with accumulator A1. 24575 24576 `M1' 24577 Constant 255. 24578 24579 `M2' 24580 Constant 65535. 24581 24582 `J' 24583 An integer constant with exactly a single bit set. 24584 24585 `L' 24586 An integer constant with all bits set except exactly one. 24587 24588 `H' 24589 24590 `Q' 24591 Any SYMBOL_REF. 24592 24593_M32C--`config/m32c/m32c.c'_ 24594 24595 `Rsp' 24596 `Rfb' 24597 `Rsb' 24598 `$sp', `$fb', `$sb'. 24599 24600 `Rcr' 24601 Any control register, when they're 16 bits wide (nothing if 24602 control registers are 24 bits wide) 24603 24604 `Rcl' 24605 Any control register, when they're 24 bits wide. 24606 24607 `R0w' 24608 `R1w' 24609 `R2w' 24610 `R3w' 24611 $r0, $r1, $r2, $r3. 24612 24613 `R02' 24614 $r0 or $r2, or $r2r0 for 32 bit values. 24615 24616 `R13' 24617 $r1 or $r3, or $r3r1 for 32 bit values. 24618 24619 `Rdi' 24620 A register that can hold a 64 bit value. 24621 24622 `Rhl' 24623 $r0 or $r1 (registers with addressable high/low bytes) 24624 24625 `R23' 24626 $r2 or $r3 24627 24628 `Raa' 24629 Address registers 24630 24631 `Raw' 24632 Address registers when they're 16 bits wide. 24633 24634 `Ral' 24635 Address registers when they're 24 bits wide. 24636 24637 `Rqi' 24638 Registers that can hold QI values. 24639 24640 `Rad' 24641 Registers that can be used with displacements ($a0, $a1, $sb). 24642 24643 `Rsi' 24644 Registers that can hold 32 bit values. 24645 24646 `Rhi' 24647 Registers that can hold 16 bit values. 24648 24649 `Rhc' 24650 Registers chat can hold 16 bit values, including all control 24651 registers. 24652 24653 `Rra' 24654 $r0 through R1, plus $a0 and $a1. 24655 24656 `Rfl' 24657 The flags register. 24658 24659 `Rmm' 24660 The memory-based pseudo-registers $mem0 through $mem15. 24661 24662 `Rpi' 24663 Registers that can hold pointers (16 bit registers for r8c, 24664 m16c; 24 bit registers for m32cm, m32c). 24665 24666 `Rpa' 24667 Matches multiple registers in a PARALLEL to form a larger 24668 register. Used to match function return values. 24669 24670 `Is3' 24671 -8 ... 7 24672 24673 `IS1' 24674 -128 ... 127 24675 24676 `IS2' 24677 -32768 ... 32767 24678 24679 `IU2' 24680 0 ... 65535 24681 24682 `In4' 24683 -8 ... -1 or 1 ... 8 24684 24685 `In5' 24686 -16 ... -1 or 1 ... 16 24687 24688 `In6' 24689 -32 ... -1 or 1 ... 32 24690 24691 `IM2' 24692 -65536 ... -1 24693 24694 `Ilb' 24695 An 8 bit value with exactly one bit set. 24696 24697 `Ilw' 24698 A 16 bit value with exactly one bit set. 24699 24700 `Sd' 24701 The common src/dest memory addressing modes. 24702 24703 `Sa' 24704 Memory addressed using $a0 or $a1. 24705 24706 `Si' 24707 Memory addressed with immediate addresses. 24708 24709 `Ss' 24710 Memory addressed using the stack pointer ($sp). 24711 24712 `Sf' 24713 Memory addressed using the frame base register ($fb). 24714 24715 `Ss' 24716 Memory addressed using the small base register ($sb). 24717 24718 `S1' 24719 $r1h 24720 24721_MeP--`config/mep/constraints.md'_ 24722 24723 `a' 24724 The $sp register. 24725 24726 `b' 24727 The $tp register. 24728 24729 `c' 24730 Any control register. 24731 24732 `d' 24733 Either the $hi or the $lo register. 24734 24735 `em' 24736 Coprocessor registers that can be directly loaded ($c0-$c15). 24737 24738 `ex' 24739 Coprocessor registers that can be moved to each other. 24740 24741 `er' 24742 Coprocessor registers that can be moved to core registers. 24743 24744 `h' 24745 The $hi register. 24746 24747 `j' 24748 The $rpc register. 24749 24750 `l' 24751 The $lo register. 24752 24753 `t' 24754 Registers which can be used in $tp-relative addressing. 24755 24756 `v' 24757 The $gp register. 24758 24759 `x' 24760 The coprocessor registers. 24761 24762 `y' 24763 The coprocessor control registers. 24764 24765 `z' 24766 The $0 register. 24767 24768 `A' 24769 User-defined register set A. 24770 24771 `B' 24772 User-defined register set B. 24773 24774 `C' 24775 User-defined register set C. 24776 24777 `D' 24778 User-defined register set D. 24779 24780 `I' 24781 Offsets for $gp-rel addressing. 24782 24783 `J' 24784 Constants that can be used directly with boolean insns. 24785 24786 `K' 24787 Constants that can be moved directly to registers. 24788 24789 `L' 24790 Small constants that can be added to registers. 24791 24792 `M' 24793 Long shift counts. 24794 24795 `N' 24796 Small constants that can be compared to registers. 24797 24798 `O' 24799 Constants that can be loaded into the top half of registers. 24800 24801 `S' 24802 Signed 8-bit immediates. 24803 24804 `T' 24805 Symbols encoded for $tp-rel or $gp-rel addressing. 24806 24807 `U' 24808 Non-constant addresses for loading/saving coprocessor 24809 registers. 24810 24811 `W' 24812 The top half of a symbol's value. 24813 24814 `Y' 24815 A register indirect address without offset. 24816 24817 `Z' 24818 Symbolic references to the control bus. 24819 24820 24821_MicroBlaze--`config/microblaze/constraints.md'_ 24822 24823 `d' 24824 A general register (`r0' to `r31'). 24825 24826 `z' 24827 A status register (`rmsr', `$fcc1' to `$fcc7'). 24828 24829 24830_MIPS--`config/mips/constraints.md'_ 24831 24832 `d' 24833 An address register. This is equivalent to `r' unless 24834 generating MIPS16 code. 24835 24836 `f' 24837 A floating-point register (if available). 24838 24839 `h' 24840 Formerly the `hi' register. This constraint is no longer 24841 supported. 24842 24843 `l' 24844 The `lo' register. Use this register to store values that are 24845 no bigger than a word. 24846 24847 `x' 24848 The concatenated `hi' and `lo' registers. Use this register 24849 to store doubleword values. 24850 24851 `c' 24852 A register suitable for use in an indirect jump. This will 24853 always be `$25' for `-mabicalls'. 24854 24855 `v' 24856 Register `$3'. Do not use this constraint in new code; it is 24857 retained only for compatibility with glibc. 24858 24859 `y' 24860 Equivalent to `r'; retained for backwards compatibility. 24861 24862 `z' 24863 A floating-point condition code register. 24864 24865 `I' 24866 A signed 16-bit constant (for arithmetic instructions). 24867 24868 `J' 24869 Integer zero. 24870 24871 `K' 24872 An unsigned 16-bit constant (for logic instructions). 24873 24874 `L' 24875 A signed 32-bit constant in which the lower 16 bits are zero. 24876 Such constants can be loaded using `lui'. 24877 24878 `M' 24879 A constant that cannot be loaded using `lui', `addiu' or 24880 `ori'. 24881 24882 `N' 24883 A constant in the range -65535 to -1 (inclusive). 24884 24885 `O' 24886 A signed 15-bit constant. 24887 24888 `P' 24889 A constant in the range 1 to 65535 (inclusive). 24890 24891 `G' 24892 Floating-point zero. 24893 24894 `R' 24895 An address that can be used in a non-macro load or store. 24896 24897_Motorola 680x0--`config/m68k/constraints.md'_ 24898 24899 `a' 24900 Address register 24901 24902 `d' 24903 Data register 24904 24905 `f' 24906 68881 floating-point register, if available 24907 24908 `I' 24909 Integer in the range 1 to 8 24910 24911 `J' 24912 16-bit signed number 24913 24914 `K' 24915 Signed number whose magnitude is greater than 0x80 24916 24917 `L' 24918 Integer in the range -8 to -1 24919 24920 `M' 24921 Signed number whose magnitude is greater than 0x100 24922 24923 `N' 24924 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 24925 24926 `O' 24927 16 (for rotate using swap) 24928 24929 `P' 24930 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 24931 24932 `R' 24933 Numbers that mov3q can handle 24934 24935 `G' 24936 Floating point constant that is not a 68881 constant 24937 24938 `S' 24939 Operands that satisfy 'm' when -mpcrel is in effect 24940 24941 `T' 24942 Operands that satisfy 's' when -mpcrel is not in effect 24943 24944 `Q' 24945 Address register indirect addressing mode 24946 24947 `U' 24948 Register offset addressing 24949 24950 `W' 24951 const_call_operand 24952 24953 `Cs' 24954 symbol_ref or const 24955 24956 `Ci' 24957 const_int 24958 24959 `C0' 24960 const_int 0 24961 24962 `Cj' 24963 Range of signed numbers that don't fit in 16 bits 24964 24965 `Cmvq' 24966 Integers valid for mvq 24967 24968 `Capsw' 24969 Integers valid for a moveq followed by a swap 24970 24971 `Cmvz' 24972 Integers valid for mvz 24973 24974 `Cmvs' 24975 Integers valid for mvs 24976 24977 `Ap' 24978 push_operand 24979 24980 `Ac' 24981 Non-register operands allowed in clr 24982 24983 24984_Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 24985 24986 `a' 24987 Register `a' 24988 24989 `b' 24990 Register `b' 24991 24992 `d' 24993 Register `d' 24994 24995 `q' 24996 An 8-bit register 24997 24998 `t' 24999 Temporary soft register _.tmp 25000 25001 `u' 25002 A soft register _.d1 to _.d31 25003 25004 `w' 25005 Stack pointer register 25006 25007 `x' 25008 Register `x' 25009 25010 `y' 25011 Register `y' 25012 25013 `z' 25014 Pseudo register `z' (replaced by `x' or `y' at the end) 25015 25016 `A' 25017 An address register: x, y or z 25018 25019 `B' 25020 An address register: x or y 25021 25022 `D' 25023 Register pair (x:d) to form a 32-bit value 25024 25025 `L' 25026 Constants in the range -65536 to 65535 25027 25028 `M' 25029 Constants whose 16-bit low part is zero 25030 25031 `N' 25032 Constant integer 1 or -1 25033 25034 `O' 25035 Constant integer 16 25036 25037 `P' 25038 Constants in the range -8 to 2 25039 25040 25041_Moxie--`config/moxie/constraints.md'_ 25042 25043 `A' 25044 An absolute address 25045 25046 `B' 25047 An offset address 25048 25049 `W' 25050 A register indirect memory operand 25051 25052 `I' 25053 A constant in the range of 0 to 255. 25054 25055 `N' 25056 A constant in the range of 0 to -255. 25057 25058 25059_PDP-11--`config/pdp11/constraints.md'_ 25060 25061 `a' 25062 Floating point registers AC0 through AC3. These can be 25063 loaded from/to memory with a single instruction. 25064 25065 `d' 25066 Odd numbered general registers (R1, R3, R5). These are used 25067 for 16-bit multiply operations. 25068 25069 `f' 25070 Any of the floating point registers (AC0 through AC5). 25071 25072 `G' 25073 Floating point constant 0. 25074 25075 `I' 25076 An integer constant that fits in 16 bits. 25077 25078 `J' 25079 An integer constant whose low order 16 bits are zero. 25080 25081 `K' 25082 An integer constant that does not meet the constraints for 25083 codes `I' or `J'. 25084 25085 `L' 25086 The integer constant 1. 25087 25088 `M' 25089 The integer constant -1. 25090 25091 `N' 25092 The integer constant 0. 25093 25094 `O' 25095 Integer constants -4 through -1 and 1 through 4; shifts by 25096 these amounts are handled as multiple single-bit shifts 25097 rather than a single variable-length shift. 25098 25099 `Q' 25100 A memory reference which requires an additional word (address 25101 or offset) after the opcode. 25102 25103 `R' 25104 A memory reference that is encoded within the opcode. 25105 25106 25107_RX--`config/rx/constraints.md'_ 25108 25109 `Q' 25110 An address which does not involve register indirect 25111 addressing or pre/post increment/decrement addressing. 25112 25113 `Symbol' 25114 A symbol reference. 25115 25116 `Int08' 25117 A constant in the range -256 to 255, inclusive. 25118 25119 `Sint08' 25120 A constant in the range -128 to 127, inclusive. 25121 25122 `Sint16' 25123 A constant in the range -32768 to 32767, inclusive. 25124 25125 `Sint24' 25126 A constant in the range -8388608 to 8388607, inclusive. 25127 25128 `Uint04' 25129 A constant in the range 0 to 15, inclusive. 25130 25131 25132_SPARC--`config/sparc/sparc.h'_ 25133 25134 `f' 25135 Floating-point register on the SPARC-V8 architecture and 25136 lower floating-point register on the SPARC-V9 architecture. 25137 25138 `e' 25139 Floating-point register. It is equivalent to `f' on the 25140 SPARC-V8 architecture and contains both lower and upper 25141 floating-point registers on the SPARC-V9 architecture. 25142 25143 `c' 25144 Floating-point condition code register. 25145 25146 `d' 25147 Lower floating-point register. It is only valid on the 25148 SPARC-V9 architecture when the Visual Instruction Set is 25149 available. 25150 25151 `b' 25152 Floating-point register. It is only valid on the SPARC-V9 25153 architecture when the Visual Instruction Set is available. 25154 25155 `h' 25156 64-bit global or out register for the SPARC-V8+ architecture. 25157 25158 `D' 25159 A vector constant 25160 25161 `I' 25162 Signed 13-bit constant 25163 25164 `J' 25165 Zero 25166 25167 `K' 25168 32-bit constant with the low 12 bits clear (a constant that 25169 can be loaded with the `sethi' instruction) 25170 25171 `L' 25172 A constant in the range supported by `movcc' instructions 25173 25174 `M' 25175 A constant in the range supported by `movrcc' instructions 25176 25177 `N' 25178 Same as `K', except that it verifies that bits that are not 25179 in the lower 32-bit range are all zero. Must be used instead 25180 of `K' for modes wider than `SImode' 25181 25182 `O' 25183 The constant 4096 25184 25185 `G' 25186 Floating-point zero 25187 25188 `H' 25189 Signed 13-bit constant, sign-extended to 32 or 64 bits 25190 25191 `Q' 25192 Floating-point constant whose integral representation can be 25193 moved into an integer register using a single sethi 25194 instruction 25195 25196 `R' 25197 Floating-point constant whose integral representation can be 25198 moved into an integer register using a single mov instruction 25199 25200 `S' 25201 Floating-point constant whose integral representation can be 25202 moved into an integer register using a high/lo_sum 25203 instruction sequence 25204 25205 `T' 25206 Memory address aligned to an 8-byte boundary 25207 25208 `U' 25209 Even register 25210 25211 `W' 25212 Memory address for `e' constraint registers 25213 25214 `Y' 25215 Vector zero 25216 25217 25218_SPU--`config/spu/spu.h'_ 25219 25220 `a' 25221 An immediate which can be loaded with the il/ila/ilh/ilhu 25222 instructions. const_int is treated as a 64 bit value. 25223 25224 `c' 25225 An immediate for and/xor/or instructions. const_int is 25226 treated as a 64 bit value. 25227 25228 `d' 25229 An immediate for the `iohl' instruction. const_int is 25230 treated as a 64 bit value. 25231 25232 `f' 25233 An immediate which can be loaded with `fsmbi'. 25234 25235 `A' 25236 An immediate which can be loaded with the il/ila/ilh/ilhu 25237 instructions. const_int is treated as a 32 bit value. 25238 25239 `B' 25240 An immediate for most arithmetic instructions. const_int is 25241 treated as a 32 bit value. 25242 25243 `C' 25244 An immediate for and/xor/or instructions. const_int is 25245 treated as a 32 bit value. 25246 25247 `D' 25248 An immediate for the `iohl' instruction. const_int is 25249 treated as a 32 bit value. 25250 25251 `I' 25252 A constant in the range [-64, 63] for shift/rotate 25253 instructions. 25254 25255 `J' 25256 An unsigned 7-bit constant for conversion/nop/channel 25257 instructions. 25258 25259 `K' 25260 A signed 10-bit constant for most arithmetic instructions. 25261 25262 `M' 25263 A signed 16 bit immediate for `stop'. 25264 25265 `N' 25266 An unsigned 16-bit constant for `iohl' and `fsmbi'. 25267 25268 `O' 25269 An unsigned 7-bit constant whose 3 least significant bits are 25270 0. 25271 25272 `P' 25273 An unsigned 3-bit constant for 16-byte rotates and shifts 25274 25275 `R' 25276 Call operand, reg, for indirect calls 25277 25278 `S' 25279 Call operand, symbol, for relative calls. 25280 25281 `T' 25282 Call operand, const_int, for absolute calls. 25283 25284 `U' 25285 An immediate which can be loaded with the il/ila/ilh/ilhu 25286 instructions. const_int is sign extended to 128 bit. 25287 25288 `W' 25289 An immediate for shift and rotate instructions. const_int is 25290 treated as a 32 bit value. 25291 25292 `Y' 25293 An immediate for and/xor/or instructions. const_int is sign 25294 extended as a 128 bit. 25295 25296 `Z' 25297 An immediate for the `iohl' instruction. const_int is sign 25298 extended to 128 bit. 25299 25300 25301_S/390 and zSeries--`config/s390/s390.h'_ 25302 25303 `a' 25304 Address register (general purpose register except r0) 25305 25306 `c' 25307 Condition code register 25308 25309 `d' 25310 Data register (arbitrary general purpose register) 25311 25312 `f' 25313 Floating-point register 25314 25315 `I' 25316 Unsigned 8-bit constant (0-255) 25317 25318 `J' 25319 Unsigned 12-bit constant (0-4095) 25320 25321 `K' 25322 Signed 16-bit constant (-32768-32767) 25323 25324 `L' 25325 Value appropriate as displacement. 25326 `(0..4095)' 25327 for short displacement 25328 25329 `(-524288..524287)' 25330 for long displacement 25331 25332 `M' 25333 Constant integer with a value of 0x7fffffff. 25334 25335 `N' 25336 Multiple letter constraint followed by 4 parameter letters. 25337 `0..9:' 25338 number of the part counting from most to least 25339 significant 25340 25341 `H,Q:' 25342 mode of the part 25343 25344 `D,S,H:' 25345 mode of the containing operand 25346 25347 `0,F:' 25348 value of the other parts (F--all bits set) 25349 The constraint matches if the specified part of a constant 25350 has a value different from its other parts. 25351 25352 `Q' 25353 Memory reference without index register and with short 25354 displacement. 25355 25356 `R' 25357 Memory reference with index register and short displacement. 25358 25359 `S' 25360 Memory reference without index register but with long 25361 displacement. 25362 25363 `T' 25364 Memory reference with index register and long displacement. 25365 25366 `U' 25367 Pointer with short displacement. 25368 25369 `W' 25370 Pointer with long displacement. 25371 25372 `Y' 25373 Shift count operand. 25374 25375 25376_Score family--`config/score/score.h'_ 25377 25378 `d' 25379 Registers from r0 to r32. 25380 25381 `e' 25382 Registers from r0 to r16. 25383 25384 `t' 25385 r8--r11 or r22--r27 registers. 25386 25387 `h' 25388 hi register. 25389 25390 `l' 25391 lo register. 25392 25393 `x' 25394 hi + lo register. 25395 25396 `q' 25397 cnt register. 25398 25399 `y' 25400 lcb register. 25401 25402 `z' 25403 scb register. 25404 25405 `a' 25406 cnt + lcb + scb register. 25407 25408 `c' 25409 cr0--cr15 register. 25410 25411 `b' 25412 cp1 registers. 25413 25414 `f' 25415 cp2 registers. 25416 25417 `i' 25418 cp3 registers. 25419 25420 `j' 25421 cp1 + cp2 + cp3 registers. 25422 25423 `I' 25424 High 16-bit constant (32-bit constant with 16 LSBs zero). 25425 25426 `J' 25427 Unsigned 5 bit integer (in the range 0 to 31). 25428 25429 `K' 25430 Unsigned 16 bit integer (in the range 0 to 65535). 25431 25432 `L' 25433 Signed 16 bit integer (in the range -32768 to 32767). 25434 25435 `M' 25436 Unsigned 14 bit integer (in the range 0 to 16383). 25437 25438 `N' 25439 Signed 14 bit integer (in the range -8192 to 8191). 25440 25441 `Z' 25442 Any SYMBOL_REF. 25443 25444_Xstormy16--`config/stormy16/stormy16.h'_ 25445 25446 `a' 25447 Register r0. 25448 25449 `b' 25450 Register r1. 25451 25452 `c' 25453 Register r2. 25454 25455 `d' 25456 Register r8. 25457 25458 `e' 25459 Registers r0 through r7. 25460 25461 `t' 25462 Registers r0 and r1. 25463 25464 `y' 25465 The carry register. 25466 25467 `z' 25468 Registers r8 and r9. 25469 25470 `I' 25471 A constant between 0 and 3 inclusive. 25472 25473 `J' 25474 A constant that has exactly one bit set. 25475 25476 `K' 25477 A constant that has exactly one bit clear. 25478 25479 `L' 25480 A constant between 0 and 255 inclusive. 25481 25482 `M' 25483 A constant between -255 and 0 inclusive. 25484 25485 `N' 25486 A constant between -3 and 0 inclusive. 25487 25488 `O' 25489 A constant between 1 and 4 inclusive. 25490 25491 `P' 25492 A constant between -4 and -1 inclusive. 25493 25494 `Q' 25495 A memory reference that is a stack push. 25496 25497 `R' 25498 A memory reference that is a stack pop. 25499 25500 `S' 25501 A memory reference that refers to a constant address of known 25502 value. 25503 25504 `T' 25505 The register indicated by Rx (not implemented yet). 25506 25507 `U' 25508 A constant that is not between 2 and 15 inclusive. 25509 25510 `Z' 25511 The constant 0. 25512 25513 25514_Xtensa--`config/xtensa/constraints.md'_ 25515 25516 `a' 25517 General-purpose 32-bit register 25518 25519 `b' 25520 One-bit boolean register 25521 25522 `A' 25523 MAC16 40-bit accumulator register 25524 25525 `I' 25526 Signed 12-bit integer constant, for use in MOVI instructions 25527 25528 `J' 25529 Signed 8-bit integer constant, for use in ADDI instructions 25530 25531 `K' 25532 Integer constant valid for BccI instructions 25533 25534 `L' 25535 Unsigned constant valid for BccUI instructions 25536 25537 25538 25539 25540File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 25541 255426.43 Controlling Names Used in Assembler Code 25543============================================= 25544 25545You can specify the name to be used in the assembler code for a C 25546function or variable by writing the `asm' (or `__asm__') keyword after 25547the declarator as follows: 25548 25549 int foo asm ("myfoo") = 2; 25550 25551This specifies that the name to be used for the variable `foo' in the 25552assembler code should be `myfoo' rather than the usual `_foo'. 25553 25554 On systems where an underscore is normally prepended to the name of a C 25555function or variable, this feature allows you to define names for the 25556linker that do not start with an underscore. 25557 25558 It does not make sense to use this feature with a non-static local 25559variable since such variables do not have assembler names. If you are 25560trying to put the variable in a particular register, see *note Explicit 25561Reg Vars::. GCC presently accepts such code with a warning, but will 25562probably be changed to issue an error, rather than a warning, in the 25563future. 25564 25565 You cannot use `asm' in this way in a function _definition_; but you 25566can get the same effect by writing a declaration for the function 25567before its definition and putting `asm' there, like this: 25568 25569 extern func () asm ("FUNC"); 25570 25571 func (x, y) 25572 int x, y; 25573 /* ... */ 25574 25575 It is up to you to make sure that the assembler names you choose do not 25576conflict with any other assembler symbols. Also, you must not use a 25577register name; that would produce completely invalid assembler code. 25578GCC does not as yet have the ability to store static variables in 25579registers. Perhaps that will be added. 25580 25581 25582File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 25583 255846.44 Variables in Specified Registers 25585===================================== 25586 25587GNU C allows you to put a few global variables into specified hardware 25588registers. You can also specify the register in which an ordinary 25589register variable should be allocated. 25590 25591 * Global register variables reserve registers throughout the program. 25592 This may be useful in programs such as programming language 25593 interpreters which have a couple of global variables that are 25594 accessed very often. 25595 25596 * Local register variables in specific registers do not reserve the 25597 registers, except at the point where they are used as input or 25598 output operands in an `asm' statement and the `asm' statement 25599 itself is not deleted. The compiler's data flow analysis is 25600 capable of determining where the specified registers contain live 25601 values, and where they are available for other uses. Stores into 25602 local register variables may be deleted when they appear to be 25603 dead according to dataflow analysis. References to local register 25604 variables may be deleted or moved or simplified. 25605 25606 These local variables are sometimes convenient for use with the 25607 extended `asm' feature (*note Extended Asm::), if you want to 25608 write one output of the assembler instruction directly into a 25609 particular register. (This will work provided the register you 25610 specify fits the constraints specified for that operand in the 25611 `asm'.) 25612 25613* Menu: 25614 25615* Global Reg Vars:: 25616* Local Reg Vars:: 25617 25618 25619File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 25620 256216.44.1 Defining Global Register Variables 25622----------------------------------------- 25623 25624You can define a global register variable in GNU C like this: 25625 25626 register int *foo asm ("a5"); 25627 25628Here `a5' is the name of the register which should be used. Choose a 25629register which is normally saved and restored by function calls on your 25630machine, so that library routines will not clobber it. 25631 25632 Naturally the register name is cpu-dependent, so you would need to 25633conditionalize your program according to cpu type. The register `a5' 25634would be a good choice on a 68000 for a variable of pointer type. On 25635machines with register windows, be sure to choose a "global" register 25636that is not affected magically by the function call mechanism. 25637 25638 In addition, operating systems on one type of cpu may differ in how 25639they name the registers; then you would need additional conditionals. 25640For example, some 68000 operating systems call this register `%a5'. 25641 25642 Eventually there may be a way of asking the compiler to choose a 25643register automatically, but first we need to figure out how it should 25644choose and how to enable you to guide the choice. No solution is 25645evident. 25646 25647 Defining a global register variable in a certain register reserves that 25648register entirely for this use, at least within the current compilation. 25649The register will not be allocated for any other purpose in the 25650functions in the current compilation. The register will not be saved 25651and restored by these functions. Stores into this register are never 25652deleted even if they would appear to be dead, but references may be 25653deleted or moved or simplified. 25654 25655 It is not safe to access the global register variables from signal 25656handlers, or from more than one thread of control, because the system 25657library routines may temporarily use the register for other things 25658(unless you recompile them specially for the task at hand). 25659 25660 It is not safe for one function that uses a global register variable to 25661call another such function `foo' by way of a third function `lose' that 25662was compiled without knowledge of this variable (i.e. in a different 25663source file in which the variable wasn't declared). This is because 25664`lose' might save the register and put some other value there. For 25665example, you can't expect a global register variable to be available in 25666the comparison-function that you pass to `qsort', since `qsort' might 25667have put something else in that register. (If you are prepared to 25668recompile `qsort' with the same global register variable, you can solve 25669this problem.) 25670 25671 If you want to recompile `qsort' or other source files which do not 25672actually use your global register variable, so that they will not use 25673that register for any other purpose, then it suffices to specify the 25674compiler option `-ffixed-REG'. You need not actually add a global 25675register declaration to their source code. 25676 25677 A function which can alter the value of a global register variable 25678cannot safely be called from a function compiled without this variable, 25679because it could clobber the value the caller expects to find there on 25680return. Therefore, the function which is the entry point into the part 25681of the program that uses the global register variable must explicitly 25682save and restore the value which belongs to its caller. 25683 25684 On most machines, `longjmp' will restore to each global register 25685variable the value it had at the time of the `setjmp'. On some 25686machines, however, `longjmp' will not change the value of global 25687register variables. To be portable, the function that called `setjmp' 25688should make other arrangements to save the values of the global register 25689variables, and to restore them in a `longjmp'. This way, the same 25690thing will happen regardless of what `longjmp' does. 25691 25692 All global register variable declarations must precede all function 25693definitions. If such a declaration could appear after function 25694definitions, the declaration would be too late to prevent the register 25695from being used for other purposes in the preceding functions. 25696 25697 Global register variables may not have initial values, because an 25698executable file has no means to supply initial contents for a register. 25699 25700 On the SPARC, there are reports that g3 ... g7 are suitable registers, 25701but certain library functions, such as `getwd', as well as the 25702subroutines for division and remainder, modify g3 and g4. g1 and g2 25703are local temporaries. 25704 25705 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 25706course, it will not do to use more than a few of those. 25707 25708 25709File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 25710 257116.44.2 Specifying Registers for Local Variables 25712----------------------------------------------- 25713 25714You can define a local register variable with a specified register like 25715this: 25716 25717 register int *foo asm ("a5"); 25718 25719Here `a5' is the name of the register which should be used. Note that 25720this is the same syntax used for defining global register variables, 25721but for a local variable it would appear within a function. 25722 25723 Naturally the register name is cpu-dependent, but this is not a 25724problem, since specific registers are most often useful with explicit 25725assembler instructions (*note Extended Asm::). Both of these things 25726generally require that you conditionalize your program according to cpu 25727type. 25728 25729 In addition, operating systems on one type of cpu may differ in how 25730they name the registers; then you would need additional conditionals. 25731For example, some 68000 operating systems call this register `%a5'. 25732 25733 Defining such a register variable does not reserve the register; it 25734remains available for other uses in places where flow control determines 25735the variable's value is not live. 25736 25737 This option does not guarantee that GCC will generate code that has 25738this variable in the register you specify at all times. You may not 25739code an explicit reference to this register in the _assembler 25740instruction template_ part of an `asm' statement and assume it will 25741always refer to this variable. However, using the variable as an `asm' 25742_operand_ guarantees that the specified register is used for the 25743operand. 25744 25745 Stores into local register variables may be deleted when they appear 25746to be dead according to dataflow analysis. References to local 25747register variables may be deleted or moved or simplified. 25748 25749 As for global register variables, it's recommended that you choose a 25750register which is normally saved and restored by function calls on your 25751machine, so that library routines will not clobber it. A common 25752pitfall is to initialize multiple call-clobbered registers with 25753arbitrary expressions, where a function call or library call for an 25754arithmetic operator will overwrite a register value from a previous 25755assignment, for example `r0' below: 25756 register int *p1 asm ("r0") = ...; 25757 register int *p2 asm ("r1") = ...; 25758 In those cases, a solution is to use a temporary variable for each 25759arbitrary expression. *Note Example of asm with clobbered asm reg::. 25760 25761 25762File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 25763 257646.45 Alternate Keywords 25765======================= 25766 25767`-ansi' and the various `-std' options disable certain keywords. This 25768causes trouble when you want to use GNU C extensions, or a 25769general-purpose header file that should be usable by all programs, 25770including ISO C programs. The keywords `asm', `typeof' and `inline' 25771are not available in programs compiled with `-ansi' or `-std' (although 25772`inline' can be used in a program compiled with `-std=c99' or 25773`-std=c1x'). The ISO C99 keyword `restrict' is only available when 25774`-std=gnu99' (which will eventually be the default) or `-std=c99' (or 25775the equivalent `-std=iso9899:1999'), or an option for a later standard 25776version, is used. 25777 25778 The way to solve these problems is to put `__' at the beginning and 25779end of each problematical keyword. For example, use `__asm__' instead 25780of `asm', and `__inline__' instead of `inline'. 25781 25782 Other C compilers won't accept these alternative keywords; if you want 25783to compile with another compiler, you can define the alternate keywords 25784as macros to replace them with the customary keywords. It looks like 25785this: 25786 25787 #ifndef __GNUC__ 25788 #define __asm__ asm 25789 #endif 25790 25791 `-pedantic' and other options cause warnings for many GNU C extensions. 25792You can prevent such warnings within one expression by writing 25793`__extension__' before the expression. `__extension__' has no effect 25794aside from this. 25795 25796 25797File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 25798 257996.46 Incomplete `enum' Types 25800============================ 25801 25802You can define an `enum' tag without specifying its possible values. 25803This results in an incomplete type, much like what you get if you write 25804`struct foo' without describing the elements. A later declaration 25805which does specify the possible values completes the type. 25806 25807 You can't allocate variables or storage using the type while it is 25808incomplete. However, you can work with pointers to that type. 25809 25810 This extension may not be very useful, but it makes the handling of 25811`enum' more consistent with the way `struct' and `union' are handled. 25812 25813 This extension is not supported by GNU C++. 25814 25815 25816File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 25817 258186.47 Function Names as Strings 25819============================== 25820 25821GCC provides three magic variables which hold the name of the current 25822function, as a string. The first of these is `__func__', which is part 25823of the C99 standard: 25824 25825 The identifier `__func__' is implicitly declared by the translator as 25826if, immediately following the opening brace of each function 25827definition, the declaration 25828 25829 static const char __func__[] = "function-name"; 25830 25831appeared, where function-name is the name of the lexically-enclosing 25832function. This name is the unadorned name of the function. 25833 25834 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 25835recognize only this name. However, it is not standardized. For 25836maximum portability, we recommend you use `__func__', but provide a 25837fallback definition with the preprocessor: 25838 25839 #if __STDC_VERSION__ < 199901L 25840 # if __GNUC__ >= 2 25841 # define __func__ __FUNCTION__ 25842 # else 25843 # define __func__ "<unknown>" 25844 # endif 25845 #endif 25846 25847 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 25848However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 25849the function as well as its bare name. For example, this program: 25850 25851 extern "C" { 25852 extern int printf (char *, ...); 25853 } 25854 25855 class a { 25856 public: 25857 void sub (int i) 25858 { 25859 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 25860 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 25861 } 25862 }; 25863 25864 int 25865 main (void) 25866 { 25867 a ax; 25868 ax.sub (0); 25869 return 0; 25870 } 25871 25872gives this output: 25873 25874 __FUNCTION__ = sub 25875 __PRETTY_FUNCTION__ = void a::sub(int) 25876 25877 These identifiers are not preprocessor macros. In GCC 3.3 and 25878earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 25879treated as string literals; they could be used to initialize `char' 25880arrays, and they could be concatenated with other string literals. GCC 258813.4 and later treat them as variables, like `__func__'. In C++, 25882`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 25883 25884 25885File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 25886 258876.48 Getting the Return or Frame Address of a Function 25888====================================================== 25889 25890These functions may be used to get information about the callers of a 25891function. 25892 25893 -- Built-in Function: void * __builtin_return_address (unsigned int 25894 LEVEL) 25895 This function returns the return address of the current function, 25896 or of one of its callers. The LEVEL argument is number of frames 25897 to scan up the call stack. A value of `0' yields the return 25898 address of the current function, a value of `1' yields the return 25899 address of the caller of the current function, and so forth. When 25900 inlining the expected behavior is that the function will return 25901 the address of the function that will be returned to. To work 25902 around this behavior use the `noinline' function attribute. 25903 25904 The LEVEL argument must be a constant integer. 25905 25906 On some machines it may be impossible to determine the return 25907 address of any function other than the current one; in such cases, 25908 or when the top of the stack has been reached, this function will 25909 return `0' or a random value. In addition, 25910 `__builtin_frame_address' may be used to determine if the top of 25911 the stack has been reached. 25912 25913 Additional post-processing of the returned value may be needed, see 25914 `__builtin_extract_return_address'. 25915 25916 This function should only be used with a nonzero argument for 25917 debugging purposes. 25918 25919 -- Built-in Function: void * __builtin_extract_return_address (void 25920 *ADDR) 25921 The address as returned by `__builtin_return_address' may have to 25922 be fed through this function to get the actual encoded address. 25923 For example, on the 31-bit S/390 platform the highest bit has to 25924 be masked out, or on SPARC platforms an offset has to be added for 25925 the true next instruction to be executed. 25926 25927 If no fixup is needed, this function simply passes through ADDR. 25928 25929 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR) 25930 This function does the reverse of 25931 `__builtin_extract_return_address'. 25932 25933 -- Built-in Function: void * __builtin_frame_address (unsigned int 25934 LEVEL) 25935 This function is similar to `__builtin_return_address', but it 25936 returns the address of the function frame rather than the return 25937 address of the function. Calling `__builtin_frame_address' with a 25938 value of `0' yields the frame address of the current function, a 25939 value of `1' yields the frame address of the caller of the current 25940 function, and so forth. 25941 25942 The frame is the area on the stack which holds local variables and 25943 saved registers. The frame address is normally the address of the 25944 first word pushed on to the stack by the function. However, the 25945 exact definition depends upon the processor and the calling 25946 convention. If the processor has a dedicated frame pointer 25947 register, and the function has a frame, then 25948 `__builtin_frame_address' will return the value of the frame 25949 pointer register. 25950 25951 On some machines it may be impossible to determine the frame 25952 address of any function other than the current one; in such cases, 25953 or when the top of the stack has been reached, this function will 25954 return `0' if the first frame pointer is properly initialized by 25955 the startup code. 25956 25957 This function should only be used with a nonzero argument for 25958 debugging purposes. 25959 25960 25961File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 25962 259636.49 Using vector instructions through built-in functions 25964========================================================= 25965 25966On some targets, the instruction set contains SIMD vector instructions 25967that operate on multiple values contained in one large register at the 25968same time. For example, on the i386 the MMX, 3DNow! and SSE extensions 25969can be used this way. 25970 25971 The first step in using these extensions is to provide the necessary 25972data types. This should be done using an appropriate `typedef': 25973 25974 typedef int v4si __attribute__ ((vector_size (16))); 25975 25976 The `int' type specifies the base type, while the attribute specifies 25977the vector size for the variable, measured in bytes. For example, the 25978declaration above causes the compiler to set the mode for the `v4si' 25979type to be 16 bytes wide and divided into `int' sized units. For a 2598032-bit `int' this means a vector of 4 units of 4 bytes, and the 25981corresponding mode of `foo' will be V4SI. 25982 25983 The `vector_size' attribute is only applicable to integral and float 25984scalars, although arrays, pointers, and function return values are 25985allowed in conjunction with this construct. 25986 25987 All the basic integer types can be used as base types, both as signed 25988and as unsigned: `char', `short', `int', `long', `long long'. In 25989addition, `float' and `double' can be used to build floating-point 25990vector types. 25991 25992 Specifying a combination that is not valid for the current architecture 25993will cause GCC to synthesize the instructions using a narrower mode. 25994For example, if you specify a variable of type `V4SI' and your 25995architecture does not allow for this specific SIMD type, GCC will 25996produce code that uses 4 `SIs'. 25997 25998 The types defined in this manner can be used with a subset of normal C 25999operations. Currently, GCC will allow using the following operators on 26000these types: `+, -, *, /, unary minus, ^, |, &, ~, %'. 26001 26002 The operations behave like C++ `valarrays'. Addition is defined as 26003the addition of the corresponding elements of the operands. For 26004example, in the code below, each of the 4 elements in A will be added 26005to the corresponding 4 elements in B and the resulting vector will be 26006stored in C. 26007 26008 typedef int v4si __attribute__ ((vector_size (16))); 26009 26010 v4si a, b, c; 26011 26012 c = a + b; 26013 26014 Subtraction, multiplication, division, and the logical operations 26015operate in a similar manner. Likewise, the result of using the unary 26016minus or complement operators on a vector type is a vector whose 26017elements are the negative or complemented values of the corresponding 26018elements in the operand. 26019 26020 In C it is possible to use shifting operators `<<', `>>' on 26021integer-type vectors. The operation is defined as following: `{a0, a1, 26022..., an} >> {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. 26023Vector operands must have the same number of elements. Additionally 26024second operands can be a scalar integer in which case the scalar is 26025converted to the type used by the vector operand (with possible 26026truncation) and each element of this new vector is the scalar's value. 26027Consider the following code. 26028 26029 typedef int v4si __attribute__ ((vector_size (16))); 26030 26031 v4si a, b; 26032 26033 b = a >> 1; /* b = a >> {1,1,1,1}; */ 26034 26035 In C vectors can be subscripted as if the vector were an array with 26036the same number of elements and base type. Out of bound accesses 26037invoke undefined behavior at runtime. Warnings for out of bound 26038accesses for vector subscription can be enabled with `-Warray-bounds'. 26039 26040 You can declare variables and use them in function calls and returns, 26041as well as in assignments and some casts. You can specify a vector 26042type as a return type for a function. Vector types can also be used as 26043function arguments. It is possible to cast from one vector type to 26044another, provided they are of the same size (in fact, you can also cast 26045vectors to and from other datatypes of the same size). 26046 26047 You cannot operate between vectors of different lengths or different 26048signedness without a cast. 26049 26050 A port that supports hardware vector operations, usually provides a set 26051of built-in functions that can be used to operate on vectors. For 26052example, a function to add two vectors and multiply the result by a 26053third could look like this: 26054 26055 v4si f (v4si a, v4si b, v4si c) 26056 { 26057 v4si tmp = __builtin_addv4si (a, b); 26058 return __builtin_mulv4si (tmp, c); 26059 } 26060 26061 26062File: gcc.info, Node: Offsetof, Next: Atomic Builtins, Prev: Vector Extensions, Up: C Extensions 26063 260646.50 Offsetof 26065============= 26066 26067GCC implements for both C and C++ a syntactic extension to implement 26068the `offsetof' macro. 26069 26070 primary: 26071 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 26072 26073 offsetof_member_designator: 26074 `identifier' 26075 | offsetof_member_designator "." `identifier' 26076 | offsetof_member_designator "[" `expr' "]" 26077 26078 This extension is sufficient such that 26079 26080 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 26081 26082 is a suitable definition of the `offsetof' macro. In C++, TYPE may be 26083dependent. In either case, MEMBER may consist of a single identifier, 26084or a sequence of member accesses and array references. 26085 26086 26087File: gcc.info, Node: Atomic Builtins, Next: Object Size Checking, Prev: Offsetof, Up: C Extensions 26088 260896.51 Built-in functions for atomic memory access 26090================================================ 26091 26092The following builtins are intended to be compatible with those 26093described in the `Intel Itanium Processor-specific Application Binary 26094Interface', section 7.4. As such, they depart from the normal GCC 26095practice of using the "__builtin_" prefix, and further that they are 26096overloaded such that they work on multiple types. 26097 26098 The definition given in the Intel documentation allows only for the 26099use of the types `int', `long', `long long' as well as their unsigned 26100counterparts. GCC will allow any integral scalar or pointer type that 26101is 1, 2, 4 or 8 bytes in length. 26102 26103 Not all operations are supported by all target processors. If a 26104particular operation cannot be implemented on the target processor, a 26105warning will be generated and a call an external function will be 26106generated. The external function will carry the same name as the 26107builtin, with an additional suffix `_N' where N is the size of the data 26108type. 26109 26110 In most cases, these builtins are considered a "full barrier". That 26111is, no memory operand will be moved across the operation, either 26112forward or backward. Further, instructions will be issued as necessary 26113to prevent the processor from speculating loads across the operation 26114and from queuing stores after the operation. 26115 26116 All of the routines are described in the Intel documentation to take 26117"an optional list of variables protected by the memory barrier". It's 26118not clear what is meant by that; it could mean that _only_ the 26119following variables are protected, or it could mean that these variables 26120should in addition be protected. At present GCC ignores this list and 26121protects all variables which are globally accessible. If in the future 26122we make some use of this list, an empty list will continue to mean all 26123globally accessible variables. 26124 26125`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 26126`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 26127`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 26128`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 26129`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 26130`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 26131 These builtins perform the operation suggested by the name, and 26132 returns the value that had previously been in memory. That is, 26133 26134 { tmp = *ptr; *ptr OP= value; return tmp; } 26135 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 26136 26137 _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' 26138 builtin as `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & 26139 value'. 26140 26141`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 26142`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 26143`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 26144`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 26145`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 26146`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 26147 These builtins perform the operation suggested by the name, and 26148 return the new value. That is, 26149 26150 { *ptr OP= value; return *ptr; } 26151 { *ptr = ~(*ptr & value); return *ptr; } // nand 26152 26153 _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' 26154 builtin as `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & 26155 value'. 26156 26157`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 26158`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 26159 These builtins perform an atomic compare and swap. That is, if 26160 the current value of `*PTR' is OLDVAL, then write NEWVAL into 26161 `*PTR'. 26162 26163 The "bool" version returns true if the comparison is successful and 26164 NEWVAL was written. The "val" version returns the contents of 26165 `*PTR' before the operation. 26166 26167`__sync_synchronize (...)' 26168 This builtin issues a full memory barrier. 26169 26170`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 26171 This builtin, as described by Intel, is not a traditional 26172 test-and-set operation, but rather an atomic exchange operation. 26173 It writes VALUE into `*PTR', and returns the previous contents of 26174 `*PTR'. 26175 26176 Many targets have only minimal support for such locks, and do not 26177 support a full exchange operation. In this case, a target may 26178 support reduced functionality here by which the _only_ valid value 26179 to store is the immediate constant 1. The exact value actually 26180 stored in `*PTR' is implementation defined. 26181 26182 This builtin is not a full barrier, but rather an "acquire 26183 barrier". This means that references after the builtin cannot 26184 move to (or be speculated to) before the builtin, but previous 26185 memory stores may not be globally visible yet, and previous memory 26186 loads may not yet be satisfied. 26187 26188`void __sync_lock_release (TYPE *ptr, ...)' 26189 This builtin releases the lock acquired by 26190 `__sync_lock_test_and_set'. Normally this means writing the 26191 constant 0 to `*PTR'. 26192 26193 This builtin is not a full barrier, but rather a "release barrier". 26194 This means that all previous memory stores are globally visible, 26195 and all previous memory loads have been satisfied, but following 26196 memory reads are not prevented from being speculated to before the 26197 barrier. 26198 26199 26200File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: Atomic Builtins, Up: C Extensions 26201 262026.52 Object Size Checking Builtins 26203================================== 26204 26205GCC implements a limited buffer overflow protection mechanism that can 26206prevent some buffer overflow attacks. 26207 26208 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 26209 TYPE) 26210 is a built-in construct that returns a constant number of bytes 26211 from PTR to the end of the object PTR pointer points to (if known 26212 at compile time). `__builtin_object_size' never evaluates its 26213 arguments for side-effects. If there are any side-effects in 26214 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 26215 for TYPE 2 or 3. If there are multiple objects PTR can point to 26216 and all of them are known at compile time, the returned number is 26217 the maximum of remaining byte counts in those objects if TYPE & 2 26218 is 0 and minimum if nonzero. If it is not possible to determine 26219 which objects PTR points to at compile time, 26220 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 26221 1 and `(size_t) 0' for TYPE 2 or 3. 26222 26223 TYPE is an integer constant from 0 to 3. If the least significant 26224 bit is clear, objects are whole variables, if it is set, a closest 26225 surrounding subobject is considered the object a pointer points to. 26226 The second bit determines if maximum or minimum of remaining bytes 26227 is computed. 26228 26229 struct V { char buf1[10]; int b; char buf2[10]; } var; 26230 char *p = &var.buf1[1], *q = &var.b; 26231 26232 /* Here the object p points to is var. */ 26233 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 26234 /* The subobject p points to is var.buf1. */ 26235 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 26236 /* The object q points to is var. */ 26237 assert (__builtin_object_size (q, 0) 26238 == (char *) (&var + 1) - (char *) &var.b); 26239 /* The subobject q points to is var.b. */ 26240 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 26241 26242 There are built-in functions added for many common string operation 26243functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is 26244provided. This built-in has an additional last argument, which is the 26245number of bytes remaining in object the DEST argument points to or 26246`(size_t) -1' if the size is not known. 26247 26248 The built-in functions are optimized into the normal string functions 26249like `memcpy' if the last argument is `(size_t) -1' or if it is known 26250at compile time that the destination object will not be overflown. If 26251the compiler can determine at compile time the object will be always 26252overflown, it issues a warning. 26253 26254 The intended use can be e.g. 26255 26256 #undef memcpy 26257 #define bos0(dest) __builtin_object_size (dest, 0) 26258 #define memcpy(dest, src, n) \ 26259 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 26260 26261 char *volatile p; 26262 char buf[10]; 26263 /* It is unknown what object p points to, so this is optimized 26264 into plain memcpy - no checking is possible. */ 26265 memcpy (p, "abcde", n); 26266 /* Destination is known and length too. It is known at compile 26267 time there will be no overflow. */ 26268 memcpy (&buf[5], "abcde", 5); 26269 /* Destination is known, but the length is not known at compile time. 26270 This will result in __memcpy_chk call that can check for overflow 26271 at runtime. */ 26272 memcpy (&buf[5], "abcde", n); 26273 /* Destination is known and it is known at compile time there will 26274 be overflow. There will be a warning and __memcpy_chk call that 26275 will abort the program at runtime. */ 26276 memcpy (&buf[6], "abcde", 5); 26277 26278 Such built-in functions are provided for `memcpy', `mempcpy', 26279`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 26280`strncat'. 26281 26282 There are also checking built-in functions for formatted output 26283functions. 26284 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 26285 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 26286 const char *fmt, ...); 26287 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 26288 va_list ap); 26289 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 26290 const char *fmt, va_list ap); 26291 26292 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 26293functions and can contain implementation specific flags on what 26294additional security measures the checking function might take, such as 26295handling `%n' differently. 26296 26297 The OS argument is the object size S points to, like in the other 26298built-in functions. There is a small difference in the behavior 26299though, if OS is `(size_t) -1', the built-in functions are optimized 26300into the non-checking functions only if FLAG is 0, otherwise the 26301checking function is called with OS argument set to `(size_t) -1'. 26302 26303 In addition to this, there are checking built-in functions 26304`__builtin___printf_chk', `__builtin___vprintf_chk', 26305`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 26306just one additional argument, FLAG, right before format string FMT. If 26307the compiler is able to optimize them to `fputc' etc. functions, it 26308will, otherwise the checking function should be called and the FLAG 26309argument passed to it. 26310 26311 26312File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 26313 263146.53 Other built-in functions provided by GCC 26315============================================= 26316 26317GCC provides a large number of built-in functions other than the ones 26318mentioned above. Some of these are for internal use in the processing 26319of exceptions or variable-length argument lists and will not be 26320documented here because they may change from time to time; we do not 26321recommend general use of these functions. 26322 26323 The remaining functions are provided for optimization purposes. 26324 26325 GCC includes built-in versions of many of the functions in the standard 26326C library. The versions prefixed with `__builtin_' will always be 26327treated as having the same meaning as the C library function even if you 26328specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 26329these functions are only optimized in certain cases; if they are not 26330optimized in a particular case, a call to the library function will be 26331emitted. 26332 26333 Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or 26334`-std=c1x'), the functions `_exit', `alloca', `bcmp', `bzero', 26335`dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l', 26336`exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked', 26337`gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r', 26338`gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', 26339`jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', 26340`pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf', 26341`scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32', 26342`signbitd64', `signbitd128', `significandf', `significandl', 26343`significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', 26344`strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii', 26345`y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be 26346handled as built-in functions. All these functions have corresponding 26347versions prefixed with `__builtin_', which may be used even in strict 26348C90 mode. 26349 26350 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 26351`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 26352`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 26353`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 26354`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 26355`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 26356`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 26357`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 26358`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 26359`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 26360`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 26361`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 26362`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 26363`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 26364`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 26365`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 26366`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 26367`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 26368`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 26369`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 26370`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 26371`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 26372`remainderf', `remainderl', `remainder', `remquof', `remquol', 26373`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 26374`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 26375`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 26376`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 26377functions except in strict ISO C90 mode (`-ansi' or `-std=c90'). 26378 26379 There are also built-in versions of the ISO C99 functions `acosf', 26380`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 26381`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 26382`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 26383`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 26384`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 26385`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 26386recognized in any mode since ISO C90 reserves these names for the 26387purpose to which ISO C99 puts them. All these functions have 26388corresponding versions prefixed with `__builtin_'. 26389 26390 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 26391`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 26392`iswxdigit', `towlower' and `towupper' are handled as built-in functions 26393except in strict ISO C90 mode (`-ansi' or `-std=c90'). 26394 26395 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 26396`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 26397`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 26398`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 26399`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 26400`log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow', 26401`printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf', 26402`sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', 26403`strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk', 26404`strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and 26405`vsprintf' are all recognized as built-in functions unless 26406`-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified 26407for an individual function). All of these functions have corresponding 26408versions prefixed with `__builtin_'. 26409 26410 GCC provides built-in versions of the ISO C99 floating point comparison 26411macros that avoid raising exceptions for unordered operands. They have 26412the same names as the standard macros ( `isgreater', `isgreaterequal', 26413`isless', `islessequal', `islessgreater', and `isunordered') , with 26414`__builtin_' prefixed. We intend for a library implementor to be able 26415to simply `#define' each standard macro to its built-in equivalent. In 26416the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign' 26417and `isnormal' built-ins used with `__builtin_' prefixed. The `isinf' 26418and `isnan' builtins appear both with and without the `__builtin_' 26419prefix. 26420 26421 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 26422 You can use the built-in function `__builtin_types_compatible_p' to 26423 determine whether two types are the same. 26424 26425 This built-in function returns 1 if the unqualified versions of the 26426 types TYPE1 and TYPE2 (which are types, not expressions) are 26427 compatible, 0 otherwise. The result of this built-in function can 26428 be used in integer constant expressions. 26429 26430 This built-in function ignores top level qualifiers (e.g., `const', 26431 `volatile'). For example, `int' is equivalent to `const int'. 26432 26433 The type `int[]' and `int[5]' are compatible. On the other hand, 26434 `int' and `char *' are not compatible, even if the size of their 26435 types, on the particular architecture are the same. Also, the 26436 amount of pointer indirection is taken into account when 26437 determining similarity. Consequently, `short *' is not similar to 26438 `short **'. Furthermore, two types that are typedefed are 26439 considered compatible if their underlying types are compatible. 26440 26441 An `enum' type is not considered to be compatible with another 26442 `enum' type even if both are compatible with the same integer 26443 type; this is what the C standard specifies. For example, `enum 26444 {foo, bar}' is not similar to `enum {hot, dog}'. 26445 26446 You would typically use this function in code whose execution 26447 varies depending on the arguments' types. For example: 26448 26449 #define foo(x) \ 26450 ({ \ 26451 typeof (x) tmp = (x); \ 26452 if (__builtin_types_compatible_p (typeof (x), long double)) \ 26453 tmp = foo_long_double (tmp); \ 26454 else if (__builtin_types_compatible_p (typeof (x), double)) \ 26455 tmp = foo_double (tmp); \ 26456 else if (__builtin_types_compatible_p (typeof (x), float)) \ 26457 tmp = foo_float (tmp); \ 26458 else \ 26459 abort (); \ 26460 tmp; \ 26461 }) 26462 26463 _Note:_ This construct is only available for C. 26464 26465 26466 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 26467 EXP2) 26468 You can use the built-in function `__builtin_choose_expr' to 26469 evaluate code depending on the value of a constant expression. 26470 This built-in function returns EXP1 if CONST_EXP, which is an 26471 integer constant expression, is nonzero. Otherwise it returns 26472 EXP2. 26473 26474 This built-in function is analogous to the `? :' operator in C, 26475 except that the expression returned has its type unaltered by 26476 promotion rules. Also, the built-in function does not evaluate 26477 the expression that was not chosen. For example, if CONST_EXP 26478 evaluates to true, EXP2 is not evaluated even if it has 26479 side-effects. 26480 26481 This built-in function can return an lvalue if the chosen argument 26482 is an lvalue. 26483 26484 If EXP1 is returned, the return type is the same as EXP1's type. 26485 Similarly, if EXP2 is returned, its return type is the same as 26486 EXP2. 26487 26488 Example: 26489 26490 #define foo(x) \ 26491 __builtin_choose_expr ( \ 26492 __builtin_types_compatible_p (typeof (x), double), \ 26493 foo_double (x), \ 26494 __builtin_choose_expr ( \ 26495 __builtin_types_compatible_p (typeof (x), float), \ 26496 foo_float (x), \ 26497 /* The void expression results in a compile-time error \ 26498 when assigning the result to something. */ \ 26499 (void)0)) 26500 26501 _Note:_ This construct is only available for C. Furthermore, the 26502 unused expression (EXP1 or EXP2 depending on the value of 26503 CONST_EXP) may still generate syntax errors. This may change in 26504 future revisions. 26505 26506 26507 -- Built-in Function: int __builtin_constant_p (EXP) 26508 You can use the built-in function `__builtin_constant_p' to 26509 determine if a value is known to be constant at compile-time and 26510 hence that GCC can perform constant-folding on expressions 26511 involving that value. The argument of the function is the value 26512 to test. The function returns the integer 1 if the argument is 26513 known to be a compile-time constant and 0 if it is not known to be 26514 a compile-time constant. A return of 0 does not indicate that the 26515 value is _not_ a constant, but merely that GCC cannot prove it is 26516 a constant with the specified value of the `-O' option. 26517 26518 You would typically use this function in an embedded application 26519 where memory was a critical resource. If you have some complex 26520 calculation, you may want it to be folded if it involves 26521 constants, but need to call a function if it does not. For 26522 example: 26523 26524 #define Scale_Value(X) \ 26525 (__builtin_constant_p (X) \ 26526 ? ((X) * SCALE + OFFSET) : Scale (X)) 26527 26528 You may use this built-in function in either a macro or an inline 26529 function. However, if you use it in an inlined function and pass 26530 an argument of the function as the argument to the built-in, GCC 26531 will never return 1 when you call the inline function with a 26532 string constant or compound literal (*note Compound Literals::) 26533 and will not return 1 when you pass a constant numeric value to 26534 the inline function unless you specify the `-O' option. 26535 26536 You may also use `__builtin_constant_p' in initializers for static 26537 data. For instance, you can write 26538 26539 static const int table[] = { 26540 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 26541 /* ... */ 26542 }; 26543 26544 This is an acceptable initializer even if EXPRESSION is not a 26545 constant expression, including the case where 26546 `__builtin_constant_p' returns 1 because EXPRESSION can be folded 26547 to a constant but EXPRESSION contains operands that would not 26548 otherwise be permitted in a static initializer (for example, `0 && 26549 foo ()'). GCC must be more conservative about evaluating the 26550 built-in in this case, because it has no opportunity to perform 26551 optimization. 26552 26553 Previous versions of GCC did not accept this built-in in data 26554 initializers. The earliest version where it is completely safe is 26555 3.0.1. 26556 26557 -- Built-in Function: long __builtin_expect (long EXP, long C) 26558 You may use `__builtin_expect' to provide the compiler with branch 26559 prediction information. In general, you should prefer to use 26560 actual profile feedback for this (`-fprofile-arcs'), as 26561 programmers are notoriously bad at predicting how their programs 26562 actually perform. However, there are applications in which this 26563 data is hard to collect. 26564 26565 The return value is the value of EXP, which should be an integral 26566 expression. The semantics of the built-in are that it is expected 26567 that EXP == C. For example: 26568 26569 if (__builtin_expect (x, 0)) 26570 foo (); 26571 26572 would indicate that we do not expect to call `foo', since we 26573 expect `x' to be zero. Since you are limited to integral 26574 expressions for EXP, you should use constructions such as 26575 26576 if (__builtin_expect (ptr != NULL, 1)) 26577 error (); 26578 26579 when testing pointer or floating-point values. 26580 26581 -- Built-in Function: void __builtin_trap (void) 26582 This function causes the program to exit abnormally. GCC 26583 implements this function by using a target-dependent mechanism 26584 (such as intentionally executing an illegal instruction) or by 26585 calling `abort'. The mechanism used may vary from release to 26586 release so you should not rely on any particular implementation. 26587 26588 -- Built-in Function: void __builtin_unreachable (void) 26589 If control flow reaches the point of the `__builtin_unreachable', 26590 the program is undefined. It is useful in situations where the 26591 compiler cannot deduce the unreachability of the code. 26592 26593 One such case is immediately following an `asm' statement that 26594 will either never terminate, or one that transfers control 26595 elsewhere and never returns. In this example, without the 26596 `__builtin_unreachable', GCC would issue a warning that control 26597 reaches the end of a non-void function. It would also generate 26598 code to return after the `asm'. 26599 26600 int f (int c, int v) 26601 { 26602 if (c) 26603 { 26604 return v; 26605 } 26606 else 26607 { 26608 asm("jmp error_handler"); 26609 __builtin_unreachable (); 26610 } 26611 } 26612 26613 Because the `asm' statement unconditionally transfers control out 26614 of the function, control will never reach the end of the function 26615 body. The `__builtin_unreachable' is in fact unreachable and 26616 communicates this fact to the compiler. 26617 26618 Another use for `__builtin_unreachable' is following a call a 26619 function that never returns but that is not declared 26620 `__attribute__((noreturn))', as in this example: 26621 26622 void function_that_never_returns (void); 26623 26624 int g (int c) 26625 { 26626 if (c) 26627 { 26628 return 1; 26629 } 26630 else 26631 { 26632 function_that_never_returns (); 26633 __builtin_unreachable (); 26634 } 26635 } 26636 26637 26638 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 26639 *END) 26640 This function is used to flush the processor's instruction cache 26641 for the region of memory between BEGIN inclusive and END 26642 exclusive. Some targets require that the instruction cache be 26643 flushed, after modifying memory containing code, in order to obtain 26644 deterministic behavior. 26645 26646 If the target does not require instruction cache flushes, 26647 `__builtin___clear_cache' has no effect. Otherwise either 26648 instructions are emitted in-line to clear the instruction cache or 26649 a call to the `__clear_cache' function in libgcc is made. 26650 26651 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 26652 This function is used to minimize cache-miss latency by moving 26653 data into a cache before it is accessed. You can insert calls to 26654 `__builtin_prefetch' into code for which you know addresses of 26655 data in memory that is likely to be accessed soon. If the target 26656 supports them, data prefetch instructions will be generated. If 26657 the prefetch is done early enough before the access then the data 26658 will be in the cache by the time it is accessed. 26659 26660 The value of ADDR is the address of the memory to prefetch. There 26661 are two optional arguments, RW and LOCALITY. The value of RW is a 26662 compile-time constant one or zero; one means that the prefetch is 26663 preparing for a write to the memory address and zero, the default, 26664 means that the prefetch is preparing for a read. The value 26665 LOCALITY must be a compile-time constant integer between zero and 26666 three. A value of zero means that the data has no temporal 26667 locality, so it need not be left in the cache after the access. A 26668 value of three means that the data has a high degree of temporal 26669 locality and should be left in all levels of cache possible. 26670 Values of one and two mean, respectively, a low or moderate degree 26671 of temporal locality. The default is three. 26672 26673 for (i = 0; i < n; i++) 26674 { 26675 a[i] = a[i] + b[i]; 26676 __builtin_prefetch (&a[i+j], 1, 1); 26677 __builtin_prefetch (&b[i+j], 0, 1); 26678 /* ... */ 26679 } 26680 26681 Data prefetch does not generate faults if ADDR is invalid, but the 26682 address expression itself must be valid. For example, a prefetch 26683 of `p->next' will not fault if `p->next' is not a valid address, 26684 but evaluation will fault if `p' is not a valid address. 26685 26686 If the target does not support data prefetch, the address 26687 expression is evaluated if it includes side effects but no other 26688 code is generated and GCC does not issue a warning. 26689 26690 -- Built-in Function: double __builtin_huge_val (void) 26691 Returns a positive infinity, if supported by the floating-point 26692 format, else `DBL_MAX'. This function is suitable for 26693 implementing the ISO C macro `HUGE_VAL'. 26694 26695 -- Built-in Function: float __builtin_huge_valf (void) 26696 Similar to `__builtin_huge_val', except the return type is `float'. 26697 26698 -- Built-in Function: long double __builtin_huge_vall (void) 26699 Similar to `__builtin_huge_val', except the return type is `long 26700 double'. 26701 26702 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 26703 int, ...) 26704 This built-in implements the C99 fpclassify functionality. The 26705 first five int arguments should be the target library's notion of 26706 the possible FP classes and are used for return values. They must 26707 be constant values and they must appear in this order: `FP_NAN', 26708 `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'. The 26709 ellipsis is for exactly one floating point value to classify. GCC 26710 treats the last argument as type-generic, which means it does not 26711 do default promotion from float to double. 26712 26713 -- Built-in Function: double __builtin_inf (void) 26714 Similar to `__builtin_huge_val', except a warning is generated if 26715 the target floating-point format does not support infinities. 26716 26717 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 26718 Similar to `__builtin_inf', except the return type is `_Decimal32'. 26719 26720 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 26721 Similar to `__builtin_inf', except the return type is `_Decimal64'. 26722 26723 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 26724 Similar to `__builtin_inf', except the return type is 26725 `_Decimal128'. 26726 26727 -- Built-in Function: float __builtin_inff (void) 26728 Similar to `__builtin_inf', except the return type is `float'. 26729 This function is suitable for implementing the ISO C99 macro 26730 `INFINITY'. 26731 26732 -- Built-in Function: long double __builtin_infl (void) 26733 Similar to `__builtin_inf', except the return type is `long 26734 double'. 26735 26736 -- Built-in Function: int __builtin_isinf_sign (...) 26737 Similar to `isinf', except the return value will be negative for 26738 an argument of `-Inf'. Note while the parameter list is an 26739 ellipsis, this function only accepts exactly one floating point 26740 argument. GCC treats this parameter as type-generic, which means 26741 it does not do default promotion from float to double. 26742 26743 -- Built-in Function: double __builtin_nan (const char *str) 26744 This is an implementation of the ISO C99 function `nan'. 26745 26746 Since ISO C99 defines this function in terms of `strtod', which we 26747 do not implement, a description of the parsing is in order. The 26748 string is parsed as by `strtol'; that is, the base is recognized by 26749 leading `0' or `0x' prefixes. The number parsed is placed in the 26750 significand such that the least significant bit of the number is 26751 at the least significant bit of the significand. The number is 26752 truncated to fit the significand field provided. The significand 26753 is forced to be a quiet NaN. 26754 26755 This function, if given a string literal all of which would have 26756 been consumed by strtol, is evaluated early enough that it is 26757 considered a compile-time constant. 26758 26759 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 26760 Similar to `__builtin_nan', except the return type is `_Decimal32'. 26761 26762 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 26763 Similar to `__builtin_nan', except the return type is `_Decimal64'. 26764 26765 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 26766 Similar to `__builtin_nan', except the return type is 26767 `_Decimal128'. 26768 26769 -- Built-in Function: float __builtin_nanf (const char *str) 26770 Similar to `__builtin_nan', except the return type is `float'. 26771 26772 -- Built-in Function: long double __builtin_nanl (const char *str) 26773 Similar to `__builtin_nan', except the return type is `long 26774 double'. 26775 26776 -- Built-in Function: double __builtin_nans (const char *str) 26777 Similar to `__builtin_nan', except the significand is forced to be 26778 a signaling NaN. The `nans' function is proposed by WG14 N965. 26779 26780 -- Built-in Function: float __builtin_nansf (const char *str) 26781 Similar to `__builtin_nans', except the return type is `float'. 26782 26783 -- Built-in Function: long double __builtin_nansl (const char *str) 26784 Similar to `__builtin_nans', except the return type is `long 26785 double'. 26786 26787 -- Built-in Function: int __builtin_ffs (unsigned int x) 26788 Returns one plus the index of the least significant 1-bit of X, or 26789 if X is zero, returns zero. 26790 26791 -- Built-in Function: int __builtin_clz (unsigned int x) 26792 Returns the number of leading 0-bits in X, starting at the most 26793 significant bit position. If X is 0, the result is undefined. 26794 26795 -- Built-in Function: int __builtin_ctz (unsigned int x) 26796 Returns the number of trailing 0-bits in X, starting at the least 26797 significant bit position. If X is 0, the result is undefined. 26798 26799 -- Built-in Function: int __builtin_popcount (unsigned int x) 26800 Returns the number of 1-bits in X. 26801 26802 -- Built-in Function: int __builtin_parity (unsigned int x) 26803 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 26804 26805 -- Built-in Function: int __builtin_ffsl (unsigned long) 26806 Similar to `__builtin_ffs', except the argument type is `unsigned 26807 long'. 26808 26809 -- Built-in Function: int __builtin_clzl (unsigned long) 26810 Similar to `__builtin_clz', except the argument type is `unsigned 26811 long'. 26812 26813 -- Built-in Function: int __builtin_ctzl (unsigned long) 26814 Similar to `__builtin_ctz', except the argument type is `unsigned 26815 long'. 26816 26817 -- Built-in Function: int __builtin_popcountl (unsigned long) 26818 Similar to `__builtin_popcount', except the argument type is 26819 `unsigned long'. 26820 26821 -- Built-in Function: int __builtin_parityl (unsigned long) 26822 Similar to `__builtin_parity', except the argument type is 26823 `unsigned long'. 26824 26825 -- Built-in Function: int __builtin_ffsll (unsigned long long) 26826 Similar to `__builtin_ffs', except the argument type is `unsigned 26827 long long'. 26828 26829 -- Built-in Function: int __builtin_clzll (unsigned long long) 26830 Similar to `__builtin_clz', except the argument type is `unsigned 26831 long long'. 26832 26833 -- Built-in Function: int __builtin_ctzll (unsigned long long) 26834 Similar to `__builtin_ctz', except the argument type is `unsigned 26835 long long'. 26836 26837 -- Built-in Function: int __builtin_popcountll (unsigned long long) 26838 Similar to `__builtin_popcount', except the argument type is 26839 `unsigned long long'. 26840 26841 -- Built-in Function: int __builtin_parityll (unsigned long long) 26842 Similar to `__builtin_parity', except the argument type is 26843 `unsigned long long'. 26844 26845 -- Built-in Function: double __builtin_powi (double, int) 26846 Returns the first argument raised to the power of the second. 26847 Unlike the `pow' function no guarantees about precision and 26848 rounding are made. 26849 26850 -- Built-in Function: float __builtin_powif (float, int) 26851 Similar to `__builtin_powi', except the argument and return types 26852 are `float'. 26853 26854 -- Built-in Function: long double __builtin_powil (long double, int) 26855 Similar to `__builtin_powi', except the argument and return types 26856 are `long double'. 26857 26858 -- Built-in Function: int32_t __builtin_bswap32 (int32_t x) 26859 Returns X with the order of the bytes reversed; for example, 26860 `0xaabbccdd' becomes `0xddccbbaa'. Byte here always means exactly 26861 8 bits. 26862 26863 -- Built-in Function: int64_t __builtin_bswap64 (int64_t x) 26864 Similar to `__builtin_bswap32', except the argument and return 26865 types are 64-bit. 26866 26867 26868File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 26869 268706.54 Built-in Functions Specific to Particular Target Machines 26871============================================================== 26872 26873On some target machines, GCC supports many built-in functions specific 26874to those machines. Generally these generate calls to specific machine 26875instructions, but allow the compiler to schedule those calls. 26876 26877* Menu: 26878 26879* Alpha Built-in Functions:: 26880* ARM iWMMXt Built-in Functions:: 26881* ARM NEON Intrinsics:: 26882* Blackfin Built-in Functions:: 26883* FR-V Built-in Functions:: 26884* X86 Built-in Functions:: 26885* MIPS DSP Built-in Functions:: 26886* MIPS Paired-Single Support:: 26887* MIPS Loongson Built-in Functions:: 26888* Other MIPS Built-in Functions:: 26889* picoChip Built-in Functions:: 26890* PowerPC AltiVec/VSX Built-in Functions:: 26891* RX Built-in Functions:: 26892* SPARC VIS Built-in Functions:: 26893* SPU Built-in Functions:: 26894 26895 26896File: gcc.info, Node: Alpha Built-in Functions, Next: ARM iWMMXt Built-in Functions, Up: Target Builtins 26897 268986.54.1 Alpha Built-in Functions 26899------------------------------- 26900 26901These built-in functions are available for the Alpha family of 26902processors, depending on the command-line switches used. 26903 26904 The following built-in functions are always available. They all 26905generate the machine instruction that is part of the name. 26906 26907 long __builtin_alpha_implver (void) 26908 long __builtin_alpha_rpcc (void) 26909 long __builtin_alpha_amask (long) 26910 long __builtin_alpha_cmpbge (long, long) 26911 long __builtin_alpha_extbl (long, long) 26912 long __builtin_alpha_extwl (long, long) 26913 long __builtin_alpha_extll (long, long) 26914 long __builtin_alpha_extql (long, long) 26915 long __builtin_alpha_extwh (long, long) 26916 long __builtin_alpha_extlh (long, long) 26917 long __builtin_alpha_extqh (long, long) 26918 long __builtin_alpha_insbl (long, long) 26919 long __builtin_alpha_inswl (long, long) 26920 long __builtin_alpha_insll (long, long) 26921 long __builtin_alpha_insql (long, long) 26922 long __builtin_alpha_inswh (long, long) 26923 long __builtin_alpha_inslh (long, long) 26924 long __builtin_alpha_insqh (long, long) 26925 long __builtin_alpha_mskbl (long, long) 26926 long __builtin_alpha_mskwl (long, long) 26927 long __builtin_alpha_mskll (long, long) 26928 long __builtin_alpha_mskql (long, long) 26929 long __builtin_alpha_mskwh (long, long) 26930 long __builtin_alpha_msklh (long, long) 26931 long __builtin_alpha_mskqh (long, long) 26932 long __builtin_alpha_umulh (long, long) 26933 long __builtin_alpha_zap (long, long) 26934 long __builtin_alpha_zapnot (long, long) 26935 26936 The following built-in functions are always with `-mmax' or 26937`-mcpu=CPU' where CPU is `pca56' or later. They all generate the 26938machine instruction that is part of the name. 26939 26940 long __builtin_alpha_pklb (long) 26941 long __builtin_alpha_pkwb (long) 26942 long __builtin_alpha_unpkbl (long) 26943 long __builtin_alpha_unpkbw (long) 26944 long __builtin_alpha_minub8 (long, long) 26945 long __builtin_alpha_minsb8 (long, long) 26946 long __builtin_alpha_minuw4 (long, long) 26947 long __builtin_alpha_minsw4 (long, long) 26948 long __builtin_alpha_maxub8 (long, long) 26949 long __builtin_alpha_maxsb8 (long, long) 26950 long __builtin_alpha_maxuw4 (long, long) 26951 long __builtin_alpha_maxsw4 (long, long) 26952 long __builtin_alpha_perr (long, long) 26953 26954 The following built-in functions are always with `-mcix' or 26955`-mcpu=CPU' where CPU is `ev67' or later. They all generate the 26956machine instruction that is part of the name. 26957 26958 long __builtin_alpha_cttz (long) 26959 long __builtin_alpha_ctlz (long) 26960 long __builtin_alpha_ctpop (long) 26961 26962 The following builtins are available on systems that use the OSF/1 26963PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but 26964when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'. 26965 26966 void *__builtin_thread_pointer (void) 26967 void __builtin_set_thread_pointer (void *) 26968 26969 26970File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: Alpha Built-in Functions, Up: Target Builtins 26971 269726.54.2 ARM iWMMXt Built-in Functions 26973------------------------------------ 26974 26975These built-in functions are available for the ARM family of processors 26976when the `-mcpu=iwmmxt' switch is used: 26977 26978 typedef int v2si __attribute__ ((vector_size (8))); 26979 typedef short v4hi __attribute__ ((vector_size (8))); 26980 typedef char v8qi __attribute__ ((vector_size (8))); 26981 26982 int __builtin_arm_getwcx (int) 26983 void __builtin_arm_setwcx (int, int) 26984 int __builtin_arm_textrmsb (v8qi, int) 26985 int __builtin_arm_textrmsh (v4hi, int) 26986 int __builtin_arm_textrmsw (v2si, int) 26987 int __builtin_arm_textrmub (v8qi, int) 26988 int __builtin_arm_textrmuh (v4hi, int) 26989 int __builtin_arm_textrmuw (v2si, int) 26990 v8qi __builtin_arm_tinsrb (v8qi, int) 26991 v4hi __builtin_arm_tinsrh (v4hi, int) 26992 v2si __builtin_arm_tinsrw (v2si, int) 26993 long long __builtin_arm_tmia (long long, int, int) 26994 long long __builtin_arm_tmiabb (long long, int, int) 26995 long long __builtin_arm_tmiabt (long long, int, int) 26996 long long __builtin_arm_tmiaph (long long, int, int) 26997 long long __builtin_arm_tmiatb (long long, int, int) 26998 long long __builtin_arm_tmiatt (long long, int, int) 26999 int __builtin_arm_tmovmskb (v8qi) 27000 int __builtin_arm_tmovmskh (v4hi) 27001 int __builtin_arm_tmovmskw (v2si) 27002 long long __builtin_arm_waccb (v8qi) 27003 long long __builtin_arm_wacch (v4hi) 27004 long long __builtin_arm_waccw (v2si) 27005 v8qi __builtin_arm_waddb (v8qi, v8qi) 27006 v8qi __builtin_arm_waddbss (v8qi, v8qi) 27007 v8qi __builtin_arm_waddbus (v8qi, v8qi) 27008 v4hi __builtin_arm_waddh (v4hi, v4hi) 27009 v4hi __builtin_arm_waddhss (v4hi, v4hi) 27010 v4hi __builtin_arm_waddhus (v4hi, v4hi) 27011 v2si __builtin_arm_waddw (v2si, v2si) 27012 v2si __builtin_arm_waddwss (v2si, v2si) 27013 v2si __builtin_arm_waddwus (v2si, v2si) 27014 v8qi __builtin_arm_walign (v8qi, v8qi, int) 27015 long long __builtin_arm_wand(long long, long long) 27016 long long __builtin_arm_wandn (long long, long long) 27017 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 27018 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 27019 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 27020 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 27021 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 27022 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 27023 v2si __builtin_arm_wcmpeqw (v2si, v2si) 27024 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 27025 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 27026 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 27027 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 27028 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 27029 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 27030 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 27031 long long __builtin_arm_wmacsz (v4hi, v4hi) 27032 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 27033 long long __builtin_arm_wmacuz (v4hi, v4hi) 27034 v4hi __builtin_arm_wmadds (v4hi, v4hi) 27035 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 27036 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 27037 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 27038 v2si __builtin_arm_wmaxsw (v2si, v2si) 27039 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 27040 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 27041 v2si __builtin_arm_wmaxuw (v2si, v2si) 27042 v8qi __builtin_arm_wminsb (v8qi, v8qi) 27043 v4hi __builtin_arm_wminsh (v4hi, v4hi) 27044 v2si __builtin_arm_wminsw (v2si, v2si) 27045 v8qi __builtin_arm_wminub (v8qi, v8qi) 27046 v4hi __builtin_arm_wminuh (v4hi, v4hi) 27047 v2si __builtin_arm_wminuw (v2si, v2si) 27048 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 27049 v4hi __builtin_arm_wmulul (v4hi, v4hi) 27050 v4hi __builtin_arm_wmulum (v4hi, v4hi) 27051 long long __builtin_arm_wor (long long, long long) 27052 v2si __builtin_arm_wpackdss (long long, long long) 27053 v2si __builtin_arm_wpackdus (long long, long long) 27054 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 27055 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 27056 v4hi __builtin_arm_wpackwss (v2si, v2si) 27057 v4hi __builtin_arm_wpackwus (v2si, v2si) 27058 long long __builtin_arm_wrord (long long, long long) 27059 long long __builtin_arm_wrordi (long long, int) 27060 v4hi __builtin_arm_wrorh (v4hi, long long) 27061 v4hi __builtin_arm_wrorhi (v4hi, int) 27062 v2si __builtin_arm_wrorw (v2si, long long) 27063 v2si __builtin_arm_wrorwi (v2si, int) 27064 v2si __builtin_arm_wsadb (v8qi, v8qi) 27065 v2si __builtin_arm_wsadbz (v8qi, v8qi) 27066 v2si __builtin_arm_wsadh (v4hi, v4hi) 27067 v2si __builtin_arm_wsadhz (v4hi, v4hi) 27068 v4hi __builtin_arm_wshufh (v4hi, int) 27069 long long __builtin_arm_wslld (long long, long long) 27070 long long __builtin_arm_wslldi (long long, int) 27071 v4hi __builtin_arm_wsllh (v4hi, long long) 27072 v4hi __builtin_arm_wsllhi (v4hi, int) 27073 v2si __builtin_arm_wsllw (v2si, long long) 27074 v2si __builtin_arm_wsllwi (v2si, int) 27075 long long __builtin_arm_wsrad (long long, long long) 27076 long long __builtin_arm_wsradi (long long, int) 27077 v4hi __builtin_arm_wsrah (v4hi, long long) 27078 v4hi __builtin_arm_wsrahi (v4hi, int) 27079 v2si __builtin_arm_wsraw (v2si, long long) 27080 v2si __builtin_arm_wsrawi (v2si, int) 27081 long long __builtin_arm_wsrld (long long, long long) 27082 long long __builtin_arm_wsrldi (long long, int) 27083 v4hi __builtin_arm_wsrlh (v4hi, long long) 27084 v4hi __builtin_arm_wsrlhi (v4hi, int) 27085 v2si __builtin_arm_wsrlw (v2si, long long) 27086 v2si __builtin_arm_wsrlwi (v2si, int) 27087 v8qi __builtin_arm_wsubb (v8qi, v8qi) 27088 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 27089 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 27090 v4hi __builtin_arm_wsubh (v4hi, v4hi) 27091 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 27092 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 27093 v2si __builtin_arm_wsubw (v2si, v2si) 27094 v2si __builtin_arm_wsubwss (v2si, v2si) 27095 v2si __builtin_arm_wsubwus (v2si, v2si) 27096 v4hi __builtin_arm_wunpckehsb (v8qi) 27097 v2si __builtin_arm_wunpckehsh (v4hi) 27098 long long __builtin_arm_wunpckehsw (v2si) 27099 v4hi __builtin_arm_wunpckehub (v8qi) 27100 v2si __builtin_arm_wunpckehuh (v4hi) 27101 long long __builtin_arm_wunpckehuw (v2si) 27102 v4hi __builtin_arm_wunpckelsb (v8qi) 27103 v2si __builtin_arm_wunpckelsh (v4hi) 27104 long long __builtin_arm_wunpckelsw (v2si) 27105 v4hi __builtin_arm_wunpckelub (v8qi) 27106 v2si __builtin_arm_wunpckeluh (v4hi) 27107 long long __builtin_arm_wunpckeluw (v2si) 27108 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 27109 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 27110 v2si __builtin_arm_wunpckihw (v2si, v2si) 27111 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 27112 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 27113 v2si __builtin_arm_wunpckilw (v2si, v2si) 27114 long long __builtin_arm_wxor (long long, long long) 27115 long long __builtin_arm_wzero () 27116 27117 27118File: gcc.info, Node: ARM NEON Intrinsics, Next: Blackfin Built-in Functions, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 27119 271206.54.3 ARM NEON Intrinsics 27121-------------------------- 27122 27123These built-in intrinsics for the ARM Advanced SIMD extension are 27124available when the `-mfpu=neon' switch is used: 27125 271266.54.3.1 Addition 27127................. 27128 27129 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) 27130 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 27131 27132 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) 27133 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 27134 27135 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) 27136 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 27137 27138 * int32x2_t vadd_s32 (int32x2_t, int32x2_t) 27139 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 27140 27141 * int16x4_t vadd_s16 (int16x4_t, int16x4_t) 27142 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 27143 27144 * int8x8_t vadd_s8 (int8x8_t, int8x8_t) 27145 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 27146 27147 * float32x2_t vadd_f32 (float32x2_t, float32x2_t) 27148 _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0' 27149 27150 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) 27151 27152 * int64x1_t vadd_s64 (int64x1_t, int64x1_t) 27153 27154 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) 27155 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 27156 27157 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) 27158 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 27159 27160 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) 27161 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 27162 27163 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) 27164 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 27165 27166 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) 27167 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 27168 27169 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) 27170 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 27171 27172 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) 27173 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 27174 27175 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) 27176 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 27177 27178 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) 27179 _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0' 27180 27181 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) 27182 _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0' 27183 27184 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) 27185 _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0' 27186 27187 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) 27188 _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0' 27189 27190 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) 27191 _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0' 27192 27193 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) 27194 _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0' 27195 27196 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) 27197 _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0' 27198 27199 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) 27200 _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0' 27201 27202 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) 27203 _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0' 27204 27205 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) 27206 _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0' 27207 27208 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) 27209 _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0' 27210 27211 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) 27212 _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0' 27213 27214 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) 27215 _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0' 27216 27217 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) 27218 _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0' 27219 27220 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) 27221 _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0' 27222 27223 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) 27224 _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0' 27225 27226 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) 27227 _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0' 27228 27229 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) 27230 _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0' 27231 27232 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) 27233 _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0' 27234 27235 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) 27236 _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0' 27237 27238 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) 27239 _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0' 27240 27241 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) 27242 _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0' 27243 27244 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) 27245 _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0' 27246 27247 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) 27248 _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0' 27249 27250 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) 27251 _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0' 27252 27253 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) 27254 _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0' 27255 27256 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) 27257 _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0' 27258 27259 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) 27260 _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0' 27261 27262 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) 27263 _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0' 27264 27265 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) 27266 _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0' 27267 27268 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) 27269 _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0' 27270 27271 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) 27272 _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0' 27273 27274 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) 27275 _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0' 27276 27277 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) 27278 _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0' 27279 27280 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) 27281 _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0' 27282 27283 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) 27284 _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0' 27285 27286 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) 27287 _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0' 27288 27289 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) 27290 _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0' 27291 27292 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) 27293 _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0' 27294 27295 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) 27296 _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0' 27297 27298 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) 27299 _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0' 27300 27301 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) 27302 _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0' 27303 27304 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) 27305 _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0' 27306 27307 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) 27308 _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0' 27309 27310 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) 27311 _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0' 27312 27313 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) 27314 _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0' 27315 27316 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) 27317 _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0' 27318 27319 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) 27320 _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0' 27321 27322 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) 27323 _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0' 27324 27325 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) 27326 _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0' 27327 27328 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) 27329 _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0' 27330 27331 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) 27332 _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0' 27333 27334 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) 27335 _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0' 27336 27337 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) 27338 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 27339 27340 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) 27341 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 27342 27343 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) 27344 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 27345 27346 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) 27347 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 27348 27349 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) 27350 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 27351 27352 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) 27353 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 27354 27355 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) 27356 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 27357 27358 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) 27359 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 27360 27361 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) 27362 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 27363 27364 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) 27365 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 27366 27367 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) 27368 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 27369 27370 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) 27371 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 27372 273736.54.3.2 Multiplication 27374....................... 27375 27376 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) 27377 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 27378 27379 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) 27380 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 27381 27382 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) 27383 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 27384 27385 * int32x2_t vmul_s32 (int32x2_t, int32x2_t) 27386 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 27387 27388 * int16x4_t vmul_s16 (int16x4_t, int16x4_t) 27389 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 27390 27391 * int8x8_t vmul_s8 (int8x8_t, int8x8_t) 27392 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 27393 27394 * float32x2_t vmul_f32 (float32x2_t, float32x2_t) 27395 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0' 27396 27397 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) 27398 _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0' 27399 27400 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) 27401 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 27402 27403 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) 27404 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 27405 27406 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) 27407 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 27408 27409 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) 27410 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 27411 27412 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) 27413 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 27414 27415 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) 27416 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 27417 27418 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) 27419 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0' 27420 27421 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) 27422 _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0' 27423 27424 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) 27425 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0' 27426 27427 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) 27428 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0' 27429 27430 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) 27431 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0' 27432 27433 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) 27434 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0' 27435 27436 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) 27437 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0' 27438 27439 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) 27440 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0' 27441 27442 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) 27443 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0' 27444 27445 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) 27446 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0' 27447 27448 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) 27449 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0' 27450 27451 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) 27452 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0' 27453 27454 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) 27455 _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0' 27456 27457 * int64x2_t vmull_s32 (int32x2_t, int32x2_t) 27458 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0' 27459 27460 * int32x4_t vmull_s16 (int16x4_t, int16x4_t) 27461 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0' 27462 27463 * int16x8_t vmull_s8 (int8x8_t, int8x8_t) 27464 _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0' 27465 27466 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) 27467 _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0' 27468 27469 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) 27470 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0' 27471 27472 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) 27473 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0' 27474 274756.54.3.3 Multiply-accumulate 27476............................ 27477 27478 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 27479 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 27480 27481 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 27482 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 27483 27484 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 27485 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 27486 27487 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) 27488 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 27489 27490 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) 27491 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 27492 27493 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) 27494 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 27495 27496 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) 27497 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0' 27498 27499 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 27500 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 27501 27502 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 27503 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 27504 27505 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 27506 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 27507 27508 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) 27509 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 27510 27511 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) 27512 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 27513 27514 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) 27515 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 27516 27517 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) 27518 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0' 27519 27520 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 27521 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0' 27522 27523 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 27524 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0' 27525 27526 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 27527 _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0' 27528 27529 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 27530 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0' 27531 27532 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 27533 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0' 27534 27535 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) 27536 _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0' 27537 27538 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 27539 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0' 27540 27541 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 27542 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0' 27543 275446.54.3.4 Multiply-subtract 27545.......................... 27546 27547 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 27548 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 27549 27550 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 27551 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 27552 27553 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 27554 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 27555 27556 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) 27557 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 27558 27559 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) 27560 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 27561 27562 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) 27563 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 27564 27565 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) 27566 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0' 27567 27568 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 27569 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 27570 27571 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 27572 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 27573 27574 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 27575 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 27576 27577 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) 27578 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 27579 27580 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) 27581 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 27582 27583 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) 27584 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 27585 27586 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) 27587 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0' 27588 27589 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 27590 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0' 27591 27592 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 27593 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0' 27594 27595 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 27596 _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0' 27597 27598 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 27599 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0' 27600 27601 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 27602 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0' 27603 27604 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) 27605 _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0' 27606 27607 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 27608 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0' 27609 27610 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 27611 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0' 27612 276136.54.3.5 Subtraction 27614.................... 27615 27616 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) 27617 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 27618 27619 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) 27620 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 27621 27622 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) 27623 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 27624 27625 * int32x2_t vsub_s32 (int32x2_t, int32x2_t) 27626 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 27627 27628 * int16x4_t vsub_s16 (int16x4_t, int16x4_t) 27629 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 27630 27631 * int8x8_t vsub_s8 (int8x8_t, int8x8_t) 27632 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 27633 27634 * float32x2_t vsub_f32 (float32x2_t, float32x2_t) 27635 _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0' 27636 27637 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) 27638 27639 * int64x1_t vsub_s64 (int64x1_t, int64x1_t) 27640 27641 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) 27642 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 27643 27644 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) 27645 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 27646 27647 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) 27648 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 27649 27650 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) 27651 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 27652 27653 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) 27654 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 27655 27656 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) 27657 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 27658 27659 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) 27660 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 27661 27662 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) 27663 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 27664 27665 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) 27666 _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0' 27667 27668 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) 27669 _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0' 27670 27671 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) 27672 _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0' 27673 27674 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) 27675 _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0' 27676 27677 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) 27678 _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0' 27679 27680 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) 27681 _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0' 27682 27683 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) 27684 _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0' 27685 27686 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) 27687 _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0' 27688 27689 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) 27690 _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0' 27691 27692 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) 27693 _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0' 27694 27695 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) 27696 _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0' 27697 27698 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) 27699 _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0' 27700 27701 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) 27702 _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0' 27703 27704 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) 27705 _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0' 27706 27707 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) 27708 _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0' 27709 27710 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) 27711 _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0' 27712 27713 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) 27714 _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0' 27715 27716 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) 27717 _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0' 27718 27719 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) 27720 _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0' 27721 27722 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) 27723 _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0' 27724 27725 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) 27726 _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0' 27727 27728 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) 27729 _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0' 27730 27731 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) 27732 _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0' 27733 27734 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) 27735 _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0' 27736 27737 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) 27738 _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0' 27739 27740 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) 27741 _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0' 27742 27743 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) 27744 _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0' 27745 27746 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) 27747 _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0' 27748 27749 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) 27750 _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0' 27751 27752 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) 27753 _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0' 27754 27755 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) 27756 _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0' 27757 27758 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) 27759 _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0' 27760 27761 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) 27762 _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0' 27763 27764 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) 27765 _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0' 27766 27767 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) 27768 _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0' 27769 27770 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) 27771 _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0' 27772 27773 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) 27774 _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0' 27775 27776 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) 27777 _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0' 27778 27779 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) 27780 _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0' 27781 27782 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) 27783 _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0' 27784 27785 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) 27786 _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0' 27787 27788 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) 27789 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 27790 27791 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) 27792 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 27793 27794 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) 27795 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 27796 27797 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) 27798 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 27799 27800 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) 27801 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 27802 27803 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) 27804 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 27805 27806 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) 27807 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 27808 27809 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) 27810 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 27811 27812 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) 27813 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 27814 27815 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) 27816 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 27817 27818 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) 27819 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 27820 27821 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) 27822 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 27823 278246.54.3.6 Comparison (equal-to) 27825.............................. 27826 27827 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) 27828 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 27829 27830 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) 27831 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 27832 27833 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) 27834 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 27835 27836 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) 27837 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 27838 27839 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) 27840 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 27841 27842 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) 27843 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 27844 27845 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) 27846 _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0' 27847 27848 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) 27849 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 27850 27851 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) 27852 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 27853 27854 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) 27855 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 27856 27857 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) 27858 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 27859 27860 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) 27861 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 27862 27863 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) 27864 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 27865 27866 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) 27867 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 27868 27869 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) 27870 _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0' 27871 27872 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) 27873 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 27874 278756.54.3.7 Comparison (greater-than-or-equal-to) 27876.............................................. 27877 27878 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) 27879 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 27880 27881 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) 27882 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 27883 27884 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) 27885 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 27886 27887 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) 27888 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 27889 27890 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) 27891 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 27892 27893 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) 27894 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 27895 27896 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) 27897 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 27898 27899 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) 27900 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 27901 27902 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) 27903 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 27904 27905 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) 27906 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 27907 27908 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) 27909 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 27910 27911 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) 27912 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 27913 27914 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) 27915 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 27916 27917 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) 27918 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 27919 279206.54.3.8 Comparison (less-than-or-equal-to) 27921........................................... 27922 27923 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) 27924 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 27925 27926 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) 27927 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 27928 27929 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) 27930 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 27931 27932 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) 27933 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 27934 27935 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) 27936 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 27937 27938 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) 27939 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 27940 27941 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) 27942 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 27943 27944 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) 27945 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 27946 27947 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) 27948 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 27949 27950 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) 27951 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 27952 27953 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) 27954 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 27955 27956 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) 27957 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 27958 27959 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) 27960 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 27961 27962 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) 27963 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 27964 279656.54.3.9 Comparison (greater-than) 27966.................................. 27967 27968 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) 27969 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 27970 27971 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) 27972 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 27973 27974 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) 27975 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 27976 27977 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) 27978 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 27979 27980 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) 27981 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 27982 27983 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) 27984 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 27985 27986 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) 27987 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 27988 27989 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) 27990 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 27991 27992 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) 27993 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 27994 27995 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) 27996 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 27997 27998 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) 27999 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 28000 28001 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) 28002 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 28003 28004 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) 28005 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 28006 28007 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) 28008 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 28009 280106.54.3.10 Comparison (less-than) 28011................................ 28012 28013 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) 28014 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 28015 28016 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) 28017 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 28018 28019 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) 28020 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 28021 28022 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) 28023 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 28024 28025 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) 28026 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 28027 28028 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) 28029 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 28030 28031 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) 28032 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 28033 28034 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) 28035 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 28036 28037 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) 28038 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 28039 28040 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) 28041 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 28042 28043 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) 28044 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 28045 28046 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) 28047 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 28048 28049 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) 28050 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 28051 28052 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) 28053 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 28054 280556.54.3.11 Comparison (absolute greater-than-or-equal-to) 28056........................................................ 28057 28058 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) 28059 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 28060 28061 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) 28062 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 28063 280646.54.3.12 Comparison (absolute less-than-or-equal-to) 28065..................................................... 28066 28067 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) 28068 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 28069 28070 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) 28071 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 28072 280736.54.3.13 Comparison (absolute greater-than) 28074............................................ 28075 28076 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) 28077 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 28078 28079 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) 28080 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 28081 280826.54.3.14 Comparison (absolute less-than) 28083......................................... 28084 28085 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) 28086 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 28087 28088 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) 28089 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 28090 280916.54.3.15 Test bits 28092................... 28093 28094 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) 28095 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 28096 28097 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) 28098 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 28099 28100 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) 28101 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 28102 28103 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) 28104 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 28105 28106 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) 28107 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 28108 28109 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) 28110 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 28111 28112 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) 28113 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 28114 28115 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) 28116 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 28117 28118 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) 28119 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 28120 28121 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) 28122 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 28123 28124 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) 28125 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 28126 28127 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) 28128 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 28129 28130 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) 28131 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 28132 28133 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) 28134 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 28135 281366.54.3.16 Absolute difference 28137............................. 28138 28139 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) 28140 _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0' 28141 28142 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) 28143 _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0' 28144 28145 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) 28146 _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0' 28147 28148 * int32x2_t vabd_s32 (int32x2_t, int32x2_t) 28149 _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0' 28150 28151 * int16x4_t vabd_s16 (int16x4_t, int16x4_t) 28152 _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0' 28153 28154 * int8x8_t vabd_s8 (int8x8_t, int8x8_t) 28155 _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0' 28156 28157 * float32x2_t vabd_f32 (float32x2_t, float32x2_t) 28158 _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0' 28159 28160 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) 28161 _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0' 28162 28163 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) 28164 _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0' 28165 28166 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) 28167 _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0' 28168 28169 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) 28170 _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0' 28171 28172 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) 28173 _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0' 28174 28175 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) 28176 _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0' 28177 28178 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) 28179 _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0' 28180 28181 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) 28182 _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0' 28183 28184 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) 28185 _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0' 28186 28187 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) 28188 _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0' 28189 28190 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) 28191 _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0' 28192 28193 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) 28194 _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0' 28195 28196 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) 28197 _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0' 28198 281996.54.3.17 Absolute difference and accumulate 28200............................................ 28201 28202 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 28203 _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0' 28204 28205 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 28206 _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0' 28207 28208 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 28209 _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0' 28210 28211 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) 28212 _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0' 28213 28214 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) 28215 _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0' 28216 28217 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) 28218 _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0' 28219 28220 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 28221 _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0' 28222 28223 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 28224 _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0' 28225 28226 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 28227 _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0' 28228 28229 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) 28230 _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0' 28231 28232 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) 28233 _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0' 28234 28235 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) 28236 _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0' 28237 28238 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 28239 _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0' 28240 28241 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 28242 _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0' 28243 28244 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 28245 _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0' 28246 28247 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) 28248 _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0' 28249 28250 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) 28251 _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0' 28252 28253 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) 28254 _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0' 28255 282566.54.3.18 Maximum 28257................. 28258 28259 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) 28260 _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0' 28261 28262 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) 28263 _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0' 28264 28265 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) 28266 _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0' 28267 28268 * int32x2_t vmax_s32 (int32x2_t, int32x2_t) 28269 _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0' 28270 28271 * int16x4_t vmax_s16 (int16x4_t, int16x4_t) 28272 _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0' 28273 28274 * int8x8_t vmax_s8 (int8x8_t, int8x8_t) 28275 _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0' 28276 28277 * float32x2_t vmax_f32 (float32x2_t, float32x2_t) 28278 _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0' 28279 28280 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) 28281 _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0' 28282 28283 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) 28284 _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0' 28285 28286 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) 28287 _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0' 28288 28289 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) 28290 _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0' 28291 28292 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) 28293 _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0' 28294 28295 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) 28296 _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0' 28297 28298 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) 28299 _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0' 28300 283016.54.3.19 Minimum 28302................. 28303 28304 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) 28305 _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0' 28306 28307 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) 28308 _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0' 28309 28310 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) 28311 _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0' 28312 28313 * int32x2_t vmin_s32 (int32x2_t, int32x2_t) 28314 _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0' 28315 28316 * int16x4_t vmin_s16 (int16x4_t, int16x4_t) 28317 _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0' 28318 28319 * int8x8_t vmin_s8 (int8x8_t, int8x8_t) 28320 _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0' 28321 28322 * float32x2_t vmin_f32 (float32x2_t, float32x2_t) 28323 _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0' 28324 28325 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) 28326 _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0' 28327 28328 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) 28329 _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0' 28330 28331 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) 28332 _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0' 28333 28334 * int32x4_t vminq_s32 (int32x4_t, int32x4_t) 28335 _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0' 28336 28337 * int16x8_t vminq_s16 (int16x8_t, int16x8_t) 28338 _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0' 28339 28340 * int8x16_t vminq_s8 (int8x16_t, int8x16_t) 28341 _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0' 28342 28343 * float32x4_t vminq_f32 (float32x4_t, float32x4_t) 28344 _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0' 28345 283466.54.3.20 Pairwise add 28347...................... 28348 28349 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) 28350 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 28351 28352 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) 28353 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 28354 28355 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) 28356 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 28357 28358 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) 28359 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 28360 28361 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) 28362 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 28363 28364 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) 28365 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 28366 28367 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) 28368 _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0' 28369 28370 * uint64x1_t vpaddl_u32 (uint32x2_t) 28371 _Form of expected instruction(s):_ `vpaddl.u32 D0, D0' 28372 28373 * uint32x2_t vpaddl_u16 (uint16x4_t) 28374 _Form of expected instruction(s):_ `vpaddl.u16 D0, D0' 28375 28376 * uint16x4_t vpaddl_u8 (uint8x8_t) 28377 _Form of expected instruction(s):_ `vpaddl.u8 D0, D0' 28378 28379 * int64x1_t vpaddl_s32 (int32x2_t) 28380 _Form of expected instruction(s):_ `vpaddl.s32 D0, D0' 28381 28382 * int32x2_t vpaddl_s16 (int16x4_t) 28383 _Form of expected instruction(s):_ `vpaddl.s16 D0, D0' 28384 28385 * int16x4_t vpaddl_s8 (int8x8_t) 28386 _Form of expected instruction(s):_ `vpaddl.s8 D0, D0' 28387 28388 * uint64x2_t vpaddlq_u32 (uint32x4_t) 28389 _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0' 28390 28391 * uint32x4_t vpaddlq_u16 (uint16x8_t) 28392 _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0' 28393 28394 * uint16x8_t vpaddlq_u8 (uint8x16_t) 28395 _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0' 28396 28397 * int64x2_t vpaddlq_s32 (int32x4_t) 28398 _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0' 28399 28400 * int32x4_t vpaddlq_s16 (int16x8_t) 28401 _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0' 28402 28403 * int16x8_t vpaddlq_s8 (int8x16_t) 28404 _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0' 28405 284066.54.3.21 Pairwise add, single_opcode widen and accumulate 28407.......................................................... 28408 28409 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) 28410 _Form of expected instruction(s):_ `vpadal.u32 D0, D0' 28411 28412 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) 28413 _Form of expected instruction(s):_ `vpadal.u16 D0, D0' 28414 28415 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) 28416 _Form of expected instruction(s):_ `vpadal.u8 D0, D0' 28417 28418 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) 28419 _Form of expected instruction(s):_ `vpadal.s32 D0, D0' 28420 28421 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) 28422 _Form of expected instruction(s):_ `vpadal.s16 D0, D0' 28423 28424 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) 28425 _Form of expected instruction(s):_ `vpadal.s8 D0, D0' 28426 28427 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) 28428 _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0' 28429 28430 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) 28431 _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0' 28432 28433 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) 28434 _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0' 28435 28436 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) 28437 _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0' 28438 28439 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) 28440 _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0' 28441 28442 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) 28443 _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0' 28444 284456.54.3.22 Folding maximum 28446......................... 28447 28448 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) 28449 _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0' 28450 28451 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) 28452 _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0' 28453 28454 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) 28455 _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0' 28456 28457 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) 28458 _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0' 28459 28460 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) 28461 _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0' 28462 28463 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) 28464 _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0' 28465 28466 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) 28467 _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0' 28468 284696.54.3.23 Folding minimum 28470......................... 28471 28472 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) 28473 _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0' 28474 28475 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) 28476 _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0' 28477 28478 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) 28479 _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0' 28480 28481 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) 28482 _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0' 28483 28484 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) 28485 _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0' 28486 28487 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) 28488 _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0' 28489 28490 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) 28491 _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0' 28492 284936.54.3.24 Reciprocal step 28494......................... 28495 28496 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) 28497 _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0' 28498 28499 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) 28500 _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0' 28501 28502 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) 28503 _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0' 28504 28505 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) 28506 _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0' 28507 285086.54.3.25 Vector shift left 28509........................... 28510 28511 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) 28512 _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0' 28513 28514 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) 28515 _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0' 28516 28517 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) 28518 _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0' 28519 28520 * int32x2_t vshl_s32 (int32x2_t, int32x2_t) 28521 _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0' 28522 28523 * int16x4_t vshl_s16 (int16x4_t, int16x4_t) 28524 _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0' 28525 28526 * int8x8_t vshl_s8 (int8x8_t, int8x8_t) 28527 _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0' 28528 28529 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) 28530 _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0' 28531 28532 * int64x1_t vshl_s64 (int64x1_t, int64x1_t) 28533 _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0' 28534 28535 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) 28536 _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0' 28537 28538 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) 28539 _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0' 28540 28541 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) 28542 _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0' 28543 28544 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) 28545 _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0' 28546 28547 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) 28548 _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0' 28549 28550 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) 28551 _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0' 28552 28553 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) 28554 _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0' 28555 28556 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) 28557 _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0' 28558 28559 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) 28560 _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0' 28561 28562 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) 28563 _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0' 28564 28565 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) 28566 _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0' 28567 28568 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) 28569 _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0' 28570 28571 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) 28572 _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0' 28573 28574 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) 28575 _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0' 28576 28577 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) 28578 _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0' 28579 28580 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) 28581 _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0' 28582 28583 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) 28584 _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0' 28585 28586 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) 28587 _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0' 28588 28589 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) 28590 _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0' 28591 28592 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) 28593 _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0' 28594 28595 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) 28596 _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0' 28597 28598 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) 28599 _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0' 28600 28601 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) 28602 _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0' 28603 28604 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) 28605 _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0' 28606 28607 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) 28608 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0' 28609 28610 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) 28611 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0' 28612 28613 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) 28614 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0' 28615 28616 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) 28617 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0' 28618 28619 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) 28620 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0' 28621 28622 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) 28623 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0' 28624 28625 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) 28626 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0' 28627 28628 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) 28629 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0' 28630 28631 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) 28632 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0' 28633 28634 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) 28635 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0' 28636 28637 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) 28638 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0' 28639 28640 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) 28641 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0' 28642 28643 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) 28644 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0' 28645 28646 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) 28647 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0' 28648 28649 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) 28650 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0' 28651 28652 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) 28653 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0' 28654 28655 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) 28656 _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0' 28657 28658 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) 28659 _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0' 28660 28661 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) 28662 _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0' 28663 28664 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) 28665 _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0' 28666 28667 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) 28668 _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0' 28669 28670 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) 28671 _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0' 28672 28673 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) 28674 _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0' 28675 28676 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) 28677 _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0' 28678 28679 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) 28680 _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0' 28681 28682 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) 28683 _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0' 28684 28685 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) 28686 _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0' 28687 28688 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) 28689 _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0' 28690 28691 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) 28692 _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0' 28693 28694 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) 28695 _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0' 28696 28697 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) 28698 _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0' 28699 28700 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) 28701 _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0' 28702 287036.54.3.26 Vector shift left by constant 28704....................................... 28705 28706 * uint32x2_t vshl_n_u32 (uint32x2_t, const int) 28707 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 28708 28709 * uint16x4_t vshl_n_u16 (uint16x4_t, const int) 28710 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 28711 28712 * uint8x8_t vshl_n_u8 (uint8x8_t, const int) 28713 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 28714 28715 * int32x2_t vshl_n_s32 (int32x2_t, const int) 28716 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 28717 28718 * int16x4_t vshl_n_s16 (int16x4_t, const int) 28719 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 28720 28721 * int8x8_t vshl_n_s8 (int8x8_t, const int) 28722 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 28723 28724 * uint64x1_t vshl_n_u64 (uint64x1_t, const int) 28725 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 28726 28727 * int64x1_t vshl_n_s64 (int64x1_t, const int) 28728 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 28729 28730 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) 28731 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 28732 28733 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) 28734 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 28735 28736 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) 28737 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 28738 28739 * int32x4_t vshlq_n_s32 (int32x4_t, const int) 28740 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 28741 28742 * int16x8_t vshlq_n_s16 (int16x8_t, const int) 28743 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 28744 28745 * int8x16_t vshlq_n_s8 (int8x16_t, const int) 28746 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 28747 28748 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) 28749 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 28750 28751 * int64x2_t vshlq_n_s64 (int64x2_t, const int) 28752 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 28753 28754 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) 28755 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0' 28756 28757 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) 28758 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0' 28759 28760 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) 28761 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0' 28762 28763 * int32x2_t vqshl_n_s32 (int32x2_t, const int) 28764 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0' 28765 28766 * int16x4_t vqshl_n_s16 (int16x4_t, const int) 28767 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0' 28768 28769 * int8x8_t vqshl_n_s8 (int8x8_t, const int) 28770 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0' 28771 28772 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) 28773 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0' 28774 28775 * int64x1_t vqshl_n_s64 (int64x1_t, const int) 28776 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0' 28777 28778 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) 28779 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0' 28780 28781 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) 28782 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0' 28783 28784 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) 28785 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0' 28786 28787 * int32x4_t vqshlq_n_s32 (int32x4_t, const int) 28788 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0' 28789 28790 * int16x8_t vqshlq_n_s16 (int16x8_t, const int) 28791 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0' 28792 28793 * int8x16_t vqshlq_n_s8 (int8x16_t, const int) 28794 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0' 28795 28796 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) 28797 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0' 28798 28799 * int64x2_t vqshlq_n_s64 (int64x2_t, const int) 28800 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0' 28801 28802 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) 28803 _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0' 28804 28805 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) 28806 _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0' 28807 28808 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) 28809 _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0' 28810 28811 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) 28812 _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0' 28813 28814 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) 28815 _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0' 28816 28817 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) 28818 _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0' 28819 28820 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) 28821 _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0' 28822 28823 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) 28824 _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0' 28825 28826 * uint64x2_t vshll_n_u32 (uint32x2_t, const int) 28827 _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0' 28828 28829 * uint32x4_t vshll_n_u16 (uint16x4_t, const int) 28830 _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0' 28831 28832 * uint16x8_t vshll_n_u8 (uint8x8_t, const int) 28833 _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0' 28834 28835 * int64x2_t vshll_n_s32 (int32x2_t, const int) 28836 _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0' 28837 28838 * int32x4_t vshll_n_s16 (int16x4_t, const int) 28839 _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0' 28840 28841 * int16x8_t vshll_n_s8 (int8x8_t, const int) 28842 _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0' 28843 288446.54.3.27 Vector shift right by constant 28845........................................ 28846 28847 * uint32x2_t vshr_n_u32 (uint32x2_t, const int) 28848 _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0' 28849 28850 * uint16x4_t vshr_n_u16 (uint16x4_t, const int) 28851 _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0' 28852 28853 * uint8x8_t vshr_n_u8 (uint8x8_t, const int) 28854 _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0' 28855 28856 * int32x2_t vshr_n_s32 (int32x2_t, const int) 28857 _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0' 28858 28859 * int16x4_t vshr_n_s16 (int16x4_t, const int) 28860 _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0' 28861 28862 * int8x8_t vshr_n_s8 (int8x8_t, const int) 28863 _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0' 28864 28865 * uint64x1_t vshr_n_u64 (uint64x1_t, const int) 28866 _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0' 28867 28868 * int64x1_t vshr_n_s64 (int64x1_t, const int) 28869 _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0' 28870 28871 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) 28872 _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0' 28873 28874 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) 28875 _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0' 28876 28877 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) 28878 _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0' 28879 28880 * int32x4_t vshrq_n_s32 (int32x4_t, const int) 28881 _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0' 28882 28883 * int16x8_t vshrq_n_s16 (int16x8_t, const int) 28884 _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0' 28885 28886 * int8x16_t vshrq_n_s8 (int8x16_t, const int) 28887 _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0' 28888 28889 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) 28890 _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0' 28891 28892 * int64x2_t vshrq_n_s64 (int64x2_t, const int) 28893 _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0' 28894 28895 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) 28896 _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0' 28897 28898 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) 28899 _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0' 28900 28901 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) 28902 _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0' 28903 28904 * int32x2_t vrshr_n_s32 (int32x2_t, const int) 28905 _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0' 28906 28907 * int16x4_t vrshr_n_s16 (int16x4_t, const int) 28908 _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0' 28909 28910 * int8x8_t vrshr_n_s8 (int8x8_t, const int) 28911 _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0' 28912 28913 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) 28914 _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0' 28915 28916 * int64x1_t vrshr_n_s64 (int64x1_t, const int) 28917 _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0' 28918 28919 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) 28920 _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0' 28921 28922 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) 28923 _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0' 28924 28925 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) 28926 _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0' 28927 28928 * int32x4_t vrshrq_n_s32 (int32x4_t, const int) 28929 _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0' 28930 28931 * int16x8_t vrshrq_n_s16 (int16x8_t, const int) 28932 _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0' 28933 28934 * int8x16_t vrshrq_n_s8 (int8x16_t, const int) 28935 _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0' 28936 28937 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) 28938 _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0' 28939 28940 * int64x2_t vrshrq_n_s64 (int64x2_t, const int) 28941 _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0' 28942 28943 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) 28944 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 28945 28946 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) 28947 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 28948 28949 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) 28950 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 28951 28952 * int32x2_t vshrn_n_s64 (int64x2_t, const int) 28953 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 28954 28955 * int16x4_t vshrn_n_s32 (int32x4_t, const int) 28956 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 28957 28958 * int8x8_t vshrn_n_s16 (int16x8_t, const int) 28959 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 28960 28961 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) 28962 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 28963 28964 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) 28965 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 28966 28967 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) 28968 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 28969 28970 * int32x2_t vrshrn_n_s64 (int64x2_t, const int) 28971 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 28972 28973 * int16x4_t vrshrn_n_s32 (int32x4_t, const int) 28974 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 28975 28976 * int8x8_t vrshrn_n_s16 (int16x8_t, const int) 28977 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 28978 28979 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) 28980 _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0' 28981 28982 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) 28983 _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0' 28984 28985 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) 28986 _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0' 28987 28988 * int32x2_t vqshrn_n_s64 (int64x2_t, const int) 28989 _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0' 28990 28991 * int16x4_t vqshrn_n_s32 (int32x4_t, const int) 28992 _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0' 28993 28994 * int8x8_t vqshrn_n_s16 (int16x8_t, const int) 28995 _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0' 28996 28997 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) 28998 _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0' 28999 29000 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) 29001 _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0' 29002 29003 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) 29004 _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0' 29005 29006 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) 29007 _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0' 29008 29009 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) 29010 _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0' 29011 29012 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) 29013 _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0' 29014 29015 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) 29016 _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0' 29017 29018 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) 29019 _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0' 29020 29021 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) 29022 _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0' 29023 29024 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) 29025 _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0' 29026 29027 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) 29028 _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0' 29029 29030 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) 29031 _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0' 29032 290336.54.3.28 Vector shift right by constant and accumulate 29034....................................................... 29035 29036 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) 29037 _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0' 29038 29039 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) 29040 _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0' 29041 29042 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) 29043 _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0' 29044 29045 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) 29046 _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0' 29047 29048 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) 29049 _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0' 29050 29051 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) 29052 _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0' 29053 29054 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) 29055 _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0' 29056 29057 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) 29058 _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0' 29059 29060 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 29061 _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0' 29062 29063 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 29064 _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0' 29065 29066 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 29067 _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0' 29068 29069 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) 29070 _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0' 29071 29072 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) 29073 _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0' 29074 29075 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) 29076 _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0' 29077 29078 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 29079 _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0' 29080 29081 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) 29082 _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0' 29083 29084 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) 29085 _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0' 29086 29087 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) 29088 _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0' 29089 29090 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) 29091 _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0' 29092 29093 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) 29094 _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0' 29095 29096 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) 29097 _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0' 29098 29099 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) 29100 _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0' 29101 29102 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) 29103 _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0' 29104 29105 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) 29106 _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0' 29107 29108 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 29109 _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0' 29110 29111 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 29112 _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0' 29113 29114 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 29115 _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0' 29116 29117 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) 29118 _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0' 29119 29120 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) 29121 _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0' 29122 29123 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) 29124 _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0' 29125 29126 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 29127 _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0' 29128 29129 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) 29130 _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0' 29131 291326.54.3.29 Vector shift right and insert 29133....................................... 29134 29135 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) 29136 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 29137 29138 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) 29139 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 29140 29141 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) 29142 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 29143 29144 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) 29145 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 29146 29147 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) 29148 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 29149 29150 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) 29151 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 29152 29153 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) 29154 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 29155 29156 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) 29157 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 29158 29159 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) 29160 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 29161 29162 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) 29163 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 29164 29165 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) 29166 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 29167 29168 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) 29169 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 29170 29171 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) 29172 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 29173 29174 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) 29175 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 29176 29177 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) 29178 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 29179 29180 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) 29181 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 29182 29183 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) 29184 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 29185 29186 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) 29187 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 29188 29189 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) 29190 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 29191 29192 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) 29193 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 29194 291956.54.3.30 Vector shift left and insert 29196...................................... 29197 29198 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) 29199 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 29200 29201 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) 29202 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 29203 29204 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) 29205 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 29206 29207 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) 29208 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 29209 29210 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) 29211 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 29212 29213 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) 29214 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 29215 29216 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) 29217 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 29218 29219 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) 29220 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 29221 29222 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) 29223 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 29224 29225 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) 29226 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 29227 29228 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) 29229 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 29230 29231 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) 29232 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 29233 29234 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) 29235 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 29236 29237 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) 29238 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 29239 29240 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) 29241 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 29242 29243 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) 29244 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 29245 29246 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) 29247 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 29248 29249 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) 29250 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 29251 29252 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) 29253 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 29254 29255 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) 29256 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 29257 292586.54.3.31 Absolute value 29259........................ 29260 29261 * float32x2_t vabs_f32 (float32x2_t) 29262 _Form of expected instruction(s):_ `vabs.f32 D0, D0' 29263 29264 * int32x2_t vabs_s32 (int32x2_t) 29265 _Form of expected instruction(s):_ `vabs.s32 D0, D0' 29266 29267 * int16x4_t vabs_s16 (int16x4_t) 29268 _Form of expected instruction(s):_ `vabs.s16 D0, D0' 29269 29270 * int8x8_t vabs_s8 (int8x8_t) 29271 _Form of expected instruction(s):_ `vabs.s8 D0, D0' 29272 29273 * float32x4_t vabsq_f32 (float32x4_t) 29274 _Form of expected instruction(s):_ `vabs.f32 Q0, Q0' 29275 29276 * int32x4_t vabsq_s32 (int32x4_t) 29277 _Form of expected instruction(s):_ `vabs.s32 Q0, Q0' 29278 29279 * int16x8_t vabsq_s16 (int16x8_t) 29280 _Form of expected instruction(s):_ `vabs.s16 Q0, Q0' 29281 29282 * int8x16_t vabsq_s8 (int8x16_t) 29283 _Form of expected instruction(s):_ `vabs.s8 Q0, Q0' 29284 29285 * int32x2_t vqabs_s32 (int32x2_t) 29286 _Form of expected instruction(s):_ `vqabs.s32 D0, D0' 29287 29288 * int16x4_t vqabs_s16 (int16x4_t) 29289 _Form of expected instruction(s):_ `vqabs.s16 D0, D0' 29290 29291 * int8x8_t vqabs_s8 (int8x8_t) 29292 _Form of expected instruction(s):_ `vqabs.s8 D0, D0' 29293 29294 * int32x4_t vqabsq_s32 (int32x4_t) 29295 _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0' 29296 29297 * int16x8_t vqabsq_s16 (int16x8_t) 29298 _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0' 29299 29300 * int8x16_t vqabsq_s8 (int8x16_t) 29301 _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0' 29302 293036.54.3.32 Negation 29304.................. 29305 29306 * float32x2_t vneg_f32 (float32x2_t) 29307 _Form of expected instruction(s):_ `vneg.f32 D0, D0' 29308 29309 * int32x2_t vneg_s32 (int32x2_t) 29310 _Form of expected instruction(s):_ `vneg.s32 D0, D0' 29311 29312 * int16x4_t vneg_s16 (int16x4_t) 29313 _Form of expected instruction(s):_ `vneg.s16 D0, D0' 29314 29315 * int8x8_t vneg_s8 (int8x8_t) 29316 _Form of expected instruction(s):_ `vneg.s8 D0, D0' 29317 29318 * float32x4_t vnegq_f32 (float32x4_t) 29319 _Form of expected instruction(s):_ `vneg.f32 Q0, Q0' 29320 29321 * int32x4_t vnegq_s32 (int32x4_t) 29322 _Form of expected instruction(s):_ `vneg.s32 Q0, Q0' 29323 29324 * int16x8_t vnegq_s16 (int16x8_t) 29325 _Form of expected instruction(s):_ `vneg.s16 Q0, Q0' 29326 29327 * int8x16_t vnegq_s8 (int8x16_t) 29328 _Form of expected instruction(s):_ `vneg.s8 Q0, Q0' 29329 29330 * int32x2_t vqneg_s32 (int32x2_t) 29331 _Form of expected instruction(s):_ `vqneg.s32 D0, D0' 29332 29333 * int16x4_t vqneg_s16 (int16x4_t) 29334 _Form of expected instruction(s):_ `vqneg.s16 D0, D0' 29335 29336 * int8x8_t vqneg_s8 (int8x8_t) 29337 _Form of expected instruction(s):_ `vqneg.s8 D0, D0' 29338 29339 * int32x4_t vqnegq_s32 (int32x4_t) 29340 _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0' 29341 29342 * int16x8_t vqnegq_s16 (int16x8_t) 29343 _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0' 29344 29345 * int8x16_t vqnegq_s8 (int8x16_t) 29346 _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0' 29347 293486.54.3.33 Bitwise not 29349..................... 29350 29351 * uint32x2_t vmvn_u32 (uint32x2_t) 29352 _Form of expected instruction(s):_ `vmvn D0, D0' 29353 29354 * uint16x4_t vmvn_u16 (uint16x4_t) 29355 _Form of expected instruction(s):_ `vmvn D0, D0' 29356 29357 * uint8x8_t vmvn_u8 (uint8x8_t) 29358 _Form of expected instruction(s):_ `vmvn D0, D0' 29359 29360 * int32x2_t vmvn_s32 (int32x2_t) 29361 _Form of expected instruction(s):_ `vmvn D0, D0' 29362 29363 * int16x4_t vmvn_s16 (int16x4_t) 29364 _Form of expected instruction(s):_ `vmvn D0, D0' 29365 29366 * int8x8_t vmvn_s8 (int8x8_t) 29367 _Form of expected instruction(s):_ `vmvn D0, D0' 29368 29369 * poly8x8_t vmvn_p8 (poly8x8_t) 29370 _Form of expected instruction(s):_ `vmvn D0, D0' 29371 29372 * uint32x4_t vmvnq_u32 (uint32x4_t) 29373 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29374 29375 * uint16x8_t vmvnq_u16 (uint16x8_t) 29376 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29377 29378 * uint8x16_t vmvnq_u8 (uint8x16_t) 29379 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29380 29381 * int32x4_t vmvnq_s32 (int32x4_t) 29382 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29383 29384 * int16x8_t vmvnq_s16 (int16x8_t) 29385 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29386 29387 * int8x16_t vmvnq_s8 (int8x16_t) 29388 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29389 29390 * poly8x16_t vmvnq_p8 (poly8x16_t) 29391 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29392 293936.54.3.34 Count leading sign bits 29394................................. 29395 29396 * int32x2_t vcls_s32 (int32x2_t) 29397 _Form of expected instruction(s):_ `vcls.s32 D0, D0' 29398 29399 * int16x4_t vcls_s16 (int16x4_t) 29400 _Form of expected instruction(s):_ `vcls.s16 D0, D0' 29401 29402 * int8x8_t vcls_s8 (int8x8_t) 29403 _Form of expected instruction(s):_ `vcls.s8 D0, D0' 29404 29405 * int32x4_t vclsq_s32 (int32x4_t) 29406 _Form of expected instruction(s):_ `vcls.s32 Q0, Q0' 29407 29408 * int16x8_t vclsq_s16 (int16x8_t) 29409 _Form of expected instruction(s):_ `vcls.s16 Q0, Q0' 29410 29411 * int8x16_t vclsq_s8 (int8x16_t) 29412 _Form of expected instruction(s):_ `vcls.s8 Q0, Q0' 29413 294146.54.3.35 Count leading zeros 29415............................. 29416 29417 * uint32x2_t vclz_u32 (uint32x2_t) 29418 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 29419 29420 * uint16x4_t vclz_u16 (uint16x4_t) 29421 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 29422 29423 * uint8x8_t vclz_u8 (uint8x8_t) 29424 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 29425 29426 * int32x2_t vclz_s32 (int32x2_t) 29427 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 29428 29429 * int16x4_t vclz_s16 (int16x4_t) 29430 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 29431 29432 * int8x8_t vclz_s8 (int8x8_t) 29433 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 29434 29435 * uint32x4_t vclzq_u32 (uint32x4_t) 29436 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 29437 29438 * uint16x8_t vclzq_u16 (uint16x8_t) 29439 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 29440 29441 * uint8x16_t vclzq_u8 (uint8x16_t) 29442 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 29443 29444 * int32x4_t vclzq_s32 (int32x4_t) 29445 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 29446 29447 * int16x8_t vclzq_s16 (int16x8_t) 29448 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 29449 29450 * int8x16_t vclzq_s8 (int8x16_t) 29451 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 29452 294536.54.3.36 Count number of set bits 29454.................................. 29455 29456 * uint8x8_t vcnt_u8 (uint8x8_t) 29457 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 29458 29459 * int8x8_t vcnt_s8 (int8x8_t) 29460 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 29461 29462 * poly8x8_t vcnt_p8 (poly8x8_t) 29463 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 29464 29465 * uint8x16_t vcntq_u8 (uint8x16_t) 29466 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 29467 29468 * int8x16_t vcntq_s8 (int8x16_t) 29469 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 29470 29471 * poly8x16_t vcntq_p8 (poly8x16_t) 29472 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 29473 294746.54.3.37 Reciprocal estimate 29475............................. 29476 29477 * float32x2_t vrecpe_f32 (float32x2_t) 29478 _Form of expected instruction(s):_ `vrecpe.f32 D0, D0' 29479 29480 * uint32x2_t vrecpe_u32 (uint32x2_t) 29481 _Form of expected instruction(s):_ `vrecpe.u32 D0, D0' 29482 29483 * float32x4_t vrecpeq_f32 (float32x4_t) 29484 _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0' 29485 29486 * uint32x4_t vrecpeq_u32 (uint32x4_t) 29487 _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0' 29488 294896.54.3.38 Reciprocal square-root estimate 29490......................................... 29491 29492 * float32x2_t vrsqrte_f32 (float32x2_t) 29493 _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0' 29494 29495 * uint32x2_t vrsqrte_u32 (uint32x2_t) 29496 _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0' 29497 29498 * float32x4_t vrsqrteq_f32 (float32x4_t) 29499 _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0' 29500 29501 * uint32x4_t vrsqrteq_u32 (uint32x4_t) 29502 _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0' 29503 295046.54.3.39 Get lanes from a vector 29505................................. 29506 29507 * uint32_t vget_lane_u32 (uint32x2_t, const int) 29508 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29509 29510 * uint16_t vget_lane_u16 (uint16x4_t, const int) 29511 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 29512 29513 * uint8_t vget_lane_u8 (uint8x8_t, const int) 29514 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 29515 29516 * int32_t vget_lane_s32 (int32x2_t, const int) 29517 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29518 29519 * int16_t vget_lane_s16 (int16x4_t, const int) 29520 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 29521 29522 * int8_t vget_lane_s8 (int8x8_t, const int) 29523 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 29524 29525 * float32_t vget_lane_f32 (float32x2_t, const int) 29526 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29527 29528 * poly16_t vget_lane_p16 (poly16x4_t, const int) 29529 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 29530 29531 * poly8_t vget_lane_p8 (poly8x8_t, const int) 29532 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 29533 29534 * uint64_t vget_lane_u64 (uint64x1_t, const int) 29535 29536 * int64_t vget_lane_s64 (int64x1_t, const int) 29537 29538 * uint32_t vgetq_lane_u32 (uint32x4_t, const int) 29539 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29540 29541 * uint16_t vgetq_lane_u16 (uint16x8_t, const int) 29542 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 29543 29544 * uint8_t vgetq_lane_u8 (uint8x16_t, const int) 29545 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 29546 29547 * int32_t vgetq_lane_s32 (int32x4_t, const int) 29548 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29549 29550 * int16_t vgetq_lane_s16 (int16x8_t, const int) 29551 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 29552 29553 * int8_t vgetq_lane_s8 (int8x16_t, const int) 29554 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 29555 29556 * float32_t vgetq_lane_f32 (float32x4_t, const int) 29557 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29558 29559 * poly16_t vgetq_lane_p16 (poly16x8_t, const int) 29560 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 29561 29562 * poly8_t vgetq_lane_p8 (poly8x16_t, const int) 29563 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 29564 29565 * uint64_t vgetq_lane_u64 (uint64x2_t, const int) 29566 _Form of expected instruction(s):_ `vmov R0, R0, D0' 29567 29568 * int64_t vgetq_lane_s64 (int64x2_t, const int) 29569 _Form of expected instruction(s):_ `vmov R0, R0, D0' 29570 295716.54.3.40 Set lanes in a vector 29572............................... 29573 29574 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) 29575 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 29576 29577 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) 29578 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 29579 29580 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) 29581 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 29582 29583 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) 29584 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 29585 29586 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) 29587 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 29588 29589 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) 29590 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 29591 29592 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) 29593 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 29594 29595 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) 29596 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 29597 29598 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) 29599 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 29600 29601 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) 29602 29603 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) 29604 29605 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) 29606 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 29607 29608 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) 29609 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 29610 29611 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) 29612 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 29613 29614 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) 29615 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 29616 29617 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) 29618 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 29619 29620 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) 29621 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 29622 29623 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) 29624 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 29625 29626 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) 29627 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 29628 29629 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) 29630 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 29631 29632 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) 29633 _Form of expected instruction(s):_ `vmov D0, R0, R0' 29634 29635 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) 29636 _Form of expected instruction(s):_ `vmov D0, R0, R0' 29637 296386.54.3.41 Create vector from literal bit pattern 29639................................................ 29640 29641 * uint32x2_t vcreate_u32 (uint64_t) 29642 29643 * uint16x4_t vcreate_u16 (uint64_t) 29644 29645 * uint8x8_t vcreate_u8 (uint64_t) 29646 29647 * int32x2_t vcreate_s32 (uint64_t) 29648 29649 * int16x4_t vcreate_s16 (uint64_t) 29650 29651 * int8x8_t vcreate_s8 (uint64_t) 29652 29653 * uint64x1_t vcreate_u64 (uint64_t) 29654 29655 * int64x1_t vcreate_s64 (uint64_t) 29656 29657 * float32x2_t vcreate_f32 (uint64_t) 29658 29659 * poly16x4_t vcreate_p16 (uint64_t) 29660 29661 * poly8x8_t vcreate_p8 (uint64_t) 29662 296636.54.3.42 Set all lanes to the same value 29664......................................... 29665 29666 * uint32x2_t vdup_n_u32 (uint32_t) 29667 _Form of expected instruction(s):_ `vdup.32 D0, R0' 29668 29669 * uint16x4_t vdup_n_u16 (uint16_t) 29670 _Form of expected instruction(s):_ `vdup.16 D0, R0' 29671 29672 * uint8x8_t vdup_n_u8 (uint8_t) 29673 _Form of expected instruction(s):_ `vdup.8 D0, R0' 29674 29675 * int32x2_t vdup_n_s32 (int32_t) 29676 _Form of expected instruction(s):_ `vdup.32 D0, R0' 29677 29678 * int16x4_t vdup_n_s16 (int16_t) 29679 _Form of expected instruction(s):_ `vdup.16 D0, R0' 29680 29681 * int8x8_t vdup_n_s8 (int8_t) 29682 _Form of expected instruction(s):_ `vdup.8 D0, R0' 29683 29684 * float32x2_t vdup_n_f32 (float32_t) 29685 _Form of expected instruction(s):_ `vdup.32 D0, R0' 29686 29687 * poly16x4_t vdup_n_p16 (poly16_t) 29688 _Form of expected instruction(s):_ `vdup.16 D0, R0' 29689 29690 * poly8x8_t vdup_n_p8 (poly8_t) 29691 _Form of expected instruction(s):_ `vdup.8 D0, R0' 29692 29693 * uint64x1_t vdup_n_u64 (uint64_t) 29694 29695 * int64x1_t vdup_n_s64 (int64_t) 29696 29697 * uint32x4_t vdupq_n_u32 (uint32_t) 29698 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 29699 29700 * uint16x8_t vdupq_n_u16 (uint16_t) 29701 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 29702 29703 * uint8x16_t vdupq_n_u8 (uint8_t) 29704 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 29705 29706 * int32x4_t vdupq_n_s32 (int32_t) 29707 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 29708 29709 * int16x8_t vdupq_n_s16 (int16_t) 29710 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 29711 29712 * int8x16_t vdupq_n_s8 (int8_t) 29713 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 29714 29715 * float32x4_t vdupq_n_f32 (float32_t) 29716 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 29717 29718 * poly16x8_t vdupq_n_p16 (poly16_t) 29719 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 29720 29721 * poly8x16_t vdupq_n_p8 (poly8_t) 29722 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 29723 29724 * uint64x2_t vdupq_n_u64 (uint64_t) 29725 29726 * int64x2_t vdupq_n_s64 (int64_t) 29727 29728 * uint32x2_t vmov_n_u32 (uint32_t) 29729 _Form of expected instruction(s):_ `vdup.32 D0, R0' 29730 29731 * uint16x4_t vmov_n_u16 (uint16_t) 29732 _Form of expected instruction(s):_ `vdup.16 D0, R0' 29733 29734 * uint8x8_t vmov_n_u8 (uint8_t) 29735 _Form of expected instruction(s):_ `vdup.8 D0, R0' 29736 29737 * int32x2_t vmov_n_s32 (int32_t) 29738 _Form of expected instruction(s):_ `vdup.32 D0, R0' 29739 29740 * int16x4_t vmov_n_s16 (int16_t) 29741 _Form of expected instruction(s):_ `vdup.16 D0, R0' 29742 29743 * int8x8_t vmov_n_s8 (int8_t) 29744 _Form of expected instruction(s):_ `vdup.8 D0, R0' 29745 29746 * float32x2_t vmov_n_f32 (float32_t) 29747 _Form of expected instruction(s):_ `vdup.32 D0, R0' 29748 29749 * poly16x4_t vmov_n_p16 (poly16_t) 29750 _Form of expected instruction(s):_ `vdup.16 D0, R0' 29751 29752 * poly8x8_t vmov_n_p8 (poly8_t) 29753 _Form of expected instruction(s):_ `vdup.8 D0, R0' 29754 29755 * uint64x1_t vmov_n_u64 (uint64_t) 29756 29757 * int64x1_t vmov_n_s64 (int64_t) 29758 29759 * uint32x4_t vmovq_n_u32 (uint32_t) 29760 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 29761 29762 * uint16x8_t vmovq_n_u16 (uint16_t) 29763 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 29764 29765 * uint8x16_t vmovq_n_u8 (uint8_t) 29766 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 29767 29768 * int32x4_t vmovq_n_s32 (int32_t) 29769 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 29770 29771 * int16x8_t vmovq_n_s16 (int16_t) 29772 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 29773 29774 * int8x16_t vmovq_n_s8 (int8_t) 29775 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 29776 29777 * float32x4_t vmovq_n_f32 (float32_t) 29778 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 29779 29780 * poly16x8_t vmovq_n_p16 (poly16_t) 29781 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 29782 29783 * poly8x16_t vmovq_n_p8 (poly8_t) 29784 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 29785 29786 * uint64x2_t vmovq_n_u64 (uint64_t) 29787 29788 * int64x2_t vmovq_n_s64 (int64_t) 29789 29790 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) 29791 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 29792 29793 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) 29794 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 29795 29796 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) 29797 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 29798 29799 * int32x2_t vdup_lane_s32 (int32x2_t, const int) 29800 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 29801 29802 * int16x4_t vdup_lane_s16 (int16x4_t, const int) 29803 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 29804 29805 * int8x8_t vdup_lane_s8 (int8x8_t, const int) 29806 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 29807 29808 * float32x2_t vdup_lane_f32 (float32x2_t, const int) 29809 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 29810 29811 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) 29812 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 29813 29814 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) 29815 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 29816 29817 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) 29818 29819 * int64x1_t vdup_lane_s64 (int64x1_t, const int) 29820 29821 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) 29822 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 29823 29824 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) 29825 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 29826 29827 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) 29828 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 29829 29830 * int32x4_t vdupq_lane_s32 (int32x2_t, const int) 29831 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 29832 29833 * int16x8_t vdupq_lane_s16 (int16x4_t, const int) 29834 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 29835 29836 * int8x16_t vdupq_lane_s8 (int8x8_t, const int) 29837 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 29838 29839 * float32x4_t vdupq_lane_f32 (float32x2_t, const int) 29840 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 29841 29842 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) 29843 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 29844 29845 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) 29846 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 29847 29848 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) 29849 29850 * int64x2_t vdupq_lane_s64 (int64x1_t, const int) 29851 298526.54.3.43 Combining vectors 29853........................... 29854 29855 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) 29856 29857 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) 29858 29859 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) 29860 29861 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) 29862 29863 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 29864 29865 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) 29866 29867 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) 29868 29869 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) 29870 29871 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) 29872 29873 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) 29874 29875 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) 29876 298776.54.3.44 Splitting vectors 29878........................... 29879 29880 * uint32x2_t vget_high_u32 (uint32x4_t) 29881 29882 * uint16x4_t vget_high_u16 (uint16x8_t) 29883 29884 * uint8x8_t vget_high_u8 (uint8x16_t) 29885 29886 * int32x2_t vget_high_s32 (int32x4_t) 29887 29888 * int16x4_t vget_high_s16 (int16x8_t) 29889 29890 * int8x8_t vget_high_s8 (int8x16_t) 29891 29892 * uint64x1_t vget_high_u64 (uint64x2_t) 29893 29894 * int64x1_t vget_high_s64 (int64x2_t) 29895 29896 * float32x2_t vget_high_f32 (float32x4_t) 29897 29898 * poly16x4_t vget_high_p16 (poly16x8_t) 29899 29900 * poly8x8_t vget_high_p8 (poly8x16_t) 29901 29902 * uint32x2_t vget_low_u32 (uint32x4_t) 29903 _Form of expected instruction(s):_ `vmov D0, D0' 29904 29905 * uint16x4_t vget_low_u16 (uint16x8_t) 29906 _Form of expected instruction(s):_ `vmov D0, D0' 29907 29908 * uint8x8_t vget_low_u8 (uint8x16_t) 29909 _Form of expected instruction(s):_ `vmov D0, D0' 29910 29911 * int32x2_t vget_low_s32 (int32x4_t) 29912 _Form of expected instruction(s):_ `vmov D0, D0' 29913 29914 * int16x4_t vget_low_s16 (int16x8_t) 29915 _Form of expected instruction(s):_ `vmov D0, D0' 29916 29917 * int8x8_t vget_low_s8 (int8x16_t) 29918 _Form of expected instruction(s):_ `vmov D0, D0' 29919 29920 * float32x2_t vget_low_f32 (float32x4_t) 29921 _Form of expected instruction(s):_ `vmov D0, D0' 29922 29923 * poly16x4_t vget_low_p16 (poly16x8_t) 29924 _Form of expected instruction(s):_ `vmov D0, D0' 29925 29926 * poly8x8_t vget_low_p8 (poly8x16_t) 29927 _Form of expected instruction(s):_ `vmov D0, D0' 29928 29929 * uint64x1_t vget_low_u64 (uint64x2_t) 29930 29931 * int64x1_t vget_low_s64 (int64x2_t) 29932 299336.54.3.45 Conversions 29934..................... 29935 29936 * float32x2_t vcvt_f32_u32 (uint32x2_t) 29937 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0' 29938 29939 * float32x2_t vcvt_f32_s32 (int32x2_t) 29940 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0' 29941 29942 * uint32x2_t vcvt_u32_f32 (float32x2_t) 29943 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0' 29944 29945 * int32x2_t vcvt_s32_f32 (float32x2_t) 29946 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0' 29947 29948 * float32x4_t vcvtq_f32_u32 (uint32x4_t) 29949 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0' 29950 29951 * float32x4_t vcvtq_f32_s32 (int32x4_t) 29952 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0' 29953 29954 * uint32x4_t vcvtq_u32_f32 (float32x4_t) 29955 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0' 29956 29957 * int32x4_t vcvtq_s32_f32 (float32x4_t) 29958 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0' 29959 29960 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) 29961 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0' 29962 29963 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) 29964 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0' 29965 29966 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) 29967 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0' 29968 29969 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) 29970 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0' 29971 29972 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) 29973 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0' 29974 29975 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) 29976 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0' 29977 29978 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) 29979 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0' 29980 29981 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) 29982 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0' 29983 299846.54.3.46 Move, single_opcode narrowing 29985....................................... 29986 29987 * uint32x2_t vmovn_u64 (uint64x2_t) 29988 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 29989 29990 * uint16x4_t vmovn_u32 (uint32x4_t) 29991 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 29992 29993 * uint8x8_t vmovn_u16 (uint16x8_t) 29994 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 29995 29996 * int32x2_t vmovn_s64 (int64x2_t) 29997 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 29998 29999 * int16x4_t vmovn_s32 (int32x4_t) 30000 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 30001 30002 * int8x8_t vmovn_s16 (int16x8_t) 30003 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 30004 30005 * uint32x2_t vqmovn_u64 (uint64x2_t) 30006 _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0' 30007 30008 * uint16x4_t vqmovn_u32 (uint32x4_t) 30009 _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0' 30010 30011 * uint8x8_t vqmovn_u16 (uint16x8_t) 30012 _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0' 30013 30014 * int32x2_t vqmovn_s64 (int64x2_t) 30015 _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0' 30016 30017 * int16x4_t vqmovn_s32 (int32x4_t) 30018 _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0' 30019 30020 * int8x8_t vqmovn_s16 (int16x8_t) 30021 _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0' 30022 30023 * uint32x2_t vqmovun_s64 (int64x2_t) 30024 _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0' 30025 30026 * uint16x4_t vqmovun_s32 (int32x4_t) 30027 _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0' 30028 30029 * uint8x8_t vqmovun_s16 (int16x8_t) 30030 _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0' 30031 300326.54.3.47 Move, single_opcode long 30033.................................. 30034 30035 * uint64x2_t vmovl_u32 (uint32x2_t) 30036 _Form of expected instruction(s):_ `vmovl.u32 Q0, D0' 30037 30038 * uint32x4_t vmovl_u16 (uint16x4_t) 30039 _Form of expected instruction(s):_ `vmovl.u16 Q0, D0' 30040 30041 * uint16x8_t vmovl_u8 (uint8x8_t) 30042 _Form of expected instruction(s):_ `vmovl.u8 Q0, D0' 30043 30044 * int64x2_t vmovl_s32 (int32x2_t) 30045 _Form of expected instruction(s):_ `vmovl.s32 Q0, D0' 30046 30047 * int32x4_t vmovl_s16 (int16x4_t) 30048 _Form of expected instruction(s):_ `vmovl.s16 Q0, D0' 30049 30050 * int16x8_t vmovl_s8 (int8x8_t) 30051 _Form of expected instruction(s):_ `vmovl.s8 Q0, D0' 30052 300536.54.3.48 Table lookup 30054...................... 30055 30056 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) 30057 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 30058 30059 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) 30060 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 30061 30062 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) 30063 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 30064 30065 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) 30066 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 30067 30068 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) 30069 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 30070 30071 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) 30072 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 30073 30074 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) 30075 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 30076 30077 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) 30078 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 30079 30080 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) 30081 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 30082 30083 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) 30084 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 30085 D0' 30086 30087 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) 30088 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 30089 D0' 30090 30091 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) 30092 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 30093 D0' 30094 300956.54.3.49 Extended table lookup 30096............................... 30097 30098 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) 30099 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 30100 30101 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) 30102 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 30103 30104 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 30105 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 30106 30107 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) 30108 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 30109 30110 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) 30111 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 30112 30113 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) 30114 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 30115 30116 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) 30117 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 30118 30119 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) 30120 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 30121 30122 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) 30123 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 30124 30125 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) 30126 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 30127 D0' 30128 30129 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) 30130 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 30131 D0' 30132 30133 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) 30134 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 30135 D0' 30136 301376.54.3.50 Multiply, lane 30138........................ 30139 30140 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) 30141 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 30142 30143 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) 30144 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 30145 30146 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) 30147 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 30148 30149 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) 30150 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 30151 30152 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) 30153 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 30154 30155 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) 30156 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 30157 30158 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) 30159 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 30160 30161 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) 30162 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 30163 30164 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) 30165 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 30166 30167 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) 30168 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 30169 301706.54.3.51 Long multiply, lane 30171............................. 30172 30173 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) 30174 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 30175 30176 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) 30177 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 30178 30179 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) 30180 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 30181 30182 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) 30183 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 30184 301856.54.3.52 Saturating doubling long multiply, lane 30186................................................. 30187 30188 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) 30189 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 30190 30191 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) 30192 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 30193 301946.54.3.53 Saturating doubling multiply high, lane 30195................................................. 30196 30197 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 30198 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 30199 30200 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 30201 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 30202 30203 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 30204 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 30205 30206 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 30207 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 30208 30209 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 30210 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 30211 30212 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 30213 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 30214 30215 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 30216 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 30217 30218 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 30219 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 30220 302216.54.3.54 Multiply-accumulate, lane 30222................................... 30223 30224 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 30225 const int) 30226 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 30227 30228 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 30229 const int) 30230 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 30231 30232 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 30233 const int) 30234 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 30235 30236 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 30237 int) 30238 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 30239 30240 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 30241 int) 30242 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 30243 30244 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 30245 const int) 30246 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 30247 30248 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 30249 const int) 30250 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 30251 30252 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 30253 const int) 30254 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 30255 30256 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 30257 int) 30258 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 30259 30260 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 30261 int) 30262 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 30263 30264 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 30265 const int) 30266 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 30267 30268 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 30269 const int) 30270 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 30271 30272 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 30273 int) 30274 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 30275 30276 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 30277 int) 30278 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 30279 30280 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 30281 int) 30282 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 30283 30284 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 30285 int) 30286 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 30287 302886.54.3.55 Multiply-subtract, lane 30289................................. 30290 30291 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 30292 const int) 30293 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 30294 30295 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 30296 const int) 30297 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 30298 30299 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 30300 const int) 30301 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 30302 30303 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 30304 int) 30305 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 30306 30307 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 30308 int) 30309 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 30310 30311 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 30312 const int) 30313 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 30314 30315 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 30316 const int) 30317 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 30318 30319 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 30320 const int) 30321 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 30322 30323 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 30324 int) 30325 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 30326 30327 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 30328 int) 30329 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 30330 30331 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 30332 const int) 30333 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 30334 30335 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 30336 const int) 30337 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 30338 30339 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 30340 int) 30341 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 30342 30343 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 30344 int) 30345 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 30346 30347 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 30348 int) 30349 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 30350 30351 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 30352 int) 30353 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 30354 303556.54.3.56 Vector multiply by scalar 30356................................... 30357 30358 * float32x2_t vmul_n_f32 (float32x2_t, float32_t) 30359 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 30360 30361 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) 30362 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 30363 30364 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) 30365 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 30366 30367 * int32x2_t vmul_n_s32 (int32x2_t, int32_t) 30368 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 30369 30370 * int16x4_t vmul_n_s16 (int16x4_t, int16_t) 30371 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 30372 30373 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) 30374 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 30375 30376 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) 30377 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 30378 30379 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) 30380 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 30381 30382 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) 30383 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 30384 30385 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) 30386 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 30387 303886.54.3.57 Vector long multiply by scalar 30389........................................ 30390 30391 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) 30392 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 30393 30394 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) 30395 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 30396 30397 * int64x2_t vmull_n_s32 (int32x2_t, int32_t) 30398 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 30399 30400 * int32x4_t vmull_n_s16 (int16x4_t, int16_t) 30401 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 30402 304036.54.3.58 Vector saturating doubling long multiply by scalar 30404............................................................ 30405 30406 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) 30407 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 30408 30409 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) 30410 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 30411 304126.54.3.59 Vector saturating doubling multiply high by scalar 30413............................................................ 30414 30415 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) 30416 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 30417 30418 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) 30419 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 30420 30421 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) 30422 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 30423 30424 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) 30425 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 30426 30427 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) 30428 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 30429 30430 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) 30431 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 30432 30433 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) 30434 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 30435 30436 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) 30437 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 30438 304396.54.3.60 Vector multiply-accumulate by scalar 30440.............................................. 30441 30442 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) 30443 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 30444 30445 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 30446 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 30447 30448 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 30449 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 30450 30451 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) 30452 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 30453 30454 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) 30455 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 30456 30457 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) 30458 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 30459 30460 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 30461 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 30462 30463 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 30464 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 30465 30466 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) 30467 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 30468 30469 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) 30470 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 30471 30472 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 30473 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 30474 30475 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 30476 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 30477 30478 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 30479 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 30480 30481 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 30482 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 30483 30484 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 30485 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 30486 30487 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 30488 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 30489 304906.54.3.61 Vector multiply-subtract by scalar 30491............................................ 30492 30493 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) 30494 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 30495 30496 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 30497 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 30498 30499 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 30500 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 30501 30502 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) 30503 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 30504 30505 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) 30506 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 30507 30508 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) 30509 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 30510 30511 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 30512 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 30513 30514 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 30515 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 30516 30517 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) 30518 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 30519 30520 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) 30521 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 30522 30523 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 30524 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 30525 30526 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 30527 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 30528 30529 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 30530 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 30531 30532 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 30533 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 30534 30535 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 30536 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 30537 30538 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 30539 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 30540 305416.54.3.62 Vector extract 30542........................ 30543 30544 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) 30545 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 30546 30547 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) 30548 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 30549 30550 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) 30551 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 30552 30553 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) 30554 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 30555 30556 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) 30557 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 30558 30559 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) 30560 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 30561 30562 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) 30563 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 30564 30565 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) 30566 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 30567 30568 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) 30569 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 30570 30571 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) 30572 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 30573 30574 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) 30575 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 30576 30577 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) 30578 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 30579 30580 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) 30581 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 30582 30583 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) 30584 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 30585 30586 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) 30587 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 30588 30589 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) 30590 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 30591 30592 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) 30593 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 30594 30595 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) 30596 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 30597 30598 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) 30599 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 30600 30601 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) 30602 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 30603 30604 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) 30605 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 30606 30607 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) 30608 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 30609 306106.54.3.63 Reverse elements 30611.......................... 30612 30613 * uint32x2_t vrev64_u32 (uint32x2_t) 30614 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 30615 30616 * uint16x4_t vrev64_u16 (uint16x4_t) 30617 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 30618 30619 * uint8x8_t vrev64_u8 (uint8x8_t) 30620 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 30621 30622 * int32x2_t vrev64_s32 (int32x2_t) 30623 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 30624 30625 * int16x4_t vrev64_s16 (int16x4_t) 30626 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 30627 30628 * int8x8_t vrev64_s8 (int8x8_t) 30629 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 30630 30631 * float32x2_t vrev64_f32 (float32x2_t) 30632 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 30633 30634 * poly16x4_t vrev64_p16 (poly16x4_t) 30635 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 30636 30637 * poly8x8_t vrev64_p8 (poly8x8_t) 30638 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 30639 30640 * uint32x4_t vrev64q_u32 (uint32x4_t) 30641 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 30642 30643 * uint16x8_t vrev64q_u16 (uint16x8_t) 30644 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 30645 30646 * uint8x16_t vrev64q_u8 (uint8x16_t) 30647 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 30648 30649 * int32x4_t vrev64q_s32 (int32x4_t) 30650 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 30651 30652 * int16x8_t vrev64q_s16 (int16x8_t) 30653 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 30654 30655 * int8x16_t vrev64q_s8 (int8x16_t) 30656 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 30657 30658 * float32x4_t vrev64q_f32 (float32x4_t) 30659 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 30660 30661 * poly16x8_t vrev64q_p16 (poly16x8_t) 30662 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 30663 30664 * poly8x16_t vrev64q_p8 (poly8x16_t) 30665 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 30666 30667 * uint16x4_t vrev32_u16 (uint16x4_t) 30668 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 30669 30670 * int16x4_t vrev32_s16 (int16x4_t) 30671 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 30672 30673 * uint8x8_t vrev32_u8 (uint8x8_t) 30674 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 30675 30676 * int8x8_t vrev32_s8 (int8x8_t) 30677 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 30678 30679 * poly16x4_t vrev32_p16 (poly16x4_t) 30680 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 30681 30682 * poly8x8_t vrev32_p8 (poly8x8_t) 30683 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 30684 30685 * uint16x8_t vrev32q_u16 (uint16x8_t) 30686 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 30687 30688 * int16x8_t vrev32q_s16 (int16x8_t) 30689 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 30690 30691 * uint8x16_t vrev32q_u8 (uint8x16_t) 30692 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 30693 30694 * int8x16_t vrev32q_s8 (int8x16_t) 30695 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 30696 30697 * poly16x8_t vrev32q_p16 (poly16x8_t) 30698 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 30699 30700 * poly8x16_t vrev32q_p8 (poly8x16_t) 30701 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 30702 30703 * uint8x8_t vrev16_u8 (uint8x8_t) 30704 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 30705 30706 * int8x8_t vrev16_s8 (int8x8_t) 30707 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 30708 30709 * poly8x8_t vrev16_p8 (poly8x8_t) 30710 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 30711 30712 * uint8x16_t vrev16q_u8 (uint8x16_t) 30713 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 30714 30715 * int8x16_t vrev16q_s8 (int8x16_t) 30716 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 30717 30718 * poly8x16_t vrev16q_p8 (poly8x16_t) 30719 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 30720 307216.54.3.64 Bit selection 30722....................... 30723 30724 * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 30725 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30726 D0, D0, D0' _or_ `vbif D0, D0, D0' 30727 30728 * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 30729 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30730 D0, D0, D0' _or_ `vbif D0, D0, D0' 30731 30732 * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 30733 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30734 D0, D0, D0' _or_ `vbif D0, D0, D0' 30735 30736 * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) 30737 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30738 D0, D0, D0' _or_ `vbif D0, D0, D0' 30739 30740 * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) 30741 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30742 D0, D0, D0' _or_ `vbif D0, D0, D0' 30743 30744 * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) 30745 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30746 D0, D0, D0' _or_ `vbif D0, D0, D0' 30747 30748 * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) 30749 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30750 D0, D0, D0' _or_ `vbif D0, D0, D0' 30751 30752 * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) 30753 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30754 D0, D0, D0' _or_ `vbif D0, D0, D0' 30755 30756 * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) 30757 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30758 D0, D0, D0' _or_ `vbif D0, D0, D0' 30759 30760 * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) 30761 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30762 D0, D0, D0' _or_ `vbif D0, D0, D0' 30763 30764 * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) 30765 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 30766 D0, D0, D0' _or_ `vbif D0, D0, D0' 30767 30768 * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 30769 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30770 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30771 30772 * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 30773 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30774 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30775 30776 * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 30777 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30778 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30779 30780 * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) 30781 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30782 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30783 30784 * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) 30785 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30786 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30787 30788 * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) 30789 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30790 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30791 30792 * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) 30793 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30794 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30795 30796 * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) 30797 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30798 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30799 30800 * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) 30801 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30802 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30803 30804 * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) 30805 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30806 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30807 30808 * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) 30809 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 30810 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 30811 308126.54.3.65 Transpose elements 30813............................ 30814 30815 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) 30816 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 30817 30818 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) 30819 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 30820 30821 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) 30822 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 30823 30824 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) 30825 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 30826 30827 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) 30828 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 30829 30830 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) 30831 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 30832 30833 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) 30834 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 30835 30836 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) 30837 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 30838 30839 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) 30840 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 30841 30842 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) 30843 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 30844 30845 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) 30846 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 30847 30848 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) 30849 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 30850 30851 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) 30852 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 30853 30854 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) 30855 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 30856 30857 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) 30858 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 30859 30860 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) 30861 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 30862 30863 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) 30864 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 30865 30866 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) 30867 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 30868 308696.54.3.66 Zip elements 30870...................... 30871 30872 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) 30873 _Form of expected instruction(s):_ `vzip.32 D0, D1' 30874 30875 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) 30876 _Form of expected instruction(s):_ `vzip.16 D0, D1' 30877 30878 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) 30879 _Form of expected instruction(s):_ `vzip.8 D0, D1' 30880 30881 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) 30882 _Form of expected instruction(s):_ `vzip.32 D0, D1' 30883 30884 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) 30885 _Form of expected instruction(s):_ `vzip.16 D0, D1' 30886 30887 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) 30888 _Form of expected instruction(s):_ `vzip.8 D0, D1' 30889 30890 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) 30891 _Form of expected instruction(s):_ `vzip.32 D0, D1' 30892 30893 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) 30894 _Form of expected instruction(s):_ `vzip.16 D0, D1' 30895 30896 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) 30897 _Form of expected instruction(s):_ `vzip.8 D0, D1' 30898 30899 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) 30900 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 30901 30902 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) 30903 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 30904 30905 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) 30906 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 30907 30908 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) 30909 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 30910 30911 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) 30912 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 30913 30914 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) 30915 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 30916 30917 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) 30918 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 30919 30920 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) 30921 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 30922 30923 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) 30924 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 30925 309266.54.3.67 Unzip elements 30927........................ 30928 30929 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) 30930 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 30931 30932 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) 30933 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 30934 30935 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) 30936 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 30937 30938 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) 30939 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 30940 30941 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) 30942 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 30943 30944 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) 30945 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 30946 30947 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) 30948 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 30949 30950 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) 30951 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 30952 30953 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) 30954 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 30955 30956 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) 30957 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 30958 30959 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) 30960 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 30961 30962 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) 30963 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 30964 30965 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) 30966 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 30967 30968 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) 30969 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 30970 30971 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) 30972 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 30973 30974 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) 30975 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 30976 30977 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) 30978 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 30979 30980 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) 30981 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 30982 309836.54.3.68 Element/structure loads, VLD1 variants 30984................................................ 30985 30986 * uint32x2_t vld1_u32 (const uint32_t *) 30987 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 30988 30989 * uint16x4_t vld1_u16 (const uint16_t *) 30990 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 30991 30992 * uint8x8_t vld1_u8 (const uint8_t *) 30993 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 30994 30995 * int32x2_t vld1_s32 (const int32_t *) 30996 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 30997 30998 * int16x4_t vld1_s16 (const int16_t *) 30999 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 31000 31001 * int8x8_t vld1_s8 (const int8_t *) 31002 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 31003 31004 * uint64x1_t vld1_u64 (const uint64_t *) 31005 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31006 31007 * int64x1_t vld1_s64 (const int64_t *) 31008 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31009 31010 * float32x2_t vld1_f32 (const float32_t *) 31011 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 31012 31013 * poly16x4_t vld1_p16 (const poly16_t *) 31014 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 31015 31016 * poly8x8_t vld1_p8 (const poly8_t *) 31017 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 31018 31019 * uint32x4_t vld1q_u32 (const uint32_t *) 31020 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 31021 31022 * uint16x8_t vld1q_u16 (const uint16_t *) 31023 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 31024 31025 * uint8x16_t vld1q_u8 (const uint8_t *) 31026 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 31027 31028 * int32x4_t vld1q_s32 (const int32_t *) 31029 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 31030 31031 * int16x8_t vld1q_s16 (const int16_t *) 31032 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 31033 31034 * int8x16_t vld1q_s8 (const int8_t *) 31035 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 31036 31037 * uint64x2_t vld1q_u64 (const uint64_t *) 31038 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31039 31040 * int64x2_t vld1q_s64 (const int64_t *) 31041 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31042 31043 * float32x4_t vld1q_f32 (const float32_t *) 31044 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 31045 31046 * poly16x8_t vld1q_p16 (const poly16_t *) 31047 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 31048 31049 * poly8x16_t vld1q_p8 (const poly8_t *) 31050 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 31051 31052 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) 31053 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31054 31055 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) 31056 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31057 31058 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) 31059 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31060 31061 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) 31062 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31063 31064 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) 31065 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31066 31067 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) 31068 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31069 31070 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const 31071 int) 31072 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31073 31074 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) 31075 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31076 31077 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) 31078 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31079 31080 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) 31081 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31082 31083 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) 31084 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31085 31086 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) 31087 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31088 31089 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) 31090 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31091 31092 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) 31093 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31094 31095 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) 31096 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31097 31098 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) 31099 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31100 31101 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) 31102 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31103 31104 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const 31105 int) 31106 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31107 31108 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) 31109 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31110 31111 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) 31112 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31113 31114 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) 31115 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31116 31117 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) 31118 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31119 31120 * uint32x2_t vld1_dup_u32 (const uint32_t *) 31121 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 31122 31123 * uint16x4_t vld1_dup_u16 (const uint16_t *) 31124 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 31125 31126 * uint8x8_t vld1_dup_u8 (const uint8_t *) 31127 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 31128 31129 * int32x2_t vld1_dup_s32 (const int32_t *) 31130 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 31131 31132 * int16x4_t vld1_dup_s16 (const int16_t *) 31133 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 31134 31135 * int8x8_t vld1_dup_s8 (const int8_t *) 31136 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 31137 31138 * float32x2_t vld1_dup_f32 (const float32_t *) 31139 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 31140 31141 * poly16x4_t vld1_dup_p16 (const poly16_t *) 31142 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 31143 31144 * poly8x8_t vld1_dup_p8 (const poly8_t *) 31145 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 31146 31147 * uint64x1_t vld1_dup_u64 (const uint64_t *) 31148 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31149 31150 * int64x1_t vld1_dup_s64 (const int64_t *) 31151 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31152 31153 * uint32x4_t vld1q_dup_u32 (const uint32_t *) 31154 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 31155 31156 * uint16x8_t vld1q_dup_u16 (const uint16_t *) 31157 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 31158 31159 * uint8x16_t vld1q_dup_u8 (const uint8_t *) 31160 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 31161 31162 * int32x4_t vld1q_dup_s32 (const int32_t *) 31163 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 31164 31165 * int16x8_t vld1q_dup_s16 (const int16_t *) 31166 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 31167 31168 * int8x16_t vld1q_dup_s8 (const int8_t *) 31169 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 31170 31171 * float32x4_t vld1q_dup_f32 (const float32_t *) 31172 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 31173 31174 * poly16x8_t vld1q_dup_p16 (const poly16_t *) 31175 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 31176 31177 * poly8x16_t vld1q_dup_p8 (const poly8_t *) 31178 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 31179 31180 * uint64x2_t vld1q_dup_u64 (const uint64_t *) 31181 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31182 31183 * int64x2_t vld1q_dup_s64 (const int64_t *) 31184 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31185 311866.54.3.69 Element/structure stores, VST1 variants 31187................................................. 31188 31189 * void vst1_u32 (uint32_t *, uint32x2_t) 31190 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 31191 31192 * void vst1_u16 (uint16_t *, uint16x4_t) 31193 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 31194 31195 * void vst1_u8 (uint8_t *, uint8x8_t) 31196 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 31197 31198 * void vst1_s32 (int32_t *, int32x2_t) 31199 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 31200 31201 * void vst1_s16 (int16_t *, int16x4_t) 31202 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 31203 31204 * void vst1_s8 (int8_t *, int8x8_t) 31205 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 31206 31207 * void vst1_u64 (uint64_t *, uint64x1_t) 31208 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31209 31210 * void vst1_s64 (int64_t *, int64x1_t) 31211 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31212 31213 * void vst1_f32 (float32_t *, float32x2_t) 31214 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 31215 31216 * void vst1_p16 (poly16_t *, poly16x4_t) 31217 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 31218 31219 * void vst1_p8 (poly8_t *, poly8x8_t) 31220 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 31221 31222 * void vst1q_u32 (uint32_t *, uint32x4_t) 31223 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 31224 31225 * void vst1q_u16 (uint16_t *, uint16x8_t) 31226 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 31227 31228 * void vst1q_u8 (uint8_t *, uint8x16_t) 31229 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 31230 31231 * void vst1q_s32 (int32_t *, int32x4_t) 31232 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 31233 31234 * void vst1q_s16 (int16_t *, int16x8_t) 31235 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 31236 31237 * void vst1q_s8 (int8_t *, int8x16_t) 31238 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 31239 31240 * void vst1q_u64 (uint64_t *, uint64x2_t) 31241 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 31242 31243 * void vst1q_s64 (int64_t *, int64x2_t) 31244 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 31245 31246 * void vst1q_f32 (float32_t *, float32x4_t) 31247 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 31248 31249 * void vst1q_p16 (poly16_t *, poly16x8_t) 31250 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 31251 31252 * void vst1q_p8 (poly8_t *, poly8x16_t) 31253 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 31254 31255 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) 31256 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31257 31258 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) 31259 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31260 31261 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) 31262 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31263 31264 * void vst1_lane_s32 (int32_t *, int32x2_t, const int) 31265 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31266 31267 * void vst1_lane_s16 (int16_t *, int16x4_t, const int) 31268 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31269 31270 * void vst1_lane_s8 (int8_t *, int8x8_t, const int) 31271 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31272 31273 * void vst1_lane_f32 (float32_t *, float32x2_t, const int) 31274 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31275 31276 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) 31277 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31278 31279 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) 31280 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31281 31282 * void vst1_lane_s64 (int64_t *, int64x1_t, const int) 31283 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31284 31285 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) 31286 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31287 31288 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) 31289 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31290 31291 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) 31292 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31293 31294 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) 31295 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31296 31297 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) 31298 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31299 31300 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) 31301 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31302 31303 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) 31304 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31305 31306 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) 31307 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31308 31309 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) 31310 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31311 31312 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) 31313 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31314 31315 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) 31316 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31317 31318 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) 31319 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31320 313216.54.3.70 Element/structure loads, VLD2 variants 31322................................................ 31323 31324 * uint32x2x2_t vld2_u32 (const uint32_t *) 31325 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31326 31327 * uint16x4x2_t vld2_u16 (const uint16_t *) 31328 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31329 31330 * uint8x8x2_t vld2_u8 (const uint8_t *) 31331 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31332 31333 * int32x2x2_t vld2_s32 (const int32_t *) 31334 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31335 31336 * int16x4x2_t vld2_s16 (const int16_t *) 31337 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31338 31339 * int8x8x2_t vld2_s8 (const int8_t *) 31340 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31341 31342 * float32x2x2_t vld2_f32 (const float32_t *) 31343 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31344 31345 * poly16x4x2_t vld2_p16 (const poly16_t *) 31346 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31347 31348 * poly8x8x2_t vld2_p8 (const poly8_t *) 31349 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31350 31351 * uint64x1x2_t vld2_u64 (const uint64_t *) 31352 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31353 31354 * int64x1x2_t vld2_s64 (const int64_t *) 31355 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31356 31357 * uint32x4x2_t vld2q_u32 (const uint32_t *) 31358 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31359 31360 * uint16x8x2_t vld2q_u16 (const uint16_t *) 31361 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31362 31363 * uint8x16x2_t vld2q_u8 (const uint8_t *) 31364 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31365 31366 * int32x4x2_t vld2q_s32 (const int32_t *) 31367 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31368 31369 * int16x8x2_t vld2q_s16 (const int16_t *) 31370 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31371 31372 * int8x16x2_t vld2q_s8 (const int8_t *) 31373 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31374 31375 * float32x4x2_t vld2q_f32 (const float32_t *) 31376 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31377 31378 * poly16x8x2_t vld2q_p16 (const poly16_t *) 31379 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31380 31381 * poly8x16x2_t vld2q_p8 (const poly8_t *) 31382 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31383 31384 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const 31385 int) 31386 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31387 31388 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const 31389 int) 31390 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31391 31392 * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) 31393 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 31394 31395 * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) 31396 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31397 31398 * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) 31399 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31400 31401 * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) 31402 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 31403 31404 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, 31405 const int) 31406 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31407 31408 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const 31409 int) 31410 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31411 31412 * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) 31413 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 31414 31415 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const 31416 int) 31417 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31418 31419 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const 31420 int) 31421 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31422 31423 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const 31424 int) 31425 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31426 31427 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const 31428 int) 31429 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31430 31431 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, 31432 const int) 31433 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31434 31435 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const 31436 int) 31437 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31438 31439 * uint32x2x2_t vld2_dup_u32 (const uint32_t *) 31440 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 31441 31442 * uint16x4x2_t vld2_dup_u16 (const uint16_t *) 31443 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 31444 31445 * uint8x8x2_t vld2_dup_u8 (const uint8_t *) 31446 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 31447 31448 * int32x2x2_t vld2_dup_s32 (const int32_t *) 31449 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 31450 31451 * int16x4x2_t vld2_dup_s16 (const int16_t *) 31452 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 31453 31454 * int8x8x2_t vld2_dup_s8 (const int8_t *) 31455 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 31456 31457 * float32x2x2_t vld2_dup_f32 (const float32_t *) 31458 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 31459 31460 * poly16x4x2_t vld2_dup_p16 (const poly16_t *) 31461 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 31462 31463 * poly8x8x2_t vld2_dup_p8 (const poly8_t *) 31464 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 31465 31466 * uint64x1x2_t vld2_dup_u64 (const uint64_t *) 31467 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31468 31469 * int64x1x2_t vld2_dup_s64 (const int64_t *) 31470 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31471 314726.54.3.71 Element/structure stores, VST2 variants 31473................................................. 31474 31475 * void vst2_u32 (uint32_t *, uint32x2x2_t) 31476 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31477 31478 * void vst2_u16 (uint16_t *, uint16x4x2_t) 31479 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31480 31481 * void vst2_u8 (uint8_t *, uint8x8x2_t) 31482 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31483 31484 * void vst2_s32 (int32_t *, int32x2x2_t) 31485 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31486 31487 * void vst2_s16 (int16_t *, int16x4x2_t) 31488 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31489 31490 * void vst2_s8 (int8_t *, int8x8x2_t) 31491 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31492 31493 * void vst2_f32 (float32_t *, float32x2x2_t) 31494 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31495 31496 * void vst2_p16 (poly16_t *, poly16x4x2_t) 31497 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31498 31499 * void vst2_p8 (poly8_t *, poly8x8x2_t) 31500 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31501 31502 * void vst2_u64 (uint64_t *, uint64x1x2_t) 31503 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 31504 31505 * void vst2_s64 (int64_t *, int64x1x2_t) 31506 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 31507 31508 * void vst2q_u32 (uint32_t *, uint32x4x2_t) 31509 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31510 31511 * void vst2q_u16 (uint16_t *, uint16x8x2_t) 31512 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31513 31514 * void vst2q_u8 (uint8_t *, uint8x16x2_t) 31515 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31516 31517 * void vst2q_s32 (int32_t *, int32x4x2_t) 31518 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31519 31520 * void vst2q_s16 (int16_t *, int16x8x2_t) 31521 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31522 31523 * void vst2q_s8 (int8_t *, int8x16x2_t) 31524 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31525 31526 * void vst2q_f32 (float32_t *, float32x4x2_t) 31527 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31528 31529 * void vst2q_p16 (poly16_t *, poly16x8x2_t) 31530 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31531 31532 * void vst2q_p8 (poly8_t *, poly8x16x2_t) 31533 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31534 31535 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) 31536 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 31537 31538 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) 31539 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 31540 31541 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) 31542 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 31543 31544 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) 31545 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 31546 31547 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) 31548 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 31549 31550 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) 31551 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 31552 31553 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) 31554 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 31555 31556 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) 31557 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 31558 31559 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) 31560 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 31561 31562 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) 31563 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 31564 31565 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) 31566 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 31567 31568 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) 31569 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 31570 31571 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) 31572 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 31573 31574 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) 31575 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 31576 31577 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) 31578 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 31579 315806.54.3.72 Element/structure loads, VLD3 variants 31581................................................ 31582 31583 * uint32x2x3_t vld3_u32 (const uint32_t *) 31584 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 31585 31586 * uint16x4x3_t vld3_u16 (const uint16_t *) 31587 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 31588 31589 * uint8x8x3_t vld3_u8 (const uint8_t *) 31590 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 31591 31592 * int32x2x3_t vld3_s32 (const int32_t *) 31593 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 31594 31595 * int16x4x3_t vld3_s16 (const int16_t *) 31596 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 31597 31598 * int8x8x3_t vld3_s8 (const int8_t *) 31599 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 31600 31601 * float32x2x3_t vld3_f32 (const float32_t *) 31602 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 31603 31604 * poly16x4x3_t vld3_p16 (const poly16_t *) 31605 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 31606 31607 * poly8x8x3_t vld3_p8 (const poly8_t *) 31608 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 31609 31610 * uint64x1x3_t vld3_u64 (const uint64_t *) 31611 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 31612 31613 * int64x1x3_t vld3_s64 (const int64_t *) 31614 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 31615 31616 * uint32x4x3_t vld3q_u32 (const uint32_t *) 31617 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 31618 31619 * uint16x8x3_t vld3q_u16 (const uint16_t *) 31620 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 31621 31622 * uint8x16x3_t vld3q_u8 (const uint8_t *) 31623 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 31624 31625 * int32x4x3_t vld3q_s32 (const int32_t *) 31626 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 31627 31628 * int16x8x3_t vld3q_s16 (const int16_t *) 31629 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 31630 31631 * int8x16x3_t vld3q_s8 (const int8_t *) 31632 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 31633 31634 * float32x4x3_t vld3q_f32 (const float32_t *) 31635 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 31636 31637 * poly16x8x3_t vld3q_p16 (const poly16_t *) 31638 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 31639 31640 * poly8x16x3_t vld3q_p8 (const poly8_t *) 31641 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 31642 31643 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const 31644 int) 31645 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 31646 [R0]' 31647 31648 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const 31649 int) 31650 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 31651 [R0]' 31652 31653 * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) 31654 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 31655 [R0]' 31656 31657 * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) 31658 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 31659 [R0]' 31660 31661 * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) 31662 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 31663 [R0]' 31664 31665 * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) 31666 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 31667 [R0]' 31668 31669 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, 31670 const int) 31671 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 31672 [R0]' 31673 31674 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const 31675 int) 31676 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 31677 [R0]' 31678 31679 * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) 31680 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 31681 [R0]' 31682 31683 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const 31684 int) 31685 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 31686 [R0]' 31687 31688 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const 31689 int) 31690 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 31691 [R0]' 31692 31693 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const 31694 int) 31695 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 31696 [R0]' 31697 31698 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const 31699 int) 31700 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 31701 [R0]' 31702 31703 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, 31704 const int) 31705 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 31706 [R0]' 31707 31708 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const 31709 int) 31710 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 31711 [R0]' 31712 31713 * uint32x2x3_t vld3_dup_u32 (const uint32_t *) 31714 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 31715 [R0]' 31716 31717 * uint16x4x3_t vld3_dup_u16 (const uint16_t *) 31718 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 31719 [R0]' 31720 31721 * uint8x8x3_t vld3_dup_u8 (const uint8_t *) 31722 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 31723 [R0]' 31724 31725 * int32x2x3_t vld3_dup_s32 (const int32_t *) 31726 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 31727 [R0]' 31728 31729 * int16x4x3_t vld3_dup_s16 (const int16_t *) 31730 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 31731 [R0]' 31732 31733 * int8x8x3_t vld3_dup_s8 (const int8_t *) 31734 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 31735 [R0]' 31736 31737 * float32x2x3_t vld3_dup_f32 (const float32_t *) 31738 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 31739 [R0]' 31740 31741 * poly16x4x3_t vld3_dup_p16 (const poly16_t *) 31742 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 31743 [R0]' 31744 31745 * poly8x8x3_t vld3_dup_p8 (const poly8_t *) 31746 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 31747 [R0]' 31748 31749 * uint64x1x3_t vld3_dup_u64 (const uint64_t *) 31750 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 31751 31752 * int64x1x3_t vld3_dup_s64 (const int64_t *) 31753 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 31754 317556.54.3.73 Element/structure stores, VST3 variants 31756................................................. 31757 31758 * void vst3_u32 (uint32_t *, uint32x2x3_t) 31759 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 31760 31761 * void vst3_u16 (uint16_t *, uint16x4x3_t) 31762 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 31763 31764 * void vst3_u8 (uint8_t *, uint8x8x3_t) 31765 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 31766 31767 * void vst3_s32 (int32_t *, int32x2x3_t) 31768 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 31769 31770 * void vst3_s16 (int16_t *, int16x4x3_t) 31771 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 31772 31773 * void vst3_s8 (int8_t *, int8x8x3_t) 31774 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 31775 31776 * void vst3_f32 (float32_t *, float32x2x3_t) 31777 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 31778 31779 * void vst3_p16 (poly16_t *, poly16x4x3_t) 31780 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 31781 31782 * void vst3_p8 (poly8_t *, poly8x8x3_t) 31783 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 31784 31785 * void vst3_u64 (uint64_t *, uint64x1x3_t) 31786 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 31787 31788 * void vst3_s64 (int64_t *, int64x1x3_t) 31789 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 31790 31791 * void vst3q_u32 (uint32_t *, uint32x4x3_t) 31792 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 31793 31794 * void vst3q_u16 (uint16_t *, uint16x8x3_t) 31795 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 31796 31797 * void vst3q_u8 (uint8_t *, uint8x16x3_t) 31798 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 31799 31800 * void vst3q_s32 (int32_t *, int32x4x3_t) 31801 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 31802 31803 * void vst3q_s16 (int16_t *, int16x8x3_t) 31804 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 31805 31806 * void vst3q_s8 (int8_t *, int8x16x3_t) 31807 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 31808 31809 * void vst3q_f32 (float32_t *, float32x4x3_t) 31810 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 31811 31812 * void vst3q_p16 (poly16_t *, poly16x8x3_t) 31813 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 31814 31815 * void vst3q_p8 (poly8_t *, poly8x16x3_t) 31816 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 31817 31818 * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) 31819 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 31820 [R0]' 31821 31822 * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) 31823 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 31824 [R0]' 31825 31826 * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) 31827 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 31828 [R0]' 31829 31830 * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) 31831 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 31832 [R0]' 31833 31834 * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) 31835 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 31836 [R0]' 31837 31838 * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) 31839 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 31840 [R0]' 31841 31842 * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) 31843 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 31844 [R0]' 31845 31846 * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) 31847 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 31848 [R0]' 31849 31850 * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) 31851 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 31852 [R0]' 31853 31854 * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) 31855 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 31856 [R0]' 31857 31858 * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) 31859 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 31860 [R0]' 31861 31862 * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) 31863 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 31864 [R0]' 31865 31866 * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) 31867 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 31868 [R0]' 31869 31870 * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) 31871 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 31872 [R0]' 31873 31874 * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) 31875 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 31876 [R0]' 31877 318786.54.3.74 Element/structure loads, VLD4 variants 31879................................................ 31880 31881 * uint32x2x4_t vld4_u32 (const uint32_t *) 31882 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 31883 31884 * uint16x4x4_t vld4_u16 (const uint16_t *) 31885 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 31886 31887 * uint8x8x4_t vld4_u8 (const uint8_t *) 31888 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 31889 31890 * int32x2x4_t vld4_s32 (const int32_t *) 31891 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 31892 31893 * int16x4x4_t vld4_s16 (const int16_t *) 31894 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 31895 31896 * int8x8x4_t vld4_s8 (const int8_t *) 31897 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 31898 31899 * float32x2x4_t vld4_f32 (const float32_t *) 31900 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 31901 31902 * poly16x4x4_t vld4_p16 (const poly16_t *) 31903 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 31904 31905 * poly8x8x4_t vld4_p8 (const poly8_t *) 31906 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 31907 31908 * uint64x1x4_t vld4_u64 (const uint64_t *) 31909 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 31910 31911 * int64x1x4_t vld4_s64 (const int64_t *) 31912 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 31913 31914 * uint32x4x4_t vld4q_u32 (const uint32_t *) 31915 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 31916 31917 * uint16x8x4_t vld4q_u16 (const uint16_t *) 31918 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 31919 31920 * uint8x16x4_t vld4q_u8 (const uint8_t *) 31921 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 31922 31923 * int32x4x4_t vld4q_s32 (const int32_t *) 31924 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 31925 31926 * int16x8x4_t vld4q_s16 (const int16_t *) 31927 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 31928 31929 * int8x16x4_t vld4q_s8 (const int8_t *) 31930 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 31931 31932 * float32x4x4_t vld4q_f32 (const float32_t *) 31933 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 31934 31935 * poly16x8x4_t vld4q_p16 (const poly16_t *) 31936 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 31937 31938 * poly8x16x4_t vld4q_p8 (const poly8_t *) 31939 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 31940 31941 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const 31942 int) 31943 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 31944 D3[0]}, [R0]' 31945 31946 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const 31947 int) 31948 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 31949 D3[0]}, [R0]' 31950 31951 * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) 31952 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 31953 D3[0]}, [R0]' 31954 31955 * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) 31956 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 31957 D3[0]}, [R0]' 31958 31959 * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) 31960 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 31961 D3[0]}, [R0]' 31962 31963 * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) 31964 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 31965 D3[0]}, [R0]' 31966 31967 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, 31968 const int) 31969 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 31970 D3[0]}, [R0]' 31971 31972 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const 31973 int) 31974 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 31975 D3[0]}, [R0]' 31976 31977 * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) 31978 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 31979 D3[0]}, [R0]' 31980 31981 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const 31982 int) 31983 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 31984 D3[0]}, [R0]' 31985 31986 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const 31987 int) 31988 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 31989 D3[0]}, [R0]' 31990 31991 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const 31992 int) 31993 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 31994 D3[0]}, [R0]' 31995 31996 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const 31997 int) 31998 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 31999 D3[0]}, [R0]' 32000 32001 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, 32002 const int) 32003 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 32004 D3[0]}, [R0]' 32005 32006 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const 32007 int) 32008 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 32009 D3[0]}, [R0]' 32010 32011 * uint32x2x4_t vld4_dup_u32 (const uint32_t *) 32012 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 32013 D3[]}, [R0]' 32014 32015 * uint16x4x4_t vld4_dup_u16 (const uint16_t *) 32016 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 32017 D3[]}, [R0]' 32018 32019 * uint8x8x4_t vld4_dup_u8 (const uint8_t *) 32020 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 32021 D3[]}, [R0]' 32022 32023 * int32x2x4_t vld4_dup_s32 (const int32_t *) 32024 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 32025 D3[]}, [R0]' 32026 32027 * int16x4x4_t vld4_dup_s16 (const int16_t *) 32028 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 32029 D3[]}, [R0]' 32030 32031 * int8x8x4_t vld4_dup_s8 (const int8_t *) 32032 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 32033 D3[]}, [R0]' 32034 32035 * float32x2x4_t vld4_dup_f32 (const float32_t *) 32036 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 32037 D3[]}, [R0]' 32038 32039 * poly16x4x4_t vld4_dup_p16 (const poly16_t *) 32040 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 32041 D3[]}, [R0]' 32042 32043 * poly8x8x4_t vld4_dup_p8 (const poly8_t *) 32044 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 32045 D3[]}, [R0]' 32046 32047 * uint64x1x4_t vld4_dup_u64 (const uint64_t *) 32048 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 32049 32050 * int64x1x4_t vld4_dup_s64 (const int64_t *) 32051 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 32052 320536.54.3.75 Element/structure stores, VST4 variants 32054................................................. 32055 32056 * void vst4_u32 (uint32_t *, uint32x2x4_t) 32057 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32058 32059 * void vst4_u16 (uint16_t *, uint16x4x4_t) 32060 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32061 32062 * void vst4_u8 (uint8_t *, uint8x8x4_t) 32063 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32064 32065 * void vst4_s32 (int32_t *, int32x2x4_t) 32066 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32067 32068 * void vst4_s16 (int16_t *, int16x4x4_t) 32069 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32070 32071 * void vst4_s8 (int8_t *, int8x8x4_t) 32072 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32073 32074 * void vst4_f32 (float32_t *, float32x2x4_t) 32075 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32076 32077 * void vst4_p16 (poly16_t *, poly16x4x4_t) 32078 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32079 32080 * void vst4_p8 (poly8_t *, poly8x8x4_t) 32081 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32082 32083 * void vst4_u64 (uint64_t *, uint64x1x4_t) 32084 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 32085 32086 * void vst4_s64 (int64_t *, int64x1x4_t) 32087 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 32088 32089 * void vst4q_u32 (uint32_t *, uint32x4x4_t) 32090 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32091 32092 * void vst4q_u16 (uint16_t *, uint16x8x4_t) 32093 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32094 32095 * void vst4q_u8 (uint8_t *, uint8x16x4_t) 32096 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32097 32098 * void vst4q_s32 (int32_t *, int32x4x4_t) 32099 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32100 32101 * void vst4q_s16 (int16_t *, int16x8x4_t) 32102 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32103 32104 * void vst4q_s8 (int8_t *, int8x16x4_t) 32105 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32106 32107 * void vst4q_f32 (float32_t *, float32x4x4_t) 32108 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32109 32110 * void vst4q_p16 (poly16_t *, poly16x8x4_t) 32111 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32112 32113 * void vst4q_p8 (poly8_t *, poly8x16x4_t) 32114 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32115 32116 * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) 32117 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32118 D3[0]}, [R0]' 32119 32120 * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) 32121 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32122 D3[0]}, [R0]' 32123 32124 * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) 32125 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 32126 D3[0]}, [R0]' 32127 32128 * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) 32129 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32130 D3[0]}, [R0]' 32131 32132 * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) 32133 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32134 D3[0]}, [R0]' 32135 32136 * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) 32137 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 32138 D3[0]}, [R0]' 32139 32140 * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) 32141 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32142 D3[0]}, [R0]' 32143 32144 * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) 32145 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32146 D3[0]}, [R0]' 32147 32148 * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) 32149 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 32150 D3[0]}, [R0]' 32151 32152 * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) 32153 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32154 D3[0]}, [R0]' 32155 32156 * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) 32157 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32158 D3[0]}, [R0]' 32159 32160 * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) 32161 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32162 D3[0]}, [R0]' 32163 32164 * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) 32165 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32166 D3[0]}, [R0]' 32167 32168 * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) 32169 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32170 D3[0]}, [R0]' 32171 32172 * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) 32173 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32174 D3[0]}, [R0]' 32175 321766.54.3.76 Logical operations (AND) 32177.................................. 32178 32179 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) 32180 _Form of expected instruction(s):_ `vand D0, D0, D0' 32181 32182 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) 32183 _Form of expected instruction(s):_ `vand D0, D0, D0' 32184 32185 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) 32186 _Form of expected instruction(s):_ `vand D0, D0, D0' 32187 32188 * int32x2_t vand_s32 (int32x2_t, int32x2_t) 32189 _Form of expected instruction(s):_ `vand D0, D0, D0' 32190 32191 * int16x4_t vand_s16 (int16x4_t, int16x4_t) 32192 _Form of expected instruction(s):_ `vand D0, D0, D0' 32193 32194 * int8x8_t vand_s8 (int8x8_t, int8x8_t) 32195 _Form of expected instruction(s):_ `vand D0, D0, D0' 32196 32197 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) 32198 32199 * int64x1_t vand_s64 (int64x1_t, int64x1_t) 32200 32201 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) 32202 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32203 32204 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) 32205 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32206 32207 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) 32208 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32209 32210 * int32x4_t vandq_s32 (int32x4_t, int32x4_t) 32211 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32212 32213 * int16x8_t vandq_s16 (int16x8_t, int16x8_t) 32214 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32215 32216 * int8x16_t vandq_s8 (int8x16_t, int8x16_t) 32217 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32218 32219 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) 32220 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32221 32222 * int64x2_t vandq_s64 (int64x2_t, int64x2_t) 32223 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32224 322256.54.3.77 Logical operations (OR) 32226................................. 32227 32228 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) 32229 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32230 32231 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) 32232 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32233 32234 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) 32235 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32236 32237 * int32x2_t vorr_s32 (int32x2_t, int32x2_t) 32238 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32239 32240 * int16x4_t vorr_s16 (int16x4_t, int16x4_t) 32241 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32242 32243 * int8x8_t vorr_s8 (int8x8_t, int8x8_t) 32244 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32245 32246 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) 32247 32248 * int64x1_t vorr_s64 (int64x1_t, int64x1_t) 32249 32250 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) 32251 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32252 32253 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) 32254 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32255 32256 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) 32257 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32258 32259 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) 32260 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32261 32262 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) 32263 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32264 32265 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) 32266 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32267 32268 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) 32269 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32270 32271 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) 32272 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32273 322746.54.3.78 Logical operations (exclusive OR) 32275........................................... 32276 32277 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) 32278 _Form of expected instruction(s):_ `veor D0, D0, D0' 32279 32280 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) 32281 _Form of expected instruction(s):_ `veor D0, D0, D0' 32282 32283 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) 32284 _Form of expected instruction(s):_ `veor D0, D0, D0' 32285 32286 * int32x2_t veor_s32 (int32x2_t, int32x2_t) 32287 _Form of expected instruction(s):_ `veor D0, D0, D0' 32288 32289 * int16x4_t veor_s16 (int16x4_t, int16x4_t) 32290 _Form of expected instruction(s):_ `veor D0, D0, D0' 32291 32292 * int8x8_t veor_s8 (int8x8_t, int8x8_t) 32293 _Form of expected instruction(s):_ `veor D0, D0, D0' 32294 32295 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) 32296 32297 * int64x1_t veor_s64 (int64x1_t, int64x1_t) 32298 32299 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) 32300 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32301 32302 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) 32303 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32304 32305 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) 32306 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32307 32308 * int32x4_t veorq_s32 (int32x4_t, int32x4_t) 32309 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32310 32311 * int16x8_t veorq_s16 (int16x8_t, int16x8_t) 32312 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32313 32314 * int8x16_t veorq_s8 (int8x16_t, int8x16_t) 32315 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32316 32317 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) 32318 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32319 32320 * int64x2_t veorq_s64 (int64x2_t, int64x2_t) 32321 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32322 323236.54.3.79 Logical operations (AND-NOT) 32324...................................... 32325 32326 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) 32327 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32328 32329 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) 32330 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32331 32332 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) 32333 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32334 32335 * int32x2_t vbic_s32 (int32x2_t, int32x2_t) 32336 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32337 32338 * int16x4_t vbic_s16 (int16x4_t, int16x4_t) 32339 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32340 32341 * int8x8_t vbic_s8 (int8x8_t, int8x8_t) 32342 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32343 32344 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) 32345 32346 * int64x1_t vbic_s64 (int64x1_t, int64x1_t) 32347 32348 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) 32349 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32350 32351 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) 32352 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32353 32354 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) 32355 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32356 32357 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) 32358 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32359 32360 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) 32361 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32362 32363 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) 32364 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32365 32366 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) 32367 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32368 32369 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) 32370 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32371 323726.54.3.80 Logical operations (OR-NOT) 32373..................................... 32374 32375 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) 32376 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32377 32378 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) 32379 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32380 32381 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) 32382 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32383 32384 * int32x2_t vorn_s32 (int32x2_t, int32x2_t) 32385 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32386 32387 * int16x4_t vorn_s16 (int16x4_t, int16x4_t) 32388 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32389 32390 * int8x8_t vorn_s8 (int8x8_t, int8x8_t) 32391 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32392 32393 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) 32394 32395 * int64x1_t vorn_s64 (int64x1_t, int64x1_t) 32396 32397 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) 32398 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32399 32400 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) 32401 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32402 32403 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) 32404 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32405 32406 * int32x4_t vornq_s32 (int32x4_t, int32x4_t) 32407 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32408 32409 * int16x8_t vornq_s16 (int16x8_t, int16x8_t) 32410 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32411 32412 * int8x16_t vornq_s8 (int8x16_t, int8x16_t) 32413 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32414 32415 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) 32416 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32417 32418 * int64x2_t vornq_s64 (int64x2_t, int64x2_t) 32419 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32420 324216.54.3.81 Reinterpret casts 32422........................... 32423 32424 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) 32425 32426 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) 32427 32428 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) 32429 32430 * poly8x8_t vreinterpret_p8_s32 (int32x2_t) 32431 32432 * poly8x8_t vreinterpret_p8_s16 (int16x4_t) 32433 32434 * poly8x8_t vreinterpret_p8_s8 (int8x8_t) 32435 32436 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) 32437 32438 * poly8x8_t vreinterpret_p8_s64 (int64x1_t) 32439 32440 * poly8x8_t vreinterpret_p8_f32 (float32x2_t) 32441 32442 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) 32443 32444 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) 32445 32446 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) 32447 32448 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) 32449 32450 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) 32451 32452 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) 32453 32454 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) 32455 32456 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) 32457 32458 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) 32459 32460 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) 32461 32462 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) 32463 32464 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) 32465 32466 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) 32467 32468 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) 32469 32470 * poly16x4_t vreinterpret_p16_s32 (int32x2_t) 32471 32472 * poly16x4_t vreinterpret_p16_s16 (int16x4_t) 32473 32474 * poly16x4_t vreinterpret_p16_s8 (int8x8_t) 32475 32476 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) 32477 32478 * poly16x4_t vreinterpret_p16_s64 (int64x1_t) 32479 32480 * poly16x4_t vreinterpret_p16_f32 (float32x2_t) 32481 32482 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) 32483 32484 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) 32485 32486 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) 32487 32488 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) 32489 32490 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) 32491 32492 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) 32493 32494 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) 32495 32496 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) 32497 32498 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) 32499 32500 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) 32501 32502 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) 32503 32504 * float32x2_t vreinterpret_f32_u32 (uint32x2_t) 32505 32506 * float32x2_t vreinterpret_f32_u16 (uint16x4_t) 32507 32508 * float32x2_t vreinterpret_f32_u8 (uint8x8_t) 32509 32510 * float32x2_t vreinterpret_f32_s32 (int32x2_t) 32511 32512 * float32x2_t vreinterpret_f32_s16 (int16x4_t) 32513 32514 * float32x2_t vreinterpret_f32_s8 (int8x8_t) 32515 32516 * float32x2_t vreinterpret_f32_u64 (uint64x1_t) 32517 32518 * float32x2_t vreinterpret_f32_s64 (int64x1_t) 32519 32520 * float32x2_t vreinterpret_f32_p16 (poly16x4_t) 32521 32522 * float32x2_t vreinterpret_f32_p8 (poly8x8_t) 32523 32524 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) 32525 32526 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) 32527 32528 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) 32529 32530 * float32x4_t vreinterpretq_f32_s32 (int32x4_t) 32531 32532 * float32x4_t vreinterpretq_f32_s16 (int16x8_t) 32533 32534 * float32x4_t vreinterpretq_f32_s8 (int8x16_t) 32535 32536 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) 32537 32538 * float32x4_t vreinterpretq_f32_s64 (int64x2_t) 32539 32540 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) 32541 32542 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) 32543 32544 * int64x1_t vreinterpret_s64_u32 (uint32x2_t) 32545 32546 * int64x1_t vreinterpret_s64_u16 (uint16x4_t) 32547 32548 * int64x1_t vreinterpret_s64_u8 (uint8x8_t) 32549 32550 * int64x1_t vreinterpret_s64_s32 (int32x2_t) 32551 32552 * int64x1_t vreinterpret_s64_s16 (int16x4_t) 32553 32554 * int64x1_t vreinterpret_s64_s8 (int8x8_t) 32555 32556 * int64x1_t vreinterpret_s64_u64 (uint64x1_t) 32557 32558 * int64x1_t vreinterpret_s64_f32 (float32x2_t) 32559 32560 * int64x1_t vreinterpret_s64_p16 (poly16x4_t) 32561 32562 * int64x1_t vreinterpret_s64_p8 (poly8x8_t) 32563 32564 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) 32565 32566 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) 32567 32568 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) 32569 32570 * int64x2_t vreinterpretq_s64_s32 (int32x4_t) 32571 32572 * int64x2_t vreinterpretq_s64_s16 (int16x8_t) 32573 32574 * int64x2_t vreinterpretq_s64_s8 (int8x16_t) 32575 32576 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) 32577 32578 * int64x2_t vreinterpretq_s64_f32 (float32x4_t) 32579 32580 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) 32581 32582 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) 32583 32584 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) 32585 32586 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) 32587 32588 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) 32589 32590 * uint64x1_t vreinterpret_u64_s32 (int32x2_t) 32591 32592 * uint64x1_t vreinterpret_u64_s16 (int16x4_t) 32593 32594 * uint64x1_t vreinterpret_u64_s8 (int8x8_t) 32595 32596 * uint64x1_t vreinterpret_u64_s64 (int64x1_t) 32597 32598 * uint64x1_t vreinterpret_u64_f32 (float32x2_t) 32599 32600 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) 32601 32602 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) 32603 32604 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) 32605 32606 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) 32607 32608 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) 32609 32610 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) 32611 32612 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) 32613 32614 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) 32615 32616 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) 32617 32618 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) 32619 32620 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) 32621 32622 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) 32623 32624 * int8x8_t vreinterpret_s8_u32 (uint32x2_t) 32625 32626 * int8x8_t vreinterpret_s8_u16 (uint16x4_t) 32627 32628 * int8x8_t vreinterpret_s8_u8 (uint8x8_t) 32629 32630 * int8x8_t vreinterpret_s8_s32 (int32x2_t) 32631 32632 * int8x8_t vreinterpret_s8_s16 (int16x4_t) 32633 32634 * int8x8_t vreinterpret_s8_u64 (uint64x1_t) 32635 32636 * int8x8_t vreinterpret_s8_s64 (int64x1_t) 32637 32638 * int8x8_t vreinterpret_s8_f32 (float32x2_t) 32639 32640 * int8x8_t vreinterpret_s8_p16 (poly16x4_t) 32641 32642 * int8x8_t vreinterpret_s8_p8 (poly8x8_t) 32643 32644 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) 32645 32646 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) 32647 32648 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) 32649 32650 * int8x16_t vreinterpretq_s8_s32 (int32x4_t) 32651 32652 * int8x16_t vreinterpretq_s8_s16 (int16x8_t) 32653 32654 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) 32655 32656 * int8x16_t vreinterpretq_s8_s64 (int64x2_t) 32657 32658 * int8x16_t vreinterpretq_s8_f32 (float32x4_t) 32659 32660 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) 32661 32662 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) 32663 32664 * int16x4_t vreinterpret_s16_u32 (uint32x2_t) 32665 32666 * int16x4_t vreinterpret_s16_u16 (uint16x4_t) 32667 32668 * int16x4_t vreinterpret_s16_u8 (uint8x8_t) 32669 32670 * int16x4_t vreinterpret_s16_s32 (int32x2_t) 32671 32672 * int16x4_t vreinterpret_s16_s8 (int8x8_t) 32673 32674 * int16x4_t vreinterpret_s16_u64 (uint64x1_t) 32675 32676 * int16x4_t vreinterpret_s16_s64 (int64x1_t) 32677 32678 * int16x4_t vreinterpret_s16_f32 (float32x2_t) 32679 32680 * int16x4_t vreinterpret_s16_p16 (poly16x4_t) 32681 32682 * int16x4_t vreinterpret_s16_p8 (poly8x8_t) 32683 32684 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) 32685 32686 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) 32687 32688 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) 32689 32690 * int16x8_t vreinterpretq_s16_s32 (int32x4_t) 32691 32692 * int16x8_t vreinterpretq_s16_s8 (int8x16_t) 32693 32694 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) 32695 32696 * int16x8_t vreinterpretq_s16_s64 (int64x2_t) 32697 32698 * int16x8_t vreinterpretq_s16_f32 (float32x4_t) 32699 32700 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) 32701 32702 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) 32703 32704 * int32x2_t vreinterpret_s32_u32 (uint32x2_t) 32705 32706 * int32x2_t vreinterpret_s32_u16 (uint16x4_t) 32707 32708 * int32x2_t vreinterpret_s32_u8 (uint8x8_t) 32709 32710 * int32x2_t vreinterpret_s32_s16 (int16x4_t) 32711 32712 * int32x2_t vreinterpret_s32_s8 (int8x8_t) 32713 32714 * int32x2_t vreinterpret_s32_u64 (uint64x1_t) 32715 32716 * int32x2_t vreinterpret_s32_s64 (int64x1_t) 32717 32718 * int32x2_t vreinterpret_s32_f32 (float32x2_t) 32719 32720 * int32x2_t vreinterpret_s32_p16 (poly16x4_t) 32721 32722 * int32x2_t vreinterpret_s32_p8 (poly8x8_t) 32723 32724 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) 32725 32726 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) 32727 32728 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) 32729 32730 * int32x4_t vreinterpretq_s32_s16 (int16x8_t) 32731 32732 * int32x4_t vreinterpretq_s32_s8 (int8x16_t) 32733 32734 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) 32735 32736 * int32x4_t vreinterpretq_s32_s64 (int64x2_t) 32737 32738 * int32x4_t vreinterpretq_s32_f32 (float32x4_t) 32739 32740 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) 32741 32742 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) 32743 32744 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) 32745 32746 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) 32747 32748 * uint8x8_t vreinterpret_u8_s32 (int32x2_t) 32749 32750 * uint8x8_t vreinterpret_u8_s16 (int16x4_t) 32751 32752 * uint8x8_t vreinterpret_u8_s8 (int8x8_t) 32753 32754 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) 32755 32756 * uint8x8_t vreinterpret_u8_s64 (int64x1_t) 32757 32758 * uint8x8_t vreinterpret_u8_f32 (float32x2_t) 32759 32760 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) 32761 32762 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) 32763 32764 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) 32765 32766 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) 32767 32768 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) 32769 32770 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) 32771 32772 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) 32773 32774 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) 32775 32776 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) 32777 32778 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) 32779 32780 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) 32781 32782 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) 32783 32784 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) 32785 32786 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) 32787 32788 * uint16x4_t vreinterpret_u16_s32 (int32x2_t) 32789 32790 * uint16x4_t vreinterpret_u16_s16 (int16x4_t) 32791 32792 * uint16x4_t vreinterpret_u16_s8 (int8x8_t) 32793 32794 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) 32795 32796 * uint16x4_t vreinterpret_u16_s64 (int64x1_t) 32797 32798 * uint16x4_t vreinterpret_u16_f32 (float32x2_t) 32799 32800 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) 32801 32802 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) 32803 32804 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) 32805 32806 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) 32807 32808 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) 32809 32810 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) 32811 32812 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) 32813 32814 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) 32815 32816 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) 32817 32818 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) 32819 32820 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) 32821 32822 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) 32823 32824 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) 32825 32826 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) 32827 32828 * uint32x2_t vreinterpret_u32_s32 (int32x2_t) 32829 32830 * uint32x2_t vreinterpret_u32_s16 (int16x4_t) 32831 32832 * uint32x2_t vreinterpret_u32_s8 (int8x8_t) 32833 32834 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) 32835 32836 * uint32x2_t vreinterpret_u32_s64 (int64x1_t) 32837 32838 * uint32x2_t vreinterpret_u32_f32 (float32x2_t) 32839 32840 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) 32841 32842 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) 32843 32844 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) 32845 32846 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) 32847 32848 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) 32849 32850 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) 32851 32852 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) 32853 32854 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) 32855 32856 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) 32857 32858 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) 32859 32860 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) 32861 32862 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) 32863 32864 32865File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins 32866 328676.54.4 Blackfin Built-in Functions 32868---------------------------------- 32869 32870Currently, there are two Blackfin-specific built-in functions. These 32871are used for generating `CSYNC' and `SSYNC' machine insns without using 32872inline assembly; by using these built-in functions the compiler can 32873automatically add workarounds for hardware errata involving these 32874instructions. These functions are named as follows: 32875 32876 void __builtin_bfin_csync (void) 32877 void __builtin_bfin_ssync (void) 32878 32879 32880File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 32881 328826.54.5 FR-V Built-in Functions 32883------------------------------ 32884 32885GCC provides many FR-V-specific built-in functions. In general, these 32886functions are intended to be compatible with those described by `FR-V 32887Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 32888The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of 32889which pass 128-bit values by pointer rather than by value. 32890 32891 Most of the functions are named after specific FR-V instructions. 32892Such functions are said to be "directly mapped" and are summarized here 32893in tabular form. 32894 32895* Menu: 32896 32897* Argument Types:: 32898* Directly-mapped Integer Functions:: 32899* Directly-mapped Media Functions:: 32900* Raw read/write Functions:: 32901* Other Built-in Functions:: 32902 32903 32904File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 32905 329066.54.5.1 Argument Types 32907....................... 32908 32909The arguments to the built-in functions can be divided into three 32910groups: register numbers, compile-time constants and run-time values. 32911In order to make this classification clear at a glance, the arguments 32912and return values are given the following pseudo types: 32913 32914Pseudo type Real C type Constant? Description 32915`uh' `unsigned short' No an unsigned halfword 32916`uw1' `unsigned int' No an unsigned word 32917`sw1' `int' No a signed word 32918`uw2' `unsigned long long' No an unsigned doubleword 32919`sw2' `long long' No a signed doubleword 32920`const' `int' Yes an integer constant 32921`acc' `int' Yes an ACC register number 32922`iacc' `int' Yes an IACC register number 32923 32924 These pseudo types are not defined by GCC, they are simply a notational 32925convenience used in this manual. 32926 32927 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 32928run time. They correspond to register operands in the underlying FR-V 32929instructions. 32930 32931 `const' arguments represent immediate operands in the underlying FR-V 32932instructions. They must be compile-time constants. 32933 32934 `acc' arguments are evaluated at compile time and specify the number 32935of an accumulator register. For example, an `acc' argument of 2 will 32936select the ACC2 register. 32937 32938 `iacc' arguments are similar to `acc' arguments but specify the number 32939of an IACC register. See *note Other Built-in Functions:: for more 32940details. 32941 32942 32943File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 32944 329456.54.5.2 Directly-mapped Integer Functions 32946.......................................... 32947 32948The functions listed below map directly to FR-V I-type instructions. 32949 32950Function prototype Example usage Assembly output 32951`sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 32952`sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 32953`sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 32954`sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 32955`void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 32956`void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 32957`void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 32958`sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 32959`sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 32960`uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 32961 32962 32963File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 32964 329656.54.5.3 Directly-mapped Media Functions 32966........................................ 32967 32968The functions listed below map directly to FR-V M-type instructions. 32969 32970Function prototype Example usage Assembly output 32971`uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 32972`void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 32973`sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 32974`uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 32975`uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 32976`void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 32977`uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 32978`uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 32979`void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 32980`void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 32981`void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 32982`uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 32983`uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 32984`uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 32985`uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 32986`void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 32987`void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 32988`void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 32989`void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 32990`uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 32991`uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 32992`void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 32993`void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 32994`uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 32995`uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 32996`uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 32997`void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 32998`void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 32999`uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 33000`uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 33001`uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 33002`sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 33003`uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 33004`sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 33005`uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 33006`sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 33007`uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 33008`void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 33009`void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 33010`void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 33011`void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 33012`void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 33013`void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 33014`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 33015`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 33016`uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 33017`uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 33018`uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 33019`sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 33020`uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 33021`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 33022`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 33023`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 33024`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 33025`sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 33026`sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 33027`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 33028`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 33029`void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 33030sw2)' 33031`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 33032`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 33033`void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 33034sw2)' 33035`void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 33036uw2)' 33037`sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 33038`uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 33039`sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 33040`sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 33041`uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 33042`void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 33043sw2)' 33044`void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 33045sw2)' 33046`uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 33047`uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 33048`uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 33049`uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 33050`sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 33051`uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 33052`uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 33053`sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 33054`uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 33055`void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 33056`sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 33057`uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 33058`void __MTRAP (void)' `__MTRAP ()' `MTRAP' 33059`uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 33060`uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 33061`void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 33062`void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 33063`uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 33064 33065 33066File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 33067 330686.54.5.4 Raw read/write Functions 33069................................. 33070 33071This sections describes built-in functions related to read and write 33072instructions to access memory. These functions generate `membar' 33073instructions to flush the I/O load and stores where appropriate, as 33074described in Fujitsu's manual described above. 33075 33076`unsigned char __builtin_read8 (void *DATA)' 33077 33078`unsigned short __builtin_read16 (void *DATA)' 33079 33080`unsigned long __builtin_read32 (void *DATA)' 33081 33082`unsigned long long __builtin_read64 (void *DATA)' 33083 33084`void __builtin_write8 (void *DATA, unsigned char DATUM)' 33085 33086`void __builtin_write16 (void *DATA, unsigned short DATUM)' 33087 33088`void __builtin_write32 (void *DATA, unsigned long DATUM)' 33089 33090`void __builtin_write64 (void *DATA, unsigned long long DATUM)' 33091 33092 33093File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 33094 330956.54.5.5 Other Built-in Functions 33096................................. 33097 33098This section describes built-in functions that are not named after a 33099specific FR-V instruction. 33100 33101`sw2 __IACCreadll (iacc REG)' 33102 Return the full 64-bit value of IACC0. The REG argument is 33103 reserved for future expansion and must be 0. 33104 33105`sw1 __IACCreadl (iacc REG)' 33106 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 33107 Other values of REG are rejected as invalid. 33108 33109`void __IACCsetll (iacc REG, sw2 X)' 33110 Set the full 64-bit value of IACC0 to X. The REG argument is 33111 reserved for future expansion and must be 0. 33112 33113`void __IACCsetl (iacc REG, sw1 X)' 33114 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 33115 values of REG are rejected as invalid. 33116 33117`void __data_prefetch0 (const void *X)' 33118 Use the `dcpl' instruction to load the contents of address X into 33119 the data cache. 33120 33121`void __data_prefetch (const void *X)' 33122 Use the `nldub' instruction to load the contents of address X into 33123 the data cache. The instruction will be issued in slot I1. 33124 33125 33126File: gcc.info, Node: X86 Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: FR-V Built-in Functions, Up: Target Builtins 33127 331286.54.6 X86 Built-in Functions 33129----------------------------- 33130 33131These built-in functions are available for the i386 and x86-64 family 33132of computers, depending on the command-line switches used. 33133 33134 Note that, if you specify command-line switches such as `-msse', the 33135compiler could use the extended instruction sets even if the built-ins 33136are not used explicitly in the program. For this reason, applications 33137which perform runtime CPU detection must compile separate files for each 33138supported architecture, using the appropriate flags. In particular, 33139the file containing the CPU detection code should be compiled without 33140these options. 33141 33142 The following machine modes are available for use with MMX built-in 33143functions (*note Vector Extensions::): `V2SI' for a vector of two 3314432-bit integers, `V4HI' for a vector of four 16-bit integers, and 33145`V8QI' for a vector of eight 8-bit integers. Some of the built-in 33146functions operate on MMX registers as a whole 64-bit entity, these use 33147`V1DI' as their mode. 33148 33149 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector 33150of two 32-bit floating point values. 33151 33152 If SSE extensions are enabled, `V4SF' is used for a vector of four 3315332-bit floating point values. Some instructions use a vector of four 3315432-bit integers, these use `V4SI'. Finally, some instructions operate 33155on an entire vector register, interpreting it as a 128-bit integer, 33156these use mode `TI'. 33157 33158 In 64-bit mode, the x86-64 family of processors uses additional 33159built-in functions for efficient use of `TF' (`__float128') 128-bit 33160floating point and `TC' 128-bit complex floating point values. 33161 33162 The following floating point built-in functions are available in 64-bit 33163mode. All of them implement the function that is part of the name. 33164 33165 __float128 __builtin_fabsq (__float128) 33166 __float128 __builtin_copysignq (__float128, __float128) 33167 33168 The following floating point built-in functions are made available in 33169the 64-bit mode. 33170 33171`__float128 __builtin_infq (void)' 33172 Similar to `__builtin_inf', except the return type is `__float128'. 33173 33174`__float128 __builtin_huge_valq (void)' 33175 Similar to `__builtin_huge_val', except the return type is 33176 `__float128'. 33177 33178 The following built-in functions are made available by `-mmmx'. All 33179of them generate the machine instruction that is part of the name. 33180 33181 v8qi __builtin_ia32_paddb (v8qi, v8qi) 33182 v4hi __builtin_ia32_paddw (v4hi, v4hi) 33183 v2si __builtin_ia32_paddd (v2si, v2si) 33184 v8qi __builtin_ia32_psubb (v8qi, v8qi) 33185 v4hi __builtin_ia32_psubw (v4hi, v4hi) 33186 v2si __builtin_ia32_psubd (v2si, v2si) 33187 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 33188 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 33189 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 33190 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 33191 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 33192 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 33193 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 33194 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 33195 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 33196 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 33197 di __builtin_ia32_pand (di, di) 33198 di __builtin_ia32_pandn (di,di) 33199 di __builtin_ia32_por (di, di) 33200 di __builtin_ia32_pxor (di, di) 33201 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 33202 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 33203 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 33204 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 33205 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 33206 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 33207 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 33208 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 33209 v2si __builtin_ia32_punpckhdq (v2si, v2si) 33210 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 33211 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 33212 v2si __builtin_ia32_punpckldq (v2si, v2si) 33213 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 33214 v4hi __builtin_ia32_packssdw (v2si, v2si) 33215 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 33216 33217 v4hi __builtin_ia32_psllw (v4hi, v4hi) 33218 v2si __builtin_ia32_pslld (v2si, v2si) 33219 v1di __builtin_ia32_psllq (v1di, v1di) 33220 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 33221 v2si __builtin_ia32_psrld (v2si, v2si) 33222 v1di __builtin_ia32_psrlq (v1di, v1di) 33223 v4hi __builtin_ia32_psraw (v4hi, v4hi) 33224 v2si __builtin_ia32_psrad (v2si, v2si) 33225 v4hi __builtin_ia32_psllwi (v4hi, int) 33226 v2si __builtin_ia32_pslldi (v2si, int) 33227 v1di __builtin_ia32_psllqi (v1di, int) 33228 v4hi __builtin_ia32_psrlwi (v4hi, int) 33229 v2si __builtin_ia32_psrldi (v2si, int) 33230 v1di __builtin_ia32_psrlqi (v1di, int) 33231 v4hi __builtin_ia32_psrawi (v4hi, int) 33232 v2si __builtin_ia32_psradi (v2si, int) 33233 33234 The following built-in functions are made available either with 33235`-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 33236of them generate the machine instruction that is part of the name. 33237 33238 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 33239 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 33240 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 33241 v1di __builtin_ia32_psadbw (v8qi, v8qi) 33242 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 33243 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 33244 v8qi __builtin_ia32_pminub (v8qi, v8qi) 33245 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 33246 int __builtin_ia32_pextrw (v4hi, int) 33247 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 33248 int __builtin_ia32_pmovmskb (v8qi) 33249 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 33250 void __builtin_ia32_movntq (di *, di) 33251 void __builtin_ia32_sfence (void) 33252 33253 The following built-in functions are available when `-msse' is used. 33254All of them generate the machine instruction that is part of the name. 33255 33256 int __builtin_ia32_comieq (v4sf, v4sf) 33257 int __builtin_ia32_comineq (v4sf, v4sf) 33258 int __builtin_ia32_comilt (v4sf, v4sf) 33259 int __builtin_ia32_comile (v4sf, v4sf) 33260 int __builtin_ia32_comigt (v4sf, v4sf) 33261 int __builtin_ia32_comige (v4sf, v4sf) 33262 int __builtin_ia32_ucomieq (v4sf, v4sf) 33263 int __builtin_ia32_ucomineq (v4sf, v4sf) 33264 int __builtin_ia32_ucomilt (v4sf, v4sf) 33265 int __builtin_ia32_ucomile (v4sf, v4sf) 33266 int __builtin_ia32_ucomigt (v4sf, v4sf) 33267 int __builtin_ia32_ucomige (v4sf, v4sf) 33268 v4sf __builtin_ia32_addps (v4sf, v4sf) 33269 v4sf __builtin_ia32_subps (v4sf, v4sf) 33270 v4sf __builtin_ia32_mulps (v4sf, v4sf) 33271 v4sf __builtin_ia32_divps (v4sf, v4sf) 33272 v4sf __builtin_ia32_addss (v4sf, v4sf) 33273 v4sf __builtin_ia32_subss (v4sf, v4sf) 33274 v4sf __builtin_ia32_mulss (v4sf, v4sf) 33275 v4sf __builtin_ia32_divss (v4sf, v4sf) 33276 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 33277 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 33278 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 33279 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 33280 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 33281 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 33282 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 33283 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 33284 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 33285 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 33286 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 33287 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 33288 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 33289 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 33290 v4si __builtin_ia32_cmpless (v4sf, v4sf) 33291 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 33292 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 33293 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 33294 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 33295 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 33296 v4sf __builtin_ia32_maxps (v4sf, v4sf) 33297 v4sf __builtin_ia32_maxss (v4sf, v4sf) 33298 v4sf __builtin_ia32_minps (v4sf, v4sf) 33299 v4sf __builtin_ia32_minss (v4sf, v4sf) 33300 v4sf __builtin_ia32_andps (v4sf, v4sf) 33301 v4sf __builtin_ia32_andnps (v4sf, v4sf) 33302 v4sf __builtin_ia32_orps (v4sf, v4sf) 33303 v4sf __builtin_ia32_xorps (v4sf, v4sf) 33304 v4sf __builtin_ia32_movss (v4sf, v4sf) 33305 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 33306 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 33307 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 33308 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 33309 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 33310 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 33311 v2si __builtin_ia32_cvtps2pi (v4sf) 33312 int __builtin_ia32_cvtss2si (v4sf) 33313 v2si __builtin_ia32_cvttps2pi (v4sf) 33314 int __builtin_ia32_cvttss2si (v4sf) 33315 v4sf __builtin_ia32_rcpps (v4sf) 33316 v4sf __builtin_ia32_rsqrtps (v4sf) 33317 v4sf __builtin_ia32_sqrtps (v4sf) 33318 v4sf __builtin_ia32_rcpss (v4sf) 33319 v4sf __builtin_ia32_rsqrtss (v4sf) 33320 v4sf __builtin_ia32_sqrtss (v4sf) 33321 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 33322 void __builtin_ia32_movntps (float *, v4sf) 33323 int __builtin_ia32_movmskps (v4sf) 33324 33325 The following built-in functions are available when `-msse' is used. 33326 33327`v4sf __builtin_ia32_loadaps (float *)' 33328 Generates the `movaps' machine instruction as a load from memory. 33329 33330`void __builtin_ia32_storeaps (float *, v4sf)' 33331 Generates the `movaps' machine instruction as a store to memory. 33332 33333`v4sf __builtin_ia32_loadups (float *)' 33334 Generates the `movups' machine instruction as a load from memory. 33335 33336`void __builtin_ia32_storeups (float *, v4sf)' 33337 Generates the `movups' machine instruction as a store to memory. 33338 33339`v4sf __builtin_ia32_loadsss (float *)' 33340 Generates the `movss' machine instruction as a load from memory. 33341 33342`void __builtin_ia32_storess (float *, v4sf)' 33343 Generates the `movss' machine instruction as a store to memory. 33344 33345`v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 33346 Generates the `movhps' machine instruction as a load from memory. 33347 33348`v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 33349 Generates the `movlps' machine instruction as a load from memory 33350 33351`void __builtin_ia32_storehps (v2sf *, v4sf)' 33352 Generates the `movhps' machine instruction as a store to memory. 33353 33354`void __builtin_ia32_storelps (v2sf *, v4sf)' 33355 Generates the `movlps' machine instruction as a store to memory. 33356 33357 The following built-in functions are available when `-msse2' is used. 33358All of them generate the machine instruction that is part of the name. 33359 33360 int __builtin_ia32_comisdeq (v2df, v2df) 33361 int __builtin_ia32_comisdlt (v2df, v2df) 33362 int __builtin_ia32_comisdle (v2df, v2df) 33363 int __builtin_ia32_comisdgt (v2df, v2df) 33364 int __builtin_ia32_comisdge (v2df, v2df) 33365 int __builtin_ia32_comisdneq (v2df, v2df) 33366 int __builtin_ia32_ucomisdeq (v2df, v2df) 33367 int __builtin_ia32_ucomisdlt (v2df, v2df) 33368 int __builtin_ia32_ucomisdle (v2df, v2df) 33369 int __builtin_ia32_ucomisdgt (v2df, v2df) 33370 int __builtin_ia32_ucomisdge (v2df, v2df) 33371 int __builtin_ia32_ucomisdneq (v2df, v2df) 33372 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 33373 v2df __builtin_ia32_cmpltpd (v2df, v2df) 33374 v2df __builtin_ia32_cmplepd (v2df, v2df) 33375 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 33376 v2df __builtin_ia32_cmpgepd (v2df, v2df) 33377 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 33378 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 33379 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 33380 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 33381 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 33382 v2df __builtin_ia32_cmpngepd (v2df, v2df) 33383 v2df __builtin_ia32_cmpordpd (v2df, v2df) 33384 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 33385 v2df __builtin_ia32_cmpltsd (v2df, v2df) 33386 v2df __builtin_ia32_cmplesd (v2df, v2df) 33387 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 33388 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 33389 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 33390 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 33391 v2df __builtin_ia32_cmpordsd (v2df, v2df) 33392 v2di __builtin_ia32_paddq (v2di, v2di) 33393 v2di __builtin_ia32_psubq (v2di, v2di) 33394 v2df __builtin_ia32_addpd (v2df, v2df) 33395 v2df __builtin_ia32_subpd (v2df, v2df) 33396 v2df __builtin_ia32_mulpd (v2df, v2df) 33397 v2df __builtin_ia32_divpd (v2df, v2df) 33398 v2df __builtin_ia32_addsd (v2df, v2df) 33399 v2df __builtin_ia32_subsd (v2df, v2df) 33400 v2df __builtin_ia32_mulsd (v2df, v2df) 33401 v2df __builtin_ia32_divsd (v2df, v2df) 33402 v2df __builtin_ia32_minpd (v2df, v2df) 33403 v2df __builtin_ia32_maxpd (v2df, v2df) 33404 v2df __builtin_ia32_minsd (v2df, v2df) 33405 v2df __builtin_ia32_maxsd (v2df, v2df) 33406 v2df __builtin_ia32_andpd (v2df, v2df) 33407 v2df __builtin_ia32_andnpd (v2df, v2df) 33408 v2df __builtin_ia32_orpd (v2df, v2df) 33409 v2df __builtin_ia32_xorpd (v2df, v2df) 33410 v2df __builtin_ia32_movsd (v2df, v2df) 33411 v2df __builtin_ia32_unpckhpd (v2df, v2df) 33412 v2df __builtin_ia32_unpcklpd (v2df, v2df) 33413 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 33414 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 33415 v4si __builtin_ia32_paddd128 (v4si, v4si) 33416 v2di __builtin_ia32_paddq128 (v2di, v2di) 33417 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 33418 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 33419 v4si __builtin_ia32_psubd128 (v4si, v4si) 33420 v2di __builtin_ia32_psubq128 (v2di, v2di) 33421 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 33422 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 33423 v2di __builtin_ia32_pand128 (v2di, v2di) 33424 v2di __builtin_ia32_pandn128 (v2di, v2di) 33425 v2di __builtin_ia32_por128 (v2di, v2di) 33426 v2di __builtin_ia32_pxor128 (v2di, v2di) 33427 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 33428 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 33429 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 33430 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 33431 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 33432 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 33433 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 33434 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 33435 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 33436 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 33437 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 33438 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 33439 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 33440 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 33441 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 33442 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 33443 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 33444 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 33445 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 33446 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 33447 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 33448 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 33449 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 33450 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 33451 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 33452 v2df __builtin_ia32_loadupd (double *) 33453 void __builtin_ia32_storeupd (double *, v2df) 33454 v2df __builtin_ia32_loadhpd (v2df, double const *) 33455 v2df __builtin_ia32_loadlpd (v2df, double const *) 33456 int __builtin_ia32_movmskpd (v2df) 33457 int __builtin_ia32_pmovmskb128 (v16qi) 33458 void __builtin_ia32_movnti (int *, int) 33459 void __builtin_ia32_movntpd (double *, v2df) 33460 void __builtin_ia32_movntdq (v2df *, v2df) 33461 v4si __builtin_ia32_pshufd (v4si, int) 33462 v8hi __builtin_ia32_pshuflw (v8hi, int) 33463 v8hi __builtin_ia32_pshufhw (v8hi, int) 33464 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 33465 v2df __builtin_ia32_sqrtpd (v2df) 33466 v2df __builtin_ia32_sqrtsd (v2df) 33467 v2df __builtin_ia32_shufpd (v2df, v2df, int) 33468 v2df __builtin_ia32_cvtdq2pd (v4si) 33469 v4sf __builtin_ia32_cvtdq2ps (v4si) 33470 v4si __builtin_ia32_cvtpd2dq (v2df) 33471 v2si __builtin_ia32_cvtpd2pi (v2df) 33472 v4sf __builtin_ia32_cvtpd2ps (v2df) 33473 v4si __builtin_ia32_cvttpd2dq (v2df) 33474 v2si __builtin_ia32_cvttpd2pi (v2df) 33475 v2df __builtin_ia32_cvtpi2pd (v2si) 33476 int __builtin_ia32_cvtsd2si (v2df) 33477 int __builtin_ia32_cvttsd2si (v2df) 33478 long long __builtin_ia32_cvtsd2si64 (v2df) 33479 long long __builtin_ia32_cvttsd2si64 (v2df) 33480 v4si __builtin_ia32_cvtps2dq (v4sf) 33481 v2df __builtin_ia32_cvtps2pd (v4sf) 33482 v4si __builtin_ia32_cvttps2dq (v4sf) 33483 v2df __builtin_ia32_cvtsi2sd (v2df, int) 33484 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 33485 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 33486 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 33487 void __builtin_ia32_clflush (const void *) 33488 void __builtin_ia32_lfence (void) 33489 void __builtin_ia32_mfence (void) 33490 v16qi __builtin_ia32_loaddqu (const char *) 33491 void __builtin_ia32_storedqu (char *, v16qi) 33492 v1di __builtin_ia32_pmuludq (v2si, v2si) 33493 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 33494 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 33495 v4si __builtin_ia32_pslld128 (v4si, v4si) 33496 v2di __builtin_ia32_psllq128 (v2di, v2di) 33497 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 33498 v4si __builtin_ia32_psrld128 (v4si, v4si) 33499 v2di __builtin_ia32_psrlq128 (v2di, v2di) 33500 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 33501 v4si __builtin_ia32_psrad128 (v4si, v4si) 33502 v2di __builtin_ia32_pslldqi128 (v2di, int) 33503 v8hi __builtin_ia32_psllwi128 (v8hi, int) 33504 v4si __builtin_ia32_pslldi128 (v4si, int) 33505 v2di __builtin_ia32_psllqi128 (v2di, int) 33506 v2di __builtin_ia32_psrldqi128 (v2di, int) 33507 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 33508 v4si __builtin_ia32_psrldi128 (v4si, int) 33509 v2di __builtin_ia32_psrlqi128 (v2di, int) 33510 v8hi __builtin_ia32_psrawi128 (v8hi, int) 33511 v4si __builtin_ia32_psradi128 (v4si, int) 33512 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 33513 v2di __builtin_ia32_movq128 (v2di) 33514 33515 The following built-in functions are available when `-msse3' is used. 33516All of them generate the machine instruction that is part of the name. 33517 33518 v2df __builtin_ia32_addsubpd (v2df, v2df) 33519 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 33520 v2df __builtin_ia32_haddpd (v2df, v2df) 33521 v4sf __builtin_ia32_haddps (v4sf, v4sf) 33522 v2df __builtin_ia32_hsubpd (v2df, v2df) 33523 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 33524 v16qi __builtin_ia32_lddqu (char const *) 33525 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 33526 v2df __builtin_ia32_movddup (v2df) 33527 v4sf __builtin_ia32_movshdup (v4sf) 33528 v4sf __builtin_ia32_movsldup (v4sf) 33529 void __builtin_ia32_mwait (unsigned int, unsigned int) 33530 33531 The following built-in functions are available when `-msse3' is used. 33532 33533`v2df __builtin_ia32_loadddup (double const *)' 33534 Generates the `movddup' machine instruction as a load from memory. 33535 33536 The following built-in functions are available when `-mssse3' is used. 33537All of them generate the machine instruction that is part of the name 33538with MMX registers. 33539 33540 v2si __builtin_ia32_phaddd (v2si, v2si) 33541 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 33542 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 33543 v2si __builtin_ia32_phsubd (v2si, v2si) 33544 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 33545 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 33546 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 33547 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 33548 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 33549 v8qi __builtin_ia32_psignb (v8qi, v8qi) 33550 v2si __builtin_ia32_psignd (v2si, v2si) 33551 v4hi __builtin_ia32_psignw (v4hi, v4hi) 33552 v1di __builtin_ia32_palignr (v1di, v1di, int) 33553 v8qi __builtin_ia32_pabsb (v8qi) 33554 v2si __builtin_ia32_pabsd (v2si) 33555 v4hi __builtin_ia32_pabsw (v4hi) 33556 33557 The following built-in functions are available when `-mssse3' is used. 33558All of them generate the machine instruction that is part of the name 33559with SSE registers. 33560 33561 v4si __builtin_ia32_phaddd128 (v4si, v4si) 33562 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 33563 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 33564 v4si __builtin_ia32_phsubd128 (v4si, v4si) 33565 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 33566 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 33567 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 33568 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 33569 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 33570 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 33571 v4si __builtin_ia32_psignd128 (v4si, v4si) 33572 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 33573 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 33574 v16qi __builtin_ia32_pabsb128 (v16qi) 33575 v4si __builtin_ia32_pabsd128 (v4si) 33576 v8hi __builtin_ia32_pabsw128 (v8hi) 33577 33578 The following built-in functions are available when `-msse4.1' is 33579used. All of them generate the machine instruction that is part of the 33580name. 33581 33582 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 33583 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 33584 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 33585 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 33586 v2df __builtin_ia32_dppd (v2df, v2df, const int) 33587 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 33588 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 33589 v2di __builtin_ia32_movntdqa (v2di *); 33590 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 33591 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 33592 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 33593 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 33594 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 33595 v8hi __builtin_ia32_phminposuw128 (v8hi) 33596 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 33597 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 33598 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 33599 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 33600 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 33601 v4si __builtin_ia32_pminsd128 (v4si, v4si) 33602 v4si __builtin_ia32_pminud128 (v4si, v4si) 33603 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 33604 v4si __builtin_ia32_pmovsxbd128 (v16qi) 33605 v2di __builtin_ia32_pmovsxbq128 (v16qi) 33606 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 33607 v2di __builtin_ia32_pmovsxdq128 (v4si) 33608 v4si __builtin_ia32_pmovsxwd128 (v8hi) 33609 v2di __builtin_ia32_pmovsxwq128 (v8hi) 33610 v4si __builtin_ia32_pmovzxbd128 (v16qi) 33611 v2di __builtin_ia32_pmovzxbq128 (v16qi) 33612 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 33613 v2di __builtin_ia32_pmovzxdq128 (v4si) 33614 v4si __builtin_ia32_pmovzxwd128 (v8hi) 33615 v2di __builtin_ia32_pmovzxwq128 (v8hi) 33616 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 33617 v4si __builtin_ia32_pmulld128 (v4si, v4si) 33618 int __builtin_ia32_ptestc128 (v2di, v2di) 33619 int __builtin_ia32_ptestnzc128 (v2di, v2di) 33620 int __builtin_ia32_ptestz128 (v2di, v2di) 33621 v2df __builtin_ia32_roundpd (v2df, const int) 33622 v4sf __builtin_ia32_roundps (v4sf, const int) 33623 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 33624 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 33625 33626 The following built-in functions are available when `-msse4.1' is used. 33627 33628`v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 33629 Generates the `insertps' machine instruction. 33630 33631`int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 33632 Generates the `pextrb' machine instruction. 33633 33634`v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 33635 Generates the `pinsrb' machine instruction. 33636 33637`v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 33638 Generates the `pinsrd' machine instruction. 33639 33640`v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 33641 Generates the `pinsrq' machine instruction in 64bit mode. 33642 33643 The following built-in functions are changed to generate new SSE4.1 33644instructions when `-msse4.1' is used. 33645 33646`float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 33647 Generates the `extractps' machine instruction. 33648 33649`int __builtin_ia32_vec_ext_v4si (v4si, const int)' 33650 Generates the `pextrd' machine instruction. 33651 33652`long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 33653 Generates the `pextrq' machine instruction in 64bit mode. 33654 33655 The following built-in functions are available when `-msse4.2' is 33656used. All of them generate the machine instruction that is part of the 33657name. 33658 33659 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 33660 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 33661 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 33662 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 33663 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 33664 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 33665 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 33666 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 33667 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 33668 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 33669 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 33670 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 33671 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 33672 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 33673 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 33674 33675 The following built-in functions are available when `-msse4.2' is used. 33676 33677`unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 33678 Generates the `crc32b' machine instruction. 33679 33680`unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 33681 Generates the `crc32w' machine instruction. 33682 33683`unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 33684 Generates the `crc32l' machine instruction. 33685 33686`unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 33687 Generates the `crc32q' machine instruction. 33688 33689 The following built-in functions are changed to generate new SSE4.2 33690instructions when `-msse4.2' is used. 33691 33692`int __builtin_popcount (unsigned int)' 33693 Generates the `popcntl' machine instruction. 33694 33695`int __builtin_popcountl (unsigned long)' 33696 Generates the `popcntl' or `popcntq' machine instruction, 33697 depending on the size of `unsigned long'. 33698 33699`int __builtin_popcountll (unsigned long long)' 33700 Generates the `popcntq' machine instruction. 33701 33702 The following built-in functions are available when `-mavx' is used. 33703All of them generate the machine instruction that is part of the name. 33704 33705 v4df __builtin_ia32_addpd256 (v4df,v4df) 33706 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 33707 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 33708 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 33709 v4df __builtin_ia32_andnpd256 (v4df,v4df) 33710 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 33711 v4df __builtin_ia32_andpd256 (v4df,v4df) 33712 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 33713 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 33714 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 33715 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 33716 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 33717 v2df __builtin_ia32_cmppd (v2df,v2df,int) 33718 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 33719 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 33720 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 33721 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 33722 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 33723 v4df __builtin_ia32_cvtdq2pd256 (v4si) 33724 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 33725 v4si __builtin_ia32_cvtpd2dq256 (v4df) 33726 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 33727 v8si __builtin_ia32_cvtps2dq256 (v8sf) 33728 v4df __builtin_ia32_cvtps2pd256 (v4sf) 33729 v4si __builtin_ia32_cvttpd2dq256 (v4df) 33730 v8si __builtin_ia32_cvttps2dq256 (v8sf) 33731 v4df __builtin_ia32_divpd256 (v4df,v4df) 33732 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 33733 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 33734 v4df __builtin_ia32_haddpd256 (v4df,v4df) 33735 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 33736 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 33737 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 33738 v32qi __builtin_ia32_lddqu256 (pcchar) 33739 v32qi __builtin_ia32_loaddqu256 (pcchar) 33740 v4df __builtin_ia32_loadupd256 (pcdouble) 33741 v8sf __builtin_ia32_loadups256 (pcfloat) 33742 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 33743 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 33744 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 33745 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 33746 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 33747 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 33748 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 33749 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 33750 v4df __builtin_ia32_maxpd256 (v4df,v4df) 33751 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 33752 v4df __builtin_ia32_minpd256 (v4df,v4df) 33753 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 33754 v4df __builtin_ia32_movddup256 (v4df) 33755 int __builtin_ia32_movmskpd256 (v4df) 33756 int __builtin_ia32_movmskps256 (v8sf) 33757 v8sf __builtin_ia32_movshdup256 (v8sf) 33758 v8sf __builtin_ia32_movsldup256 (v8sf) 33759 v4df __builtin_ia32_mulpd256 (v4df,v4df) 33760 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 33761 v4df __builtin_ia32_orpd256 (v4df,v4df) 33762 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 33763 v2df __builtin_ia32_pd_pd256 (v4df) 33764 v4df __builtin_ia32_pd256_pd (v2df) 33765 v4sf __builtin_ia32_ps_ps256 (v8sf) 33766 v8sf __builtin_ia32_ps256_ps (v4sf) 33767 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 33768 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 33769 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 33770 v8sf __builtin_ia32_rcpps256 (v8sf) 33771 v4df __builtin_ia32_roundpd256 (v4df,int) 33772 v8sf __builtin_ia32_roundps256 (v8sf,int) 33773 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 33774 v8sf __builtin_ia32_rsqrtps256 (v8sf) 33775 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 33776 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 33777 v4si __builtin_ia32_si_si256 (v8si) 33778 v8si __builtin_ia32_si256_si (v4si) 33779 v4df __builtin_ia32_sqrtpd256 (v4df) 33780 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 33781 v8sf __builtin_ia32_sqrtps256 (v8sf) 33782 void __builtin_ia32_storedqu256 (pchar,v32qi) 33783 void __builtin_ia32_storeupd256 (pdouble,v4df) 33784 void __builtin_ia32_storeups256 (pfloat,v8sf) 33785 v4df __builtin_ia32_subpd256 (v4df,v4df) 33786 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 33787 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 33788 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 33789 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 33790 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 33791 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 33792 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 33793 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 33794 v4sf __builtin_ia32_vbroadcastss (pcfloat) 33795 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 33796 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 33797 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 33798 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 33799 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 33800 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 33801 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 33802 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 33803 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 33804 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 33805 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 33806 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 33807 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 33808 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 33809 v2df __builtin_ia32_vpermilpd (v2df,int) 33810 v4df __builtin_ia32_vpermilpd256 (v4df,int) 33811 v4sf __builtin_ia32_vpermilps (v4sf,int) 33812 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 33813 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 33814 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 33815 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 33816 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 33817 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 33818 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 33819 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 33820 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 33821 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 33822 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 33823 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 33824 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 33825 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 33826 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 33827 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 33828 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 33829 void __builtin_ia32_vzeroall (void) 33830 void __builtin_ia32_vzeroupper (void) 33831 v4df __builtin_ia32_xorpd256 (v4df,v4df) 33832 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 33833 33834 The following built-in functions are available when `-maes' is used. 33835All of them generate the machine instruction that is part of the name. 33836 33837 v2di __builtin_ia32_aesenc128 (v2di, v2di) 33838 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 33839 v2di __builtin_ia32_aesdec128 (v2di, v2di) 33840 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 33841 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 33842 v2di __builtin_ia32_aesimc128 (v2di) 33843 33844 The following built-in function is available when `-mpclmul' is used. 33845 33846`v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 33847 Generates the `pclmulqdq' machine instruction. 33848 33849 The following built-in function is available when `-mfsgsbase' is 33850used. All of them generate the machine instruction that is part of the 33851name. 33852 33853 unsigned int __builtin_ia32_rdfsbase32 (void) 33854 unsigned long long __builtin_ia32_rdfsbase64 (void) 33855 unsigned int __builtin_ia32_rdgsbase32 (void) 33856 unsigned long long __builtin_ia32_rdgsbase64 (void) 33857 void _writefsbase_u32 (unsigned int) 33858 void _writefsbase_u64 (unsigned long long) 33859 void _writegsbase_u32 (unsigned int) 33860 void _writegsbase_u64 (unsigned long long) 33861 33862 The following built-in function is available when `-mrdrnd' is used. 33863All of them generate the machine instruction that is part of the name. 33864 33865 unsigned int __builtin_ia32_rdrand16_step (unsigned short *) 33866 unsigned int __builtin_ia32_rdrand32_step (unsigned int *) 33867 unsigned int __builtin_ia32_rdrand64_step (unsigned long long *) 33868 33869 The following built-in functions are available when `-msse4a' is used. 33870All of them generate the machine instruction that is part of the name. 33871 33872 void __builtin_ia32_movntsd (double *, v2df) 33873 void __builtin_ia32_movntss (float *, v4sf) 33874 v2di __builtin_ia32_extrq (v2di, v16qi) 33875 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 33876 v2di __builtin_ia32_insertq (v2di, v2di) 33877 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 33878 33879 The following built-in functions are available when `-mxop' is used. 33880 v2df __builtin_ia32_vfrczpd (v2df) 33881 v4sf __builtin_ia32_vfrczps (v4sf) 33882 v2df __builtin_ia32_vfrczsd (v2df, v2df) 33883 v4sf __builtin_ia32_vfrczss (v4sf, v4sf) 33884 v4df __builtin_ia32_vfrczpd256 (v4df) 33885 v8sf __builtin_ia32_vfrczps256 (v8sf) 33886 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di) 33887 v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di) 33888 v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si) 33889 v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi) 33890 v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi) 33891 v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df) 33892 v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf) 33893 v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di) 33894 v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si) 33895 v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi) 33896 v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi) 33897 v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df) 33898 v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf) 33899 v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi) 33900 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 33901 v4si __builtin_ia32_vpcomeqd (v4si, v4si) 33902 v2di __builtin_ia32_vpcomeqq (v2di, v2di) 33903 v16qi __builtin_ia32_vpcomequb (v16qi, v16qi) 33904 v4si __builtin_ia32_vpcomequd (v4si, v4si) 33905 v2di __builtin_ia32_vpcomequq (v2di, v2di) 33906 v8hi __builtin_ia32_vpcomequw (v8hi, v8hi) 33907 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 33908 v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi) 33909 v4si __builtin_ia32_vpcomfalsed (v4si, v4si) 33910 v2di __builtin_ia32_vpcomfalseq (v2di, v2di) 33911 v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi) 33912 v4si __builtin_ia32_vpcomfalseud (v4si, v4si) 33913 v2di __builtin_ia32_vpcomfalseuq (v2di, v2di) 33914 v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi) 33915 v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi) 33916 v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi) 33917 v4si __builtin_ia32_vpcomged (v4si, v4si) 33918 v2di __builtin_ia32_vpcomgeq (v2di, v2di) 33919 v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi) 33920 v4si __builtin_ia32_vpcomgeud (v4si, v4si) 33921 v2di __builtin_ia32_vpcomgeuq (v2di, v2di) 33922 v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi) 33923 v8hi __builtin_ia32_vpcomgew (v8hi, v8hi) 33924 v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi) 33925 v4si __builtin_ia32_vpcomgtd (v4si, v4si) 33926 v2di __builtin_ia32_vpcomgtq (v2di, v2di) 33927 v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi) 33928 v4si __builtin_ia32_vpcomgtud (v4si, v4si) 33929 v2di __builtin_ia32_vpcomgtuq (v2di, v2di) 33930 v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi) 33931 v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi) 33932 v16qi __builtin_ia32_vpcomleb (v16qi, v16qi) 33933 v4si __builtin_ia32_vpcomled (v4si, v4si) 33934 v2di __builtin_ia32_vpcomleq (v2di, v2di) 33935 v16qi __builtin_ia32_vpcomleub (v16qi, v16qi) 33936 v4si __builtin_ia32_vpcomleud (v4si, v4si) 33937 v2di __builtin_ia32_vpcomleuq (v2di, v2di) 33938 v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi) 33939 v8hi __builtin_ia32_vpcomlew (v8hi, v8hi) 33940 v16qi __builtin_ia32_vpcomltb (v16qi, v16qi) 33941 v4si __builtin_ia32_vpcomltd (v4si, v4si) 33942 v2di __builtin_ia32_vpcomltq (v2di, v2di) 33943 v16qi __builtin_ia32_vpcomltub (v16qi, v16qi) 33944 v4si __builtin_ia32_vpcomltud (v4si, v4si) 33945 v2di __builtin_ia32_vpcomltuq (v2di, v2di) 33946 v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi) 33947 v8hi __builtin_ia32_vpcomltw (v8hi, v8hi) 33948 v16qi __builtin_ia32_vpcomneb (v16qi, v16qi) 33949 v4si __builtin_ia32_vpcomned (v4si, v4si) 33950 v2di __builtin_ia32_vpcomneq (v2di, v2di) 33951 v16qi __builtin_ia32_vpcomneub (v16qi, v16qi) 33952 v4si __builtin_ia32_vpcomneud (v4si, v4si) 33953 v2di __builtin_ia32_vpcomneuq (v2di, v2di) 33954 v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi) 33955 v8hi __builtin_ia32_vpcomnew (v8hi, v8hi) 33956 v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi) 33957 v4si __builtin_ia32_vpcomtrued (v4si, v4si) 33958 v2di __builtin_ia32_vpcomtrueq (v2di, v2di) 33959 v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi) 33960 v4si __builtin_ia32_vpcomtrueud (v4si, v4si) 33961 v2di __builtin_ia32_vpcomtrueuq (v2di, v2di) 33962 v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi) 33963 v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi) 33964 v4si __builtin_ia32_vphaddbd (v16qi) 33965 v2di __builtin_ia32_vphaddbq (v16qi) 33966 v8hi __builtin_ia32_vphaddbw (v16qi) 33967 v2di __builtin_ia32_vphadddq (v4si) 33968 v4si __builtin_ia32_vphaddubd (v16qi) 33969 v2di __builtin_ia32_vphaddubq (v16qi) 33970 v8hi __builtin_ia32_vphaddubw (v16qi) 33971 v2di __builtin_ia32_vphaddudq (v4si) 33972 v4si __builtin_ia32_vphadduwd (v8hi) 33973 v2di __builtin_ia32_vphadduwq (v8hi) 33974 v4si __builtin_ia32_vphaddwd (v8hi) 33975 v2di __builtin_ia32_vphaddwq (v8hi) 33976 v8hi __builtin_ia32_vphsubbw (v16qi) 33977 v2di __builtin_ia32_vphsubdq (v4si) 33978 v4si __builtin_ia32_vphsubwd (v8hi) 33979 v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si) 33980 v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di) 33981 v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di) 33982 v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si) 33983 v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di) 33984 v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di) 33985 v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si) 33986 v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi) 33987 v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si) 33988 v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi) 33989 v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si) 33990 v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si) 33991 v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi) 33992 v16qi __builtin_ia32_vprotb (v16qi, v16qi) 33993 v4si __builtin_ia32_vprotd (v4si, v4si) 33994 v2di __builtin_ia32_vprotq (v2di, v2di) 33995 v8hi __builtin_ia32_vprotw (v8hi, v8hi) 33996 v16qi __builtin_ia32_vpshab (v16qi, v16qi) 33997 v4si __builtin_ia32_vpshad (v4si, v4si) 33998 v2di __builtin_ia32_vpshaq (v2di, v2di) 33999 v8hi __builtin_ia32_vpshaw (v8hi, v8hi) 34000 v16qi __builtin_ia32_vpshlb (v16qi, v16qi) 34001 v4si __builtin_ia32_vpshld (v4si, v4si) 34002 v2di __builtin_ia32_vpshlq (v2di, v2di) 34003 v8hi __builtin_ia32_vpshlw (v8hi, v8hi) 34004 34005 The following built-in functions are available when `-mfma4' is used. 34006All of them generate the machine instruction that is part of the name 34007with MMX registers. 34008 34009 v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df) 34010 v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf) 34011 v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df) 34012 v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf) 34013 v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df) 34014 v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf) 34015 v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df) 34016 v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf) 34017 v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df) 34018 v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf) 34019 v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df) 34020 v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf) 34021 v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df) 34022 v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf) 34023 v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df) 34024 v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf) 34025 v2df __builtin_ia32_fmaddsubpd (v2df, v2df, v2df) 34026 v4sf __builtin_ia32_fmaddsubps (v4sf, v4sf, v4sf) 34027 v2df __builtin_ia32_fmsubaddpd (v2df, v2df, v2df) 34028 v4sf __builtin_ia32_fmsubaddps (v4sf, v4sf, v4sf) 34029 v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df) 34030 v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf) 34031 v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df) 34032 v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf) 34033 v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df) 34034 v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf) 34035 v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df) 34036 v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf) 34037 v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df) 34038 v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf) 34039 v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df) 34040 v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf) 34041 34042 The following built-in functions are available when `-mlwp' is used. 34043 34044 void __builtin_ia32_llwpcb16 (void *); 34045 void __builtin_ia32_llwpcb32 (void *); 34046 void __builtin_ia32_llwpcb64 (void *); 34047 void * __builtin_ia32_llwpcb16 (void); 34048 void * __builtin_ia32_llwpcb32 (void); 34049 void * __builtin_ia32_llwpcb64 (void); 34050 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) 34051 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) 34052 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) 34053 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) 34054 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) 34055 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) 34056 34057 The following built-in functions are available when `-mbmi' is used. 34058All of them generate the machine instruction that is part of the name. 34059 unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int); 34060 unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long); 34061 unsigned short __builtin_ia32_lzcnt_16(unsigned short); 34062 unsigned int __builtin_ia32_lzcnt_u32(unsigned int); 34063 unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long); 34064 34065 The following built-in functions are available when `-mtbm' is used. 34066Both of them generate the immediate form of the bextr machine 34067instruction. 34068 unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int); 34069 unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long); 34070 34071 The following built-in functions are available when `-m3dnow' is used. 34072All of them generate the machine instruction that is part of the name. 34073 34074 void __builtin_ia32_femms (void) 34075 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 34076 v2si __builtin_ia32_pf2id (v2sf) 34077 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 34078 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 34079 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 34080 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 34081 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 34082 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 34083 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 34084 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 34085 v2sf __builtin_ia32_pfrcp (v2sf) 34086 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 34087 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 34088 v2sf __builtin_ia32_pfrsqrt (v2sf) 34089 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 34090 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 34091 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 34092 v2sf __builtin_ia32_pi2fd (v2si) 34093 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 34094 34095 The following built-in functions are available when both `-m3dnow' and 34096`-march=athlon' are used. All of them generate the machine instruction 34097that is part of the name. 34098 34099 v2si __builtin_ia32_pf2iw (v2sf) 34100 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 34101 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 34102 v2sf __builtin_ia32_pi2fw (v2si) 34103 v2sf __builtin_ia32_pswapdsf (v2sf) 34104 v2si __builtin_ia32_pswapdsi (v2si) 34105 34106 34107File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 Built-in Functions, Up: Target Builtins 34108 341096.54.7 MIPS DSP Built-in Functions 34110---------------------------------- 34111 34112The MIPS DSP Application-Specific Extension (ASE) includes new 34113instructions that are designed to improve the performance of DSP and 34114media applications. It provides instructions that operate on packed 341158-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 34116 34117 GCC supports MIPS DSP operations using both the generic vector 34118extensions (*note Vector Extensions::) and a collection of 34119MIPS-specific built-in functions. Both kinds of support are enabled by 34120the `-mdsp' command-line option. 34121 34122 Revision 2 of the ASE was introduced in the second half of 2006. This 34123revision adds extra instructions to the original ASE, but is otherwise 34124backwards-compatible with it. You can select revision 2 using the 34125command-line option `-mdspr2'; this option implies `-mdsp'. 34126 34127 The SCOUNT and POS bits of the DSP control register are global. The 34128WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and 34129POS bits. During optimization, the compiler will not delete these 34130instructions and it will not delete calls to functions containing these 34131instructions. 34132 34133 At present, GCC only provides support for operations on 32-bit 34134vectors. The vector type associated with 8-bit integer data is usually 34135called `v4i8', the vector type associated with Q7 is usually called 34136`v4q7', the vector type associated with 16-bit integer data is usually 34137called `v2i16', and the vector type associated with Q15 is usually 34138called `v2q15'. They can be defined in C as follows: 34139 34140 typedef signed char v4i8 __attribute__ ((vector_size(4))); 34141 typedef signed char v4q7 __attribute__ ((vector_size(4))); 34142 typedef short v2i16 __attribute__ ((vector_size(4))); 34143 typedef short v2q15 __attribute__ ((vector_size(4))); 34144 34145 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same 34146way as aggregates. For example: 34147 34148 v4i8 a = {1, 2, 3, 4}; 34149 v4i8 b; 34150 b = (v4i8) {5, 6, 7, 8}; 34151 34152 v2q15 c = {0x0fcb, 0x3a75}; 34153 v2q15 d; 34154 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 34155 34156 _Note:_ The CPU's endianness determines the order in which values are 34157packed. On little-endian targets, the first value is the least 34158significant and the last value is the most significant. The opposite 34159order applies to big-endian targets. For example, the code above will 34160set the lowest byte of `a' to `1' on little-endian targets and `4' on 34161big-endian targets. 34162 34163 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 34164representation. As shown in this example, the integer representation 34165of a Q7 value can be obtained by multiplying the fractional value by 34166`0x1.0p7'. The equivalent for Q15 values is to multiply by `0x1.0p15'. 34167The equivalent for Q31 values is to multiply by `0x1.0p31'. 34168 34169 The table below lists the `v4i8' and `v2q15' operations for which 34170hardware support exists. `a' and `b' are `v4i8' values, and `c' and 34171`d' are `v2q15' values. 34172 34173C code MIPS instruction 34174`a + b' `addu.qb' 34175`c + d' `addq.ph' 34176`a - b' `subu.qb' 34177`c - d' `subq.ph' 34178 34179 The table below lists the `v2i16' operation for which hardware support 34180exists for the DSP ASE REV 2. `e' and `f' are `v2i16' values. 34181 34182C code MIPS instruction 34183`e * f' `mul.ph' 34184 34185 It is easier to describe the DSP built-in functions if we first define 34186the following types: 34187 34188 typedef int q31; 34189 typedef int i32; 34190 typedef unsigned int ui32; 34191 typedef long long a64; 34192 34193 `q31' and `i32' are actually the same as `int', but we use `q31' to 34194indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 34195value. Similarly, `a64' is the same as `long long', but we use `a64' 34196to indicate values that will be placed in one of the four DSP 34197accumulators (`$ac0', `$ac1', `$ac2' or `$ac3'). 34198 34199 Also, some built-in functions prefer or require immediate numbers as 34200parameters, because the corresponding DSP instructions accept both 34201immediate numbers and register operands, or accept immediate numbers 34202only. The immediate parameters are listed as follows. 34203 34204 imm0_3: 0 to 3. 34205 imm0_7: 0 to 7. 34206 imm0_15: 0 to 15. 34207 imm0_31: 0 to 31. 34208 imm0_63: 0 to 63. 34209 imm0_255: 0 to 255. 34210 imm_n32_31: -32 to 31. 34211 imm_n512_511: -512 to 511. 34212 34213 The following built-in functions map directly to a particular MIPS DSP 34214instruction. Please refer to the architecture specification for 34215details on what each instruction does. 34216 34217 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 34218 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 34219 q31 __builtin_mips_addq_s_w (q31, q31) 34220 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 34221 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 34222 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 34223 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 34224 q31 __builtin_mips_subq_s_w (q31, q31) 34225 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 34226 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 34227 i32 __builtin_mips_addsc (i32, i32) 34228 i32 __builtin_mips_addwc (i32, i32) 34229 i32 __builtin_mips_modsub (i32, i32) 34230 i32 __builtin_mips_raddu_w_qb (v4i8) 34231 v2q15 __builtin_mips_absq_s_ph (v2q15) 34232 q31 __builtin_mips_absq_s_w (q31) 34233 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 34234 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 34235 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 34236 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 34237 q31 __builtin_mips_preceq_w_phl (v2q15) 34238 q31 __builtin_mips_preceq_w_phr (v2q15) 34239 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 34240 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 34241 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 34242 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 34243 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 34244 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 34245 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 34246 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 34247 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 34248 v4i8 __builtin_mips_shll_qb (v4i8, i32) 34249 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 34250 v2q15 __builtin_mips_shll_ph (v2q15, i32) 34251 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 34252 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 34253 q31 __builtin_mips_shll_s_w (q31, imm0_31) 34254 q31 __builtin_mips_shll_s_w (q31, i32) 34255 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 34256 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 34257 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 34258 v2q15 __builtin_mips_shra_ph (v2q15, i32) 34259 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 34260 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 34261 q31 __builtin_mips_shra_r_w (q31, imm0_31) 34262 q31 __builtin_mips_shra_r_w (q31, i32) 34263 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 34264 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 34265 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 34266 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 34267 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 34268 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 34269 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 34270 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 34271 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 34272 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 34273 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 34274 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 34275 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 34276 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 34277 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 34278 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 34279 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 34280 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 34281 i32 __builtin_mips_bitrev (i32) 34282 i32 __builtin_mips_insv (i32, i32) 34283 v4i8 __builtin_mips_repl_qb (imm0_255) 34284 v4i8 __builtin_mips_repl_qb (i32) 34285 v2q15 __builtin_mips_repl_ph (imm_n512_511) 34286 v2q15 __builtin_mips_repl_ph (i32) 34287 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 34288 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 34289 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 34290 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 34291 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 34292 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 34293 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 34294 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 34295 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 34296 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 34297 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 34298 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 34299 i32 __builtin_mips_extr_w (a64, imm0_31) 34300 i32 __builtin_mips_extr_w (a64, i32) 34301 i32 __builtin_mips_extr_r_w (a64, imm0_31) 34302 i32 __builtin_mips_extr_s_h (a64, i32) 34303 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 34304 i32 __builtin_mips_extr_rs_w (a64, i32) 34305 i32 __builtin_mips_extr_s_h (a64, imm0_31) 34306 i32 __builtin_mips_extr_r_w (a64, i32) 34307 i32 __builtin_mips_extp (a64, imm0_31) 34308 i32 __builtin_mips_extp (a64, i32) 34309 i32 __builtin_mips_extpdp (a64, imm0_31) 34310 i32 __builtin_mips_extpdp (a64, i32) 34311 a64 __builtin_mips_shilo (a64, imm_n32_31) 34312 a64 __builtin_mips_shilo (a64, i32) 34313 a64 __builtin_mips_mthlip (a64, i32) 34314 void __builtin_mips_wrdsp (i32, imm0_63) 34315 i32 __builtin_mips_rddsp (imm0_63) 34316 i32 __builtin_mips_lbux (void *, i32) 34317 i32 __builtin_mips_lhx (void *, i32) 34318 i32 __builtin_mips_lwx (void *, i32) 34319 i32 __builtin_mips_bposge32 (void) 34320 a64 __builtin_mips_madd (a64, i32, i32); 34321 a64 __builtin_mips_maddu (a64, ui32, ui32); 34322 a64 __builtin_mips_msub (a64, i32, i32); 34323 a64 __builtin_mips_msubu (a64, ui32, ui32); 34324 a64 __builtin_mips_mult (i32, i32); 34325 a64 __builtin_mips_multu (ui32, ui32); 34326 34327 The following built-in functions map directly to a particular MIPS DSP 34328REV 2 instruction. Please refer to the architecture specification for 34329details on what each instruction does. 34330 34331 v4q7 __builtin_mips_absq_s_qb (v4q7); 34332 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 34333 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 34334 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 34335 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 34336 i32 __builtin_mips_append (i32, i32, imm0_31); 34337 i32 __builtin_mips_balign (i32, i32, imm0_3); 34338 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 34339 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 34340 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 34341 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 34342 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 34343 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 34344 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 34345 q31 __builtin_mips_mulq_rs_w (q31, q31); 34346 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 34347 q31 __builtin_mips_mulq_s_w (q31, q31); 34348 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 34349 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 34350 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 34351 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 34352 i32 __builtin_mips_prepend (i32, i32, imm0_31); 34353 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 34354 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 34355 v4i8 __builtin_mips_shra_qb (v4i8, i32); 34356 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 34357 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 34358 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 34359 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 34360 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 34361 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 34362 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 34363 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 34364 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 34365 q31 __builtin_mips_addqh_w (q31, q31); 34366 q31 __builtin_mips_addqh_r_w (q31, q31); 34367 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 34368 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 34369 q31 __builtin_mips_subqh_w (q31, q31); 34370 q31 __builtin_mips_subqh_r_w (q31, q31); 34371 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 34372 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 34373 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 34374 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 34375 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 34376 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 34377 34378 34379File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 34380 343816.54.8 MIPS Paired-Single Support 34382--------------------------------- 34383 34384The MIPS64 architecture includes a number of instructions that operate 34385on pairs of single-precision floating-point values. Each pair is 34386packed into a 64-bit floating-point register, with one element being 34387designated the "upper half" and the other being designated the "lower 34388half". 34389 34390 GCC supports paired-single operations using both the generic vector 34391extensions (*note Vector Extensions::) and a collection of 34392MIPS-specific built-in functions. Both kinds of support are enabled by 34393the `-mpaired-single' command-line option. 34394 34395 The vector type associated with paired-single values is usually called 34396`v2sf'. It can be defined in C as follows: 34397 34398 typedef float v2sf __attribute__ ((vector_size (8))); 34399 34400 `v2sf' values are initialized in the same way as aggregates. For 34401example: 34402 34403 v2sf a = {1.5, 9.1}; 34404 v2sf b; 34405 float e, f; 34406 b = (v2sf) {e, f}; 34407 34408 _Note:_ The CPU's endianness determines which value is stored in the 34409upper half of a register and which value is stored in the lower half. 34410On little-endian targets, the first value is the lower one and the 34411second value is the upper one. The opposite order applies to 34412big-endian targets. For example, the code above will set the lower 34413half of `a' to `1.5' on little-endian targets and `9.1' on big-endian 34414targets. 34415 34416 34417File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 34418 344196.54.9 MIPS Loongson Built-in Functions 34420--------------------------------------- 34421 34422GCC provides intrinsics to access the SIMD instructions provided by the 34423ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 34424available after inclusion of the `loongson.h' header file, operate on 34425the following 64-bit vector types: 34426 34427 * `uint8x8_t', a vector of eight unsigned 8-bit integers; 34428 34429 * `uint16x4_t', a vector of four unsigned 16-bit integers; 34430 34431 * `uint32x2_t', a vector of two unsigned 32-bit integers; 34432 34433 * `int8x8_t', a vector of eight signed 8-bit integers; 34434 34435 * `int16x4_t', a vector of four signed 16-bit integers; 34436 34437 * `int32x2_t', a vector of two signed 32-bit integers. 34438 34439 The intrinsics provided are listed below; each is named after the 34440machine instruction to which it corresponds, with suffixes added as 34441appropriate to distinguish intrinsics that expand to the same machine 34442instruction yet have different argument types. Refer to the 34443architecture documentation for a description of the functionality of 34444each instruction. 34445 34446 int16x4_t packsswh (int32x2_t s, int32x2_t t); 34447 int8x8_t packsshb (int16x4_t s, int16x4_t t); 34448 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 34449 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 34450 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 34451 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 34452 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 34453 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 34454 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 34455 uint64_t paddd_u (uint64_t s, uint64_t t); 34456 int64_t paddd_s (int64_t s, int64_t t); 34457 int16x4_t paddsh (int16x4_t s, int16x4_t t); 34458 int8x8_t paddsb (int8x8_t s, int8x8_t t); 34459 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 34460 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 34461 uint64_t pandn_ud (uint64_t s, uint64_t t); 34462 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 34463 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 34464 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 34465 int64_t pandn_sd (int64_t s, int64_t t); 34466 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 34467 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 34468 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 34469 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 34470 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 34471 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 34472 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 34473 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 34474 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 34475 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 34476 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 34477 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 34478 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 34479 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 34480 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 34481 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 34482 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 34483 uint16x4_t pextrh_u (uint16x4_t s, int field); 34484 int16x4_t pextrh_s (int16x4_t s, int field); 34485 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 34486 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 34487 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 34488 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 34489 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 34490 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 34491 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 34492 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 34493 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 34494 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 34495 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 34496 int16x4_t pminsh (int16x4_t s, int16x4_t t); 34497 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 34498 uint8x8_t pmovmskb_u (uint8x8_t s); 34499 int8x8_t pmovmskb_s (int8x8_t s); 34500 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 34501 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 34502 int16x4_t pmullh (int16x4_t s, int16x4_t t); 34503 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 34504 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 34505 uint16x4_t biadd (uint8x8_t s); 34506 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 34507 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 34508 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 34509 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 34510 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 34511 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 34512 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 34513 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 34514 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 34515 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 34516 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 34517 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 34518 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 34519 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 34520 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 34521 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 34522 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 34523 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 34524 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 34525 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 34526 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 34527 uint64_t psubd_u (uint64_t s, uint64_t t); 34528 int64_t psubd_s (int64_t s, int64_t t); 34529 int16x4_t psubsh (int16x4_t s, int16x4_t t); 34530 int8x8_t psubsb (int8x8_t s, int8x8_t t); 34531 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 34532 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 34533 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 34534 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 34535 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 34536 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 34537 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 34538 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 34539 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 34540 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 34541 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 34542 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 34543 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 34544 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 34545 34546* Menu: 34547 34548* Paired-Single Arithmetic:: 34549* Paired-Single Built-in Functions:: 34550* MIPS-3D Built-in Functions:: 34551 34552 34553File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 34554 345556.54.9.1 Paired-Single Arithmetic 34556................................. 34557 34558The table below lists the `v2sf' operations for which hardware support 34559exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 34560value. 34561 34562C code MIPS instruction 34563`a + b' `add.ps' 34564`a - b' `sub.ps' 34565`-a' `neg.ps' 34566`a * b' `mul.ps' 34567`a * b + c' `madd.ps' 34568`a * b - c' `msub.ps' 34569`-(a * b + c)' `nmadd.ps' 34570`-(a * b - c)' `nmsub.ps' 34571`x ? a : b' `movn.ps'/`movz.ps' 34572 34573 Note that the multiply-accumulate instructions can be disabled using 34574the command-line option `-mno-fused-madd'. 34575 34576 34577File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Loongson Built-in Functions 34578 345796.54.9.2 Paired-Single Built-in Functions 34580......................................... 34581 34582The following paired-single functions map directly to a particular MIPS 34583instruction. Please refer to the architecture specification for 34584details on what each instruction does. 34585 34586`v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 34587 Pair lower lower (`pll.ps'). 34588 34589`v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 34590 Pair upper lower (`pul.ps'). 34591 34592`v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 34593 Pair lower upper (`plu.ps'). 34594 34595`v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 34596 Pair upper upper (`puu.ps'). 34597 34598`v2sf __builtin_mips_cvt_ps_s (float, float)' 34599 Convert pair to paired single (`cvt.ps.s'). 34600 34601`float __builtin_mips_cvt_s_pl (v2sf)' 34602 Convert pair lower to single (`cvt.s.pl'). 34603 34604`float __builtin_mips_cvt_s_pu (v2sf)' 34605 Convert pair upper to single (`cvt.s.pu'). 34606 34607`v2sf __builtin_mips_abs_ps (v2sf)' 34608 Absolute value (`abs.ps'). 34609 34610`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 34611 Align variable (`alnv.ps'). 34612 34613 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 34614 otherwise the result will be unpredictable. Please read the 34615 instruction description for details. 34616 34617 The following multi-instruction functions are also available. In each 34618case, COND can be any of the 16 floating-point conditions: `f', `un', 34619`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 34620`lt', `nge', `le' or `ngt'. 34621 34622`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 34623`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 34624 Conditional move based on floating point comparison (`c.COND.ps', 34625 `movt.ps'/`movf.ps'). 34626 34627 The `movt' functions return the value X computed by: 34628 34629 c.COND.ps CC,A,B 34630 mov.ps X,C 34631 movt.ps X,D,CC 34632 34633 The `movf' functions are similar but use `movf.ps' instead of 34634 `movt.ps'. 34635 34636`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 34637`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 34638 Comparison of two paired-single values (`c.COND.ps', 34639 `bc1t'/`bc1f'). 34640 34641 These functions compare A and B using `c.COND.ps' and return 34642 either the upper or lower half of the result. For example: 34643 34644 v2sf a, b; 34645 if (__builtin_mips_upper_c_eq_ps (a, b)) 34646 upper_halves_are_equal (); 34647 else 34648 upper_halves_are_unequal (); 34649 34650 if (__builtin_mips_lower_c_eq_ps (a, b)) 34651 lower_halves_are_equal (); 34652 else 34653 lower_halves_are_unequal (); 34654 34655 34656File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 34657 346586.54.9.3 MIPS-3D Built-in Functions 34659................................... 34660 34661The MIPS-3D Application-Specific Extension (ASE) includes additional 34662paired-single instructions that are designed to improve the performance 34663of 3D graphics operations. Support for these instructions is controlled 34664by the `-mips3d' command-line option. 34665 34666 The functions listed below map directly to a particular MIPS-3D 34667instruction. Please refer to the architecture specification for more 34668details on what each instruction does. 34669 34670`v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 34671 Reduction add (`addr.ps'). 34672 34673`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 34674 Reduction multiply (`mulr.ps'). 34675 34676`v2sf __builtin_mips_cvt_pw_ps (v2sf)' 34677 Convert paired single to paired word (`cvt.pw.ps'). 34678 34679`v2sf __builtin_mips_cvt_ps_pw (v2sf)' 34680 Convert paired word to paired single (`cvt.ps.pw'). 34681 34682`float __builtin_mips_recip1_s (float)' 34683`double __builtin_mips_recip1_d (double)' 34684`v2sf __builtin_mips_recip1_ps (v2sf)' 34685 Reduced precision reciprocal (sequence step 1) (`recip1.FMT'). 34686 34687`float __builtin_mips_recip2_s (float, float)' 34688`double __builtin_mips_recip2_d (double, double)' 34689`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 34690 Reduced precision reciprocal (sequence step 2) (`recip2.FMT'). 34691 34692`float __builtin_mips_rsqrt1_s (float)' 34693`double __builtin_mips_rsqrt1_d (double)' 34694`v2sf __builtin_mips_rsqrt1_ps (v2sf)' 34695 Reduced precision reciprocal square root (sequence step 1) 34696 (`rsqrt1.FMT'). 34697 34698`float __builtin_mips_rsqrt2_s (float, float)' 34699`double __builtin_mips_rsqrt2_d (double, double)' 34700`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 34701 Reduced precision reciprocal square root (sequence step 2) 34702 (`rsqrt2.FMT'). 34703 34704 The following multi-instruction functions are also available. In each 34705case, COND can be any of the 16 floating-point conditions: `f', `un', 34706`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 34707`lt', `nge', `le' or `ngt'. 34708 34709`int __builtin_mips_cabs_COND_s (float A, float B)' 34710`int __builtin_mips_cabs_COND_d (double A, double B)' 34711 Absolute comparison of two scalar values (`cabs.COND.FMT', 34712 `bc1t'/`bc1f'). 34713 34714 These functions compare A and B using `cabs.COND.s' or 34715 `cabs.COND.d' and return the result as a boolean value. For 34716 example: 34717 34718 float a, b; 34719 if (__builtin_mips_cabs_eq_s (a, b)) 34720 true (); 34721 else 34722 false (); 34723 34724`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 34725`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 34726 Absolute comparison of two paired-single values (`cabs.COND.ps', 34727 `bc1t'/`bc1f'). 34728 34729 These functions compare A and B using `cabs.COND.ps' and return 34730 either the upper or lower half of the result. For example: 34731 34732 v2sf a, b; 34733 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 34734 upper_halves_are_equal (); 34735 else 34736 upper_halves_are_unequal (); 34737 34738 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 34739 lower_halves_are_equal (); 34740 else 34741 lower_halves_are_unequal (); 34742 34743`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 34744`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 34745 Conditional move based on absolute comparison (`cabs.COND.ps', 34746 `movt.ps'/`movf.ps'). 34747 34748 The `movt' functions return the value X computed by: 34749 34750 cabs.COND.ps CC,A,B 34751 mov.ps X,C 34752 movt.ps X,D,CC 34753 34754 The `movf' functions are similar but use `movf.ps' instead of 34755 `movt.ps'. 34756 34757`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 34758`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 34759`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 34760`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 34761 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 34762 `bc1any2t'/`bc1any2f'). 34763 34764 These functions compare A and B using `c.COND.ps' or 34765 `cabs.COND.ps'. The `any' forms return true if either result is 34766 true and the `all' forms return true if both results are true. 34767 For example: 34768 34769 v2sf a, b; 34770 if (__builtin_mips_any_c_eq_ps (a, b)) 34771 one_is_true (); 34772 else 34773 both_are_false (); 34774 34775 if (__builtin_mips_all_c_eq_ps (a, b)) 34776 both_are_true (); 34777 else 34778 one_is_false (); 34779 34780`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 34781`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 34782`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 34783`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 34784 Comparison of four paired-single values 34785 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 34786 34787 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 34788 with B and to compare C with D. The `any' forms return true if 34789 any of the four results are true and the `all' forms return true 34790 if all four results are true. For example: 34791 34792 v2sf a, b, c, d; 34793 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 34794 some_are_true (); 34795 else 34796 all_are_false (); 34797 34798 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 34799 all_are_true (); 34800 else 34801 some_are_false (); 34802 34803 34804File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 34805 348066.54.10 picoChip Built-in Functions 34807----------------------------------- 34808 34809GCC provides an interface to selected machine instructions from the 34810picoChip instruction set. 34811 34812`int __builtin_sbc (int VALUE)' 34813 Sign bit count. Return the number of consecutive bits in VALUE 34814 which have the same value as the sign-bit. The result is the 34815 number of leading sign bits minus one, giving the number of 34816 redundant sign bits in VALUE. 34817 34818`int __builtin_byteswap (int VALUE)' 34819 Byte swap. Return the result of swapping the upper and lower 34820 bytes of VALUE. 34821 34822`int __builtin_brev (int VALUE)' 34823 Bit reversal. Return the result of reversing the bits in VALUE. 34824 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 34825 on. 34826 34827`int __builtin_adds (int X, int Y)' 34828 Saturating addition. Return the result of adding X and Y, storing 34829 the value 32767 if the result overflows. 34830 34831`int __builtin_subs (int X, int Y)' 34832 Saturating subtraction. Return the result of subtracting Y from 34833 X, storing the value -32768 if the result overflows. 34834 34835`void __builtin_halt (void)' 34836 Halt. The processor will stop execution. This built-in is useful 34837 for implementing assertions. 34838 34839 34840 34841File: gcc.info, Node: Other MIPS Built-in Functions, Next: picoChip Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 34842 348436.54.11 Other MIPS Built-in Functions 34844------------------------------------- 34845 34846GCC provides other MIPS-specific built-in functions: 34847 34848`void __builtin_mips_cache (int OP, const volatile void *ADDR)' 34849 Insert a `cache' instruction with operands OP and ADDR. GCC 34850 defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE' 34851 when this function is available. 34852 34853 34854File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: RX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 34855 348566.54.12 PowerPC AltiVec Built-in Functions 34857------------------------------------------ 34858 34859GCC provides an interface for the PowerPC family of processors to access 34860the AltiVec operations described in Motorola's AltiVec Programming 34861Interface Manual. The interface is made available by including 34862`<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 34863supports the following vector types. 34864 34865 vector unsigned char 34866 vector signed char 34867 vector bool char 34868 34869 vector unsigned short 34870 vector signed short 34871 vector bool short 34872 vector pixel 34873 34874 vector unsigned int 34875 vector signed int 34876 vector bool int 34877 vector float 34878 34879 If `-mvsx' is used the following additional vector types are 34880implemented. 34881 34882 vector unsigned long 34883 vector signed long 34884 vector double 34885 34886 The long types are only implemented for 64-bit code generation, and 34887the long type is only used in the floating point/integer conversion 34888instructions. 34889 34890 GCC's implementation of the high-level language interface available 34891from C and C++ code differs from Motorola's documentation in several 34892ways. 34893 34894 * A vector constant is a list of constant expressions within curly 34895 braces. 34896 34897 * A vector initializer requires no cast if the vector constant is of 34898 the same type as the variable it is initializing. 34899 34900 * If `signed' or `unsigned' is omitted, the signedness of the vector 34901 type is the default signedness of the base type. The default 34902 varies depending on the operating system, so a portable program 34903 should always specify the signedness. 34904 34905 * Compiling with `-maltivec' adds keywords `__vector', `vector', 34906 `__pixel', `pixel', `__bool' and `bool'. When compiling ISO C, 34907 the context-sensitive substitution of the keywords `vector', 34908 `pixel' and `bool' is disabled. To use them, you must include 34909 `<altivec.h>' instead. 34910 34911 * GCC allows using a `typedef' name as the type specifier for a 34912 vector type. 34913 34914 * For C, overloaded functions are implemented with macros so the 34915 following does not work: 34916 34917 vec_add ((vector signed int){1, 2, 3, 4}, foo); 34918 34919 Since `vec_add' is a macro, the vector constant in the example is 34920 treated as four separate arguments. Wrap the entire argument in 34921 parentheses for this to work. 34922 34923 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 34924GCC uses built-in functions to achieve the functionality in the 34925aforementioned header file, but they are not supported and are subject 34926to change without notice. 34927 34928 The following interfaces are supported for the generic and specific 34929AltiVec operations and the AltiVec predicates. In cases where there is 34930a direct mapping between generic and specific operations, only the 34931generic names are shown here, although the specific operations can also 34932be used. 34933 34934 Arguments that are documented as `const int' require literal integral 34935values within the range required for that operation. 34936 34937 vector signed char vec_abs (vector signed char); 34938 vector signed short vec_abs (vector signed short); 34939 vector signed int vec_abs (vector signed int); 34940 vector float vec_abs (vector float); 34941 34942 vector signed char vec_abss (vector signed char); 34943 vector signed short vec_abss (vector signed short); 34944 vector signed int vec_abss (vector signed int); 34945 34946 vector signed char vec_add (vector bool char, vector signed char); 34947 vector signed char vec_add (vector signed char, vector bool char); 34948 vector signed char vec_add (vector signed char, vector signed char); 34949 vector unsigned char vec_add (vector bool char, vector unsigned char); 34950 vector unsigned char vec_add (vector unsigned char, vector bool char); 34951 vector unsigned char vec_add (vector unsigned char, 34952 vector unsigned char); 34953 vector signed short vec_add (vector bool short, vector signed short); 34954 vector signed short vec_add (vector signed short, vector bool short); 34955 vector signed short vec_add (vector signed short, vector signed short); 34956 vector unsigned short vec_add (vector bool short, 34957 vector unsigned short); 34958 vector unsigned short vec_add (vector unsigned short, 34959 vector bool short); 34960 vector unsigned short vec_add (vector unsigned short, 34961 vector unsigned short); 34962 vector signed int vec_add (vector bool int, vector signed int); 34963 vector signed int vec_add (vector signed int, vector bool int); 34964 vector signed int vec_add (vector signed int, vector signed int); 34965 vector unsigned int vec_add (vector bool int, vector unsigned int); 34966 vector unsigned int vec_add (vector unsigned int, vector bool int); 34967 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 34968 vector float vec_add (vector float, vector float); 34969 34970 vector float vec_vaddfp (vector float, vector float); 34971 34972 vector signed int vec_vadduwm (vector bool int, vector signed int); 34973 vector signed int vec_vadduwm (vector signed int, vector bool int); 34974 vector signed int vec_vadduwm (vector signed int, vector signed int); 34975 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 34976 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 34977 vector unsigned int vec_vadduwm (vector unsigned int, 34978 vector unsigned int); 34979 34980 vector signed short vec_vadduhm (vector bool short, 34981 vector signed short); 34982 vector signed short vec_vadduhm (vector signed short, 34983 vector bool short); 34984 vector signed short vec_vadduhm (vector signed short, 34985 vector signed short); 34986 vector unsigned short vec_vadduhm (vector bool short, 34987 vector unsigned short); 34988 vector unsigned short vec_vadduhm (vector unsigned short, 34989 vector bool short); 34990 vector unsigned short vec_vadduhm (vector unsigned short, 34991 vector unsigned short); 34992 34993 vector signed char vec_vaddubm (vector bool char, vector signed char); 34994 vector signed char vec_vaddubm (vector signed char, vector bool char); 34995 vector signed char vec_vaddubm (vector signed char, vector signed char); 34996 vector unsigned char vec_vaddubm (vector bool char, 34997 vector unsigned char); 34998 vector unsigned char vec_vaddubm (vector unsigned char, 34999 vector bool char); 35000 vector unsigned char vec_vaddubm (vector unsigned char, 35001 vector unsigned char); 35002 35003 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 35004 35005 vector unsigned char vec_adds (vector bool char, vector unsigned char); 35006 vector unsigned char vec_adds (vector unsigned char, vector bool char); 35007 vector unsigned char vec_adds (vector unsigned char, 35008 vector unsigned char); 35009 vector signed char vec_adds (vector bool char, vector signed char); 35010 vector signed char vec_adds (vector signed char, vector bool char); 35011 vector signed char vec_adds (vector signed char, vector signed char); 35012 vector unsigned short vec_adds (vector bool short, 35013 vector unsigned short); 35014 vector unsigned short vec_adds (vector unsigned short, 35015 vector bool short); 35016 vector unsigned short vec_adds (vector unsigned short, 35017 vector unsigned short); 35018 vector signed short vec_adds (vector bool short, vector signed short); 35019 vector signed short vec_adds (vector signed short, vector bool short); 35020 vector signed short vec_adds (vector signed short, vector signed short); 35021 vector unsigned int vec_adds (vector bool int, vector unsigned int); 35022 vector unsigned int vec_adds (vector unsigned int, vector bool int); 35023 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 35024 vector signed int vec_adds (vector bool int, vector signed int); 35025 vector signed int vec_adds (vector signed int, vector bool int); 35026 vector signed int vec_adds (vector signed int, vector signed int); 35027 35028 vector signed int vec_vaddsws (vector bool int, vector signed int); 35029 vector signed int vec_vaddsws (vector signed int, vector bool int); 35030 vector signed int vec_vaddsws (vector signed int, vector signed int); 35031 35032 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 35033 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 35034 vector unsigned int vec_vadduws (vector unsigned int, 35035 vector unsigned int); 35036 35037 vector signed short vec_vaddshs (vector bool short, 35038 vector signed short); 35039 vector signed short vec_vaddshs (vector signed short, 35040 vector bool short); 35041 vector signed short vec_vaddshs (vector signed short, 35042 vector signed short); 35043 35044 vector unsigned short vec_vadduhs (vector bool short, 35045 vector unsigned short); 35046 vector unsigned short vec_vadduhs (vector unsigned short, 35047 vector bool short); 35048 vector unsigned short vec_vadduhs (vector unsigned short, 35049 vector unsigned short); 35050 35051 vector signed char vec_vaddsbs (vector bool char, vector signed char); 35052 vector signed char vec_vaddsbs (vector signed char, vector bool char); 35053 vector signed char vec_vaddsbs (vector signed char, vector signed char); 35054 35055 vector unsigned char vec_vaddubs (vector bool char, 35056 vector unsigned char); 35057 vector unsigned char vec_vaddubs (vector unsigned char, 35058 vector bool char); 35059 vector unsigned char vec_vaddubs (vector unsigned char, 35060 vector unsigned char); 35061 35062 vector float vec_and (vector float, vector float); 35063 vector float vec_and (vector float, vector bool int); 35064 vector float vec_and (vector bool int, vector float); 35065 vector bool int vec_and (vector bool int, vector bool int); 35066 vector signed int vec_and (vector bool int, vector signed int); 35067 vector signed int vec_and (vector signed int, vector bool int); 35068 vector signed int vec_and (vector signed int, vector signed int); 35069 vector unsigned int vec_and (vector bool int, vector unsigned int); 35070 vector unsigned int vec_and (vector unsigned int, vector bool int); 35071 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 35072 vector bool short vec_and (vector bool short, vector bool short); 35073 vector signed short vec_and (vector bool short, vector signed short); 35074 vector signed short vec_and (vector signed short, vector bool short); 35075 vector signed short vec_and (vector signed short, vector signed short); 35076 vector unsigned short vec_and (vector bool short, 35077 vector unsigned short); 35078 vector unsigned short vec_and (vector unsigned short, 35079 vector bool short); 35080 vector unsigned short vec_and (vector unsigned short, 35081 vector unsigned short); 35082 vector signed char vec_and (vector bool char, vector signed char); 35083 vector bool char vec_and (vector bool char, vector bool char); 35084 vector signed char vec_and (vector signed char, vector bool char); 35085 vector signed char vec_and (vector signed char, vector signed char); 35086 vector unsigned char vec_and (vector bool char, vector unsigned char); 35087 vector unsigned char vec_and (vector unsigned char, vector bool char); 35088 vector unsigned char vec_and (vector unsigned char, 35089 vector unsigned char); 35090 35091 vector float vec_andc (vector float, vector float); 35092 vector float vec_andc (vector float, vector bool int); 35093 vector float vec_andc (vector bool int, vector float); 35094 vector bool int vec_andc (vector bool int, vector bool int); 35095 vector signed int vec_andc (vector bool int, vector signed int); 35096 vector signed int vec_andc (vector signed int, vector bool int); 35097 vector signed int vec_andc (vector signed int, vector signed int); 35098 vector unsigned int vec_andc (vector bool int, vector unsigned int); 35099 vector unsigned int vec_andc (vector unsigned int, vector bool int); 35100 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 35101 vector bool short vec_andc (vector bool short, vector bool short); 35102 vector signed short vec_andc (vector bool short, vector signed short); 35103 vector signed short vec_andc (vector signed short, vector bool short); 35104 vector signed short vec_andc (vector signed short, vector signed short); 35105 vector unsigned short vec_andc (vector bool short, 35106 vector unsigned short); 35107 vector unsigned short vec_andc (vector unsigned short, 35108 vector bool short); 35109 vector unsigned short vec_andc (vector unsigned short, 35110 vector unsigned short); 35111 vector signed char vec_andc (vector bool char, vector signed char); 35112 vector bool char vec_andc (vector bool char, vector bool char); 35113 vector signed char vec_andc (vector signed char, vector bool char); 35114 vector signed char vec_andc (vector signed char, vector signed char); 35115 vector unsigned char vec_andc (vector bool char, vector unsigned char); 35116 vector unsigned char vec_andc (vector unsigned char, vector bool char); 35117 vector unsigned char vec_andc (vector unsigned char, 35118 vector unsigned char); 35119 35120 vector unsigned char vec_avg (vector unsigned char, 35121 vector unsigned char); 35122 vector signed char vec_avg (vector signed char, vector signed char); 35123 vector unsigned short vec_avg (vector unsigned short, 35124 vector unsigned short); 35125 vector signed short vec_avg (vector signed short, vector signed short); 35126 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 35127 vector signed int vec_avg (vector signed int, vector signed int); 35128 35129 vector signed int vec_vavgsw (vector signed int, vector signed int); 35130 35131 vector unsigned int vec_vavguw (vector unsigned int, 35132 vector unsigned int); 35133 35134 vector signed short vec_vavgsh (vector signed short, 35135 vector signed short); 35136 35137 vector unsigned short vec_vavguh (vector unsigned short, 35138 vector unsigned short); 35139 35140 vector signed char vec_vavgsb (vector signed char, vector signed char); 35141 35142 vector unsigned char vec_vavgub (vector unsigned char, 35143 vector unsigned char); 35144 35145 vector float vec_copysign (vector float); 35146 35147 vector float vec_ceil (vector float); 35148 35149 vector signed int vec_cmpb (vector float, vector float); 35150 35151 vector bool char vec_cmpeq (vector signed char, vector signed char); 35152 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 35153 vector bool short vec_cmpeq (vector signed short, vector signed short); 35154 vector bool short vec_cmpeq (vector unsigned short, 35155 vector unsigned short); 35156 vector bool int vec_cmpeq (vector signed int, vector signed int); 35157 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 35158 vector bool int vec_cmpeq (vector float, vector float); 35159 35160 vector bool int vec_vcmpeqfp (vector float, vector float); 35161 35162 vector bool int vec_vcmpequw (vector signed int, vector signed int); 35163 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 35164 35165 vector bool short vec_vcmpequh (vector signed short, 35166 vector signed short); 35167 vector bool short vec_vcmpequh (vector unsigned short, 35168 vector unsigned short); 35169 35170 vector bool char vec_vcmpequb (vector signed char, vector signed char); 35171 vector bool char vec_vcmpequb (vector unsigned char, 35172 vector unsigned char); 35173 35174 vector bool int vec_cmpge (vector float, vector float); 35175 35176 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 35177 vector bool char vec_cmpgt (vector signed char, vector signed char); 35178 vector bool short vec_cmpgt (vector unsigned short, 35179 vector unsigned short); 35180 vector bool short vec_cmpgt (vector signed short, vector signed short); 35181 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 35182 vector bool int vec_cmpgt (vector signed int, vector signed int); 35183 vector bool int vec_cmpgt (vector float, vector float); 35184 35185 vector bool int vec_vcmpgtfp (vector float, vector float); 35186 35187 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 35188 35189 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 35190 35191 vector bool short vec_vcmpgtsh (vector signed short, 35192 vector signed short); 35193 35194 vector bool short vec_vcmpgtuh (vector unsigned short, 35195 vector unsigned short); 35196 35197 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 35198 35199 vector bool char vec_vcmpgtub (vector unsigned char, 35200 vector unsigned char); 35201 35202 vector bool int vec_cmple (vector float, vector float); 35203 35204 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 35205 vector bool char vec_cmplt (vector signed char, vector signed char); 35206 vector bool short vec_cmplt (vector unsigned short, 35207 vector unsigned short); 35208 vector bool short vec_cmplt (vector signed short, vector signed short); 35209 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 35210 vector bool int vec_cmplt (vector signed int, vector signed int); 35211 vector bool int vec_cmplt (vector float, vector float); 35212 35213 vector float vec_ctf (vector unsigned int, const int); 35214 vector float vec_ctf (vector signed int, const int); 35215 35216 vector float vec_vcfsx (vector signed int, const int); 35217 35218 vector float vec_vcfux (vector unsigned int, const int); 35219 35220 vector signed int vec_cts (vector float, const int); 35221 35222 vector unsigned int vec_ctu (vector float, const int); 35223 35224 void vec_dss (const int); 35225 35226 void vec_dssall (void); 35227 35228 void vec_dst (const vector unsigned char *, int, const int); 35229 void vec_dst (const vector signed char *, int, const int); 35230 void vec_dst (const vector bool char *, int, const int); 35231 void vec_dst (const vector unsigned short *, int, const int); 35232 void vec_dst (const vector signed short *, int, const int); 35233 void vec_dst (const vector bool short *, int, const int); 35234 void vec_dst (const vector pixel *, int, const int); 35235 void vec_dst (const vector unsigned int *, int, const int); 35236 void vec_dst (const vector signed int *, int, const int); 35237 void vec_dst (const vector bool int *, int, const int); 35238 void vec_dst (const vector float *, int, const int); 35239 void vec_dst (const unsigned char *, int, const int); 35240 void vec_dst (const signed char *, int, const int); 35241 void vec_dst (const unsigned short *, int, const int); 35242 void vec_dst (const short *, int, const int); 35243 void vec_dst (const unsigned int *, int, const int); 35244 void vec_dst (const int *, int, const int); 35245 void vec_dst (const unsigned long *, int, const int); 35246 void vec_dst (const long *, int, const int); 35247 void vec_dst (const float *, int, const int); 35248 35249 void vec_dstst (const vector unsigned char *, int, const int); 35250 void vec_dstst (const vector signed char *, int, const int); 35251 void vec_dstst (const vector bool char *, int, const int); 35252 void vec_dstst (const vector unsigned short *, int, const int); 35253 void vec_dstst (const vector signed short *, int, const int); 35254 void vec_dstst (const vector bool short *, int, const int); 35255 void vec_dstst (const vector pixel *, int, const int); 35256 void vec_dstst (const vector unsigned int *, int, const int); 35257 void vec_dstst (const vector signed int *, int, const int); 35258 void vec_dstst (const vector bool int *, int, const int); 35259 void vec_dstst (const vector float *, int, const int); 35260 void vec_dstst (const unsigned char *, int, const int); 35261 void vec_dstst (const signed char *, int, const int); 35262 void vec_dstst (const unsigned short *, int, const int); 35263 void vec_dstst (const short *, int, const int); 35264 void vec_dstst (const unsigned int *, int, const int); 35265 void vec_dstst (const int *, int, const int); 35266 void vec_dstst (const unsigned long *, int, const int); 35267 void vec_dstst (const long *, int, const int); 35268 void vec_dstst (const float *, int, const int); 35269 35270 void vec_dststt (const vector unsigned char *, int, const int); 35271 void vec_dststt (const vector signed char *, int, const int); 35272 void vec_dststt (const vector bool char *, int, const int); 35273 void vec_dststt (const vector unsigned short *, int, const int); 35274 void vec_dststt (const vector signed short *, int, const int); 35275 void vec_dststt (const vector bool short *, int, const int); 35276 void vec_dststt (const vector pixel *, int, const int); 35277 void vec_dststt (const vector unsigned int *, int, const int); 35278 void vec_dststt (const vector signed int *, int, const int); 35279 void vec_dststt (const vector bool int *, int, const int); 35280 void vec_dststt (const vector float *, int, const int); 35281 void vec_dststt (const unsigned char *, int, const int); 35282 void vec_dststt (const signed char *, int, const int); 35283 void vec_dststt (const unsigned short *, int, const int); 35284 void vec_dststt (const short *, int, const int); 35285 void vec_dststt (const unsigned int *, int, const int); 35286 void vec_dststt (const int *, int, const int); 35287 void vec_dststt (const unsigned long *, int, const int); 35288 void vec_dststt (const long *, int, const int); 35289 void vec_dststt (const float *, int, const int); 35290 35291 void vec_dstt (const vector unsigned char *, int, const int); 35292 void vec_dstt (const vector signed char *, int, const int); 35293 void vec_dstt (const vector bool char *, int, const int); 35294 void vec_dstt (const vector unsigned short *, int, const int); 35295 void vec_dstt (const vector signed short *, int, const int); 35296 void vec_dstt (const vector bool short *, int, const int); 35297 void vec_dstt (const vector pixel *, int, const int); 35298 void vec_dstt (const vector unsigned int *, int, const int); 35299 void vec_dstt (const vector signed int *, int, const int); 35300 void vec_dstt (const vector bool int *, int, const int); 35301 void vec_dstt (const vector float *, int, const int); 35302 void vec_dstt (const unsigned char *, int, const int); 35303 void vec_dstt (const signed char *, int, const int); 35304 void vec_dstt (const unsigned short *, int, const int); 35305 void vec_dstt (const short *, int, const int); 35306 void vec_dstt (const unsigned int *, int, const int); 35307 void vec_dstt (const int *, int, const int); 35308 void vec_dstt (const unsigned long *, int, const int); 35309 void vec_dstt (const long *, int, const int); 35310 void vec_dstt (const float *, int, const int); 35311 35312 vector float vec_expte (vector float); 35313 35314 vector float vec_floor (vector float); 35315 35316 vector float vec_ld (int, const vector float *); 35317 vector float vec_ld (int, const float *); 35318 vector bool int vec_ld (int, const vector bool int *); 35319 vector signed int vec_ld (int, const vector signed int *); 35320 vector signed int vec_ld (int, const int *); 35321 vector signed int vec_ld (int, const long *); 35322 vector unsigned int vec_ld (int, const vector unsigned int *); 35323 vector unsigned int vec_ld (int, const unsigned int *); 35324 vector unsigned int vec_ld (int, const unsigned long *); 35325 vector bool short vec_ld (int, const vector bool short *); 35326 vector pixel vec_ld (int, const vector pixel *); 35327 vector signed short vec_ld (int, const vector signed short *); 35328 vector signed short vec_ld (int, const short *); 35329 vector unsigned short vec_ld (int, const vector unsigned short *); 35330 vector unsigned short vec_ld (int, const unsigned short *); 35331 vector bool char vec_ld (int, const vector bool char *); 35332 vector signed char vec_ld (int, const vector signed char *); 35333 vector signed char vec_ld (int, const signed char *); 35334 vector unsigned char vec_ld (int, const vector unsigned char *); 35335 vector unsigned char vec_ld (int, const unsigned char *); 35336 35337 vector signed char vec_lde (int, const signed char *); 35338 vector unsigned char vec_lde (int, const unsigned char *); 35339 vector signed short vec_lde (int, const short *); 35340 vector unsigned short vec_lde (int, const unsigned short *); 35341 vector float vec_lde (int, const float *); 35342 vector signed int vec_lde (int, const int *); 35343 vector unsigned int vec_lde (int, const unsigned int *); 35344 vector signed int vec_lde (int, const long *); 35345 vector unsigned int vec_lde (int, const unsigned long *); 35346 35347 vector float vec_lvewx (int, float *); 35348 vector signed int vec_lvewx (int, int *); 35349 vector unsigned int vec_lvewx (int, unsigned int *); 35350 vector signed int vec_lvewx (int, long *); 35351 vector unsigned int vec_lvewx (int, unsigned long *); 35352 35353 vector signed short vec_lvehx (int, short *); 35354 vector unsigned short vec_lvehx (int, unsigned short *); 35355 35356 vector signed char vec_lvebx (int, char *); 35357 vector unsigned char vec_lvebx (int, unsigned char *); 35358 35359 vector float vec_ldl (int, const vector float *); 35360 vector float vec_ldl (int, const float *); 35361 vector bool int vec_ldl (int, const vector bool int *); 35362 vector signed int vec_ldl (int, const vector signed int *); 35363 vector signed int vec_ldl (int, const int *); 35364 vector signed int vec_ldl (int, const long *); 35365 vector unsigned int vec_ldl (int, const vector unsigned int *); 35366 vector unsigned int vec_ldl (int, const unsigned int *); 35367 vector unsigned int vec_ldl (int, const unsigned long *); 35368 vector bool short vec_ldl (int, const vector bool short *); 35369 vector pixel vec_ldl (int, const vector pixel *); 35370 vector signed short vec_ldl (int, const vector signed short *); 35371 vector signed short vec_ldl (int, const short *); 35372 vector unsigned short vec_ldl (int, const vector unsigned short *); 35373 vector unsigned short vec_ldl (int, const unsigned short *); 35374 vector bool char vec_ldl (int, const vector bool char *); 35375 vector signed char vec_ldl (int, const vector signed char *); 35376 vector signed char vec_ldl (int, const signed char *); 35377 vector unsigned char vec_ldl (int, const vector unsigned char *); 35378 vector unsigned char vec_ldl (int, const unsigned char *); 35379 35380 vector float vec_loge (vector float); 35381 35382 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 35383 vector unsigned char vec_lvsl (int, const volatile signed char *); 35384 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 35385 vector unsigned char vec_lvsl (int, const volatile short *); 35386 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 35387 vector unsigned char vec_lvsl (int, const volatile int *); 35388 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 35389 vector unsigned char vec_lvsl (int, const volatile long *); 35390 vector unsigned char vec_lvsl (int, const volatile float *); 35391 35392 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 35393 vector unsigned char vec_lvsr (int, const volatile signed char *); 35394 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 35395 vector unsigned char vec_lvsr (int, const volatile short *); 35396 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 35397 vector unsigned char vec_lvsr (int, const volatile int *); 35398 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 35399 vector unsigned char vec_lvsr (int, const volatile long *); 35400 vector unsigned char vec_lvsr (int, const volatile float *); 35401 35402 vector float vec_madd (vector float, vector float, vector float); 35403 35404 vector signed short vec_madds (vector signed short, 35405 vector signed short, 35406 vector signed short); 35407 35408 vector unsigned char vec_max (vector bool char, vector unsigned char); 35409 vector unsigned char vec_max (vector unsigned char, vector bool char); 35410 vector unsigned char vec_max (vector unsigned char, 35411 vector unsigned char); 35412 vector signed char vec_max (vector bool char, vector signed char); 35413 vector signed char vec_max (vector signed char, vector bool char); 35414 vector signed char vec_max (vector signed char, vector signed char); 35415 vector unsigned short vec_max (vector bool short, 35416 vector unsigned short); 35417 vector unsigned short vec_max (vector unsigned short, 35418 vector bool short); 35419 vector unsigned short vec_max (vector unsigned short, 35420 vector unsigned short); 35421 vector signed short vec_max (vector bool short, vector signed short); 35422 vector signed short vec_max (vector signed short, vector bool short); 35423 vector signed short vec_max (vector signed short, vector signed short); 35424 vector unsigned int vec_max (vector bool int, vector unsigned int); 35425 vector unsigned int vec_max (vector unsigned int, vector bool int); 35426 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 35427 vector signed int vec_max (vector bool int, vector signed int); 35428 vector signed int vec_max (vector signed int, vector bool int); 35429 vector signed int vec_max (vector signed int, vector signed int); 35430 vector float vec_max (vector float, vector float); 35431 35432 vector float vec_vmaxfp (vector float, vector float); 35433 35434 vector signed int vec_vmaxsw (vector bool int, vector signed int); 35435 vector signed int vec_vmaxsw (vector signed int, vector bool int); 35436 vector signed int vec_vmaxsw (vector signed int, vector signed int); 35437 35438 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 35439 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 35440 vector unsigned int vec_vmaxuw (vector unsigned int, 35441 vector unsigned int); 35442 35443 vector signed short vec_vmaxsh (vector bool short, vector signed short); 35444 vector signed short vec_vmaxsh (vector signed short, vector bool short); 35445 vector signed short vec_vmaxsh (vector signed short, 35446 vector signed short); 35447 35448 vector unsigned short vec_vmaxuh (vector bool short, 35449 vector unsigned short); 35450 vector unsigned short vec_vmaxuh (vector unsigned short, 35451 vector bool short); 35452 vector unsigned short vec_vmaxuh (vector unsigned short, 35453 vector unsigned short); 35454 35455 vector signed char vec_vmaxsb (vector bool char, vector signed char); 35456 vector signed char vec_vmaxsb (vector signed char, vector bool char); 35457 vector signed char vec_vmaxsb (vector signed char, vector signed char); 35458 35459 vector unsigned char vec_vmaxub (vector bool char, 35460 vector unsigned char); 35461 vector unsigned char vec_vmaxub (vector unsigned char, 35462 vector bool char); 35463 vector unsigned char vec_vmaxub (vector unsigned char, 35464 vector unsigned char); 35465 35466 vector bool char vec_mergeh (vector bool char, vector bool char); 35467 vector signed char vec_mergeh (vector signed char, vector signed char); 35468 vector unsigned char vec_mergeh (vector unsigned char, 35469 vector unsigned char); 35470 vector bool short vec_mergeh (vector bool short, vector bool short); 35471 vector pixel vec_mergeh (vector pixel, vector pixel); 35472 vector signed short vec_mergeh (vector signed short, 35473 vector signed short); 35474 vector unsigned short vec_mergeh (vector unsigned short, 35475 vector unsigned short); 35476 vector float vec_mergeh (vector float, vector float); 35477 vector bool int vec_mergeh (vector bool int, vector bool int); 35478 vector signed int vec_mergeh (vector signed int, vector signed int); 35479 vector unsigned int vec_mergeh (vector unsigned int, 35480 vector unsigned int); 35481 35482 vector float vec_vmrghw (vector float, vector float); 35483 vector bool int vec_vmrghw (vector bool int, vector bool int); 35484 vector signed int vec_vmrghw (vector signed int, vector signed int); 35485 vector unsigned int vec_vmrghw (vector unsigned int, 35486 vector unsigned int); 35487 35488 vector bool short vec_vmrghh (vector bool short, vector bool short); 35489 vector signed short vec_vmrghh (vector signed short, 35490 vector signed short); 35491 vector unsigned short vec_vmrghh (vector unsigned short, 35492 vector unsigned short); 35493 vector pixel vec_vmrghh (vector pixel, vector pixel); 35494 35495 vector bool char vec_vmrghb (vector bool char, vector bool char); 35496 vector signed char vec_vmrghb (vector signed char, vector signed char); 35497 vector unsigned char vec_vmrghb (vector unsigned char, 35498 vector unsigned char); 35499 35500 vector bool char vec_mergel (vector bool char, vector bool char); 35501 vector signed char vec_mergel (vector signed char, vector signed char); 35502 vector unsigned char vec_mergel (vector unsigned char, 35503 vector unsigned char); 35504 vector bool short vec_mergel (vector bool short, vector bool short); 35505 vector pixel vec_mergel (vector pixel, vector pixel); 35506 vector signed short vec_mergel (vector signed short, 35507 vector signed short); 35508 vector unsigned short vec_mergel (vector unsigned short, 35509 vector unsigned short); 35510 vector float vec_mergel (vector float, vector float); 35511 vector bool int vec_mergel (vector bool int, vector bool int); 35512 vector signed int vec_mergel (vector signed int, vector signed int); 35513 vector unsigned int vec_mergel (vector unsigned int, 35514 vector unsigned int); 35515 35516 vector float vec_vmrglw (vector float, vector float); 35517 vector signed int vec_vmrglw (vector signed int, vector signed int); 35518 vector unsigned int vec_vmrglw (vector unsigned int, 35519 vector unsigned int); 35520 vector bool int vec_vmrglw (vector bool int, vector bool int); 35521 35522 vector bool short vec_vmrglh (vector bool short, vector bool short); 35523 vector signed short vec_vmrglh (vector signed short, 35524 vector signed short); 35525 vector unsigned short vec_vmrglh (vector unsigned short, 35526 vector unsigned short); 35527 vector pixel vec_vmrglh (vector pixel, vector pixel); 35528 35529 vector bool char vec_vmrglb (vector bool char, vector bool char); 35530 vector signed char vec_vmrglb (vector signed char, vector signed char); 35531 vector unsigned char vec_vmrglb (vector unsigned char, 35532 vector unsigned char); 35533 35534 vector unsigned short vec_mfvscr (void); 35535 35536 vector unsigned char vec_min (vector bool char, vector unsigned char); 35537 vector unsigned char vec_min (vector unsigned char, vector bool char); 35538 vector unsigned char vec_min (vector unsigned char, 35539 vector unsigned char); 35540 vector signed char vec_min (vector bool char, vector signed char); 35541 vector signed char vec_min (vector signed char, vector bool char); 35542 vector signed char vec_min (vector signed char, vector signed char); 35543 vector unsigned short vec_min (vector bool short, 35544 vector unsigned short); 35545 vector unsigned short vec_min (vector unsigned short, 35546 vector bool short); 35547 vector unsigned short vec_min (vector unsigned short, 35548 vector unsigned short); 35549 vector signed short vec_min (vector bool short, vector signed short); 35550 vector signed short vec_min (vector signed short, vector bool short); 35551 vector signed short vec_min (vector signed short, vector signed short); 35552 vector unsigned int vec_min (vector bool int, vector unsigned int); 35553 vector unsigned int vec_min (vector unsigned int, vector bool int); 35554 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 35555 vector signed int vec_min (vector bool int, vector signed int); 35556 vector signed int vec_min (vector signed int, vector bool int); 35557 vector signed int vec_min (vector signed int, vector signed int); 35558 vector float vec_min (vector float, vector float); 35559 35560 vector float vec_vminfp (vector float, vector float); 35561 35562 vector signed int vec_vminsw (vector bool int, vector signed int); 35563 vector signed int vec_vminsw (vector signed int, vector bool int); 35564 vector signed int vec_vminsw (vector signed int, vector signed int); 35565 35566 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 35567 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 35568 vector unsigned int vec_vminuw (vector unsigned int, 35569 vector unsigned int); 35570 35571 vector signed short vec_vminsh (vector bool short, vector signed short); 35572 vector signed short vec_vminsh (vector signed short, vector bool short); 35573 vector signed short vec_vminsh (vector signed short, 35574 vector signed short); 35575 35576 vector unsigned short vec_vminuh (vector bool short, 35577 vector unsigned short); 35578 vector unsigned short vec_vminuh (vector unsigned short, 35579 vector bool short); 35580 vector unsigned short vec_vminuh (vector unsigned short, 35581 vector unsigned short); 35582 35583 vector signed char vec_vminsb (vector bool char, vector signed char); 35584 vector signed char vec_vminsb (vector signed char, vector bool char); 35585 vector signed char vec_vminsb (vector signed char, vector signed char); 35586 35587 vector unsigned char vec_vminub (vector bool char, 35588 vector unsigned char); 35589 vector unsigned char vec_vminub (vector unsigned char, 35590 vector bool char); 35591 vector unsigned char vec_vminub (vector unsigned char, 35592 vector unsigned char); 35593 35594 vector signed short vec_mladd (vector signed short, 35595 vector signed short, 35596 vector signed short); 35597 vector signed short vec_mladd (vector signed short, 35598 vector unsigned short, 35599 vector unsigned short); 35600 vector signed short vec_mladd (vector unsigned short, 35601 vector signed short, 35602 vector signed short); 35603 vector unsigned short vec_mladd (vector unsigned short, 35604 vector unsigned short, 35605 vector unsigned short); 35606 35607 vector signed short vec_mradds (vector signed short, 35608 vector signed short, 35609 vector signed short); 35610 35611 vector unsigned int vec_msum (vector unsigned char, 35612 vector unsigned char, 35613 vector unsigned int); 35614 vector signed int vec_msum (vector signed char, 35615 vector unsigned char, 35616 vector signed int); 35617 vector unsigned int vec_msum (vector unsigned short, 35618 vector unsigned short, 35619 vector unsigned int); 35620 vector signed int vec_msum (vector signed short, 35621 vector signed short, 35622 vector signed int); 35623 35624 vector signed int vec_vmsumshm (vector signed short, 35625 vector signed short, 35626 vector signed int); 35627 35628 vector unsigned int vec_vmsumuhm (vector unsigned short, 35629 vector unsigned short, 35630 vector unsigned int); 35631 35632 vector signed int vec_vmsummbm (vector signed char, 35633 vector unsigned char, 35634 vector signed int); 35635 35636 vector unsigned int vec_vmsumubm (vector unsigned char, 35637 vector unsigned char, 35638 vector unsigned int); 35639 35640 vector unsigned int vec_msums (vector unsigned short, 35641 vector unsigned short, 35642 vector unsigned int); 35643 vector signed int vec_msums (vector signed short, 35644 vector signed short, 35645 vector signed int); 35646 35647 vector signed int vec_vmsumshs (vector signed short, 35648 vector signed short, 35649 vector signed int); 35650 35651 vector unsigned int vec_vmsumuhs (vector unsigned short, 35652 vector unsigned short, 35653 vector unsigned int); 35654 35655 void vec_mtvscr (vector signed int); 35656 void vec_mtvscr (vector unsigned int); 35657 void vec_mtvscr (vector bool int); 35658 void vec_mtvscr (vector signed short); 35659 void vec_mtvscr (vector unsigned short); 35660 void vec_mtvscr (vector bool short); 35661 void vec_mtvscr (vector pixel); 35662 void vec_mtvscr (vector signed char); 35663 void vec_mtvscr (vector unsigned char); 35664 void vec_mtvscr (vector bool char); 35665 35666 vector unsigned short vec_mule (vector unsigned char, 35667 vector unsigned char); 35668 vector signed short vec_mule (vector signed char, 35669 vector signed char); 35670 vector unsigned int vec_mule (vector unsigned short, 35671 vector unsigned short); 35672 vector signed int vec_mule (vector signed short, vector signed short); 35673 35674 vector signed int vec_vmulesh (vector signed short, 35675 vector signed short); 35676 35677 vector unsigned int vec_vmuleuh (vector unsigned short, 35678 vector unsigned short); 35679 35680 vector signed short vec_vmulesb (vector signed char, 35681 vector signed char); 35682 35683 vector unsigned short vec_vmuleub (vector unsigned char, 35684 vector unsigned char); 35685 35686 vector unsigned short vec_mulo (vector unsigned char, 35687 vector unsigned char); 35688 vector signed short vec_mulo (vector signed char, vector signed char); 35689 vector unsigned int vec_mulo (vector unsigned short, 35690 vector unsigned short); 35691 vector signed int vec_mulo (vector signed short, vector signed short); 35692 35693 vector signed int vec_vmulosh (vector signed short, 35694 vector signed short); 35695 35696 vector unsigned int vec_vmulouh (vector unsigned short, 35697 vector unsigned short); 35698 35699 vector signed short vec_vmulosb (vector signed char, 35700 vector signed char); 35701 35702 vector unsigned short vec_vmuloub (vector unsigned char, 35703 vector unsigned char); 35704 35705 vector float vec_nmsub (vector float, vector float, vector float); 35706 35707 vector float vec_nor (vector float, vector float); 35708 vector signed int vec_nor (vector signed int, vector signed int); 35709 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 35710 vector bool int vec_nor (vector bool int, vector bool int); 35711 vector signed short vec_nor (vector signed short, vector signed short); 35712 vector unsigned short vec_nor (vector unsigned short, 35713 vector unsigned short); 35714 vector bool short vec_nor (vector bool short, vector bool short); 35715 vector signed char vec_nor (vector signed char, vector signed char); 35716 vector unsigned char vec_nor (vector unsigned char, 35717 vector unsigned char); 35718 vector bool char vec_nor (vector bool char, vector bool char); 35719 35720 vector float vec_or (vector float, vector float); 35721 vector float vec_or (vector float, vector bool int); 35722 vector float vec_or (vector bool int, vector float); 35723 vector bool int vec_or (vector bool int, vector bool int); 35724 vector signed int vec_or (vector bool int, vector signed int); 35725 vector signed int vec_or (vector signed int, vector bool int); 35726 vector signed int vec_or (vector signed int, vector signed int); 35727 vector unsigned int vec_or (vector bool int, vector unsigned int); 35728 vector unsigned int vec_or (vector unsigned int, vector bool int); 35729 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 35730 vector bool short vec_or (vector bool short, vector bool short); 35731 vector signed short vec_or (vector bool short, vector signed short); 35732 vector signed short vec_or (vector signed short, vector bool short); 35733 vector signed short vec_or (vector signed short, vector signed short); 35734 vector unsigned short vec_or (vector bool short, vector unsigned short); 35735 vector unsigned short vec_or (vector unsigned short, vector bool short); 35736 vector unsigned short vec_or (vector unsigned short, 35737 vector unsigned short); 35738 vector signed char vec_or (vector bool char, vector signed char); 35739 vector bool char vec_or (vector bool char, vector bool char); 35740 vector signed char vec_or (vector signed char, vector bool char); 35741 vector signed char vec_or (vector signed char, vector signed char); 35742 vector unsigned char vec_or (vector bool char, vector unsigned char); 35743 vector unsigned char vec_or (vector unsigned char, vector bool char); 35744 vector unsigned char vec_or (vector unsigned char, 35745 vector unsigned char); 35746 35747 vector signed char vec_pack (vector signed short, vector signed short); 35748 vector unsigned char vec_pack (vector unsigned short, 35749 vector unsigned short); 35750 vector bool char vec_pack (vector bool short, vector bool short); 35751 vector signed short vec_pack (vector signed int, vector signed int); 35752 vector unsigned short vec_pack (vector unsigned int, 35753 vector unsigned int); 35754 vector bool short vec_pack (vector bool int, vector bool int); 35755 35756 vector bool short vec_vpkuwum (vector bool int, vector bool int); 35757 vector signed short vec_vpkuwum (vector signed int, vector signed int); 35758 vector unsigned short vec_vpkuwum (vector unsigned int, 35759 vector unsigned int); 35760 35761 vector bool char vec_vpkuhum (vector bool short, vector bool short); 35762 vector signed char vec_vpkuhum (vector signed short, 35763 vector signed short); 35764 vector unsigned char vec_vpkuhum (vector unsigned short, 35765 vector unsigned short); 35766 35767 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 35768 35769 vector unsigned char vec_packs (vector unsigned short, 35770 vector unsigned short); 35771 vector signed char vec_packs (vector signed short, vector signed short); 35772 vector unsigned short vec_packs (vector unsigned int, 35773 vector unsigned int); 35774 vector signed short vec_packs (vector signed int, vector signed int); 35775 35776 vector signed short vec_vpkswss (vector signed int, vector signed int); 35777 35778 vector unsigned short vec_vpkuwus (vector unsigned int, 35779 vector unsigned int); 35780 35781 vector signed char vec_vpkshss (vector signed short, 35782 vector signed short); 35783 35784 vector unsigned char vec_vpkuhus (vector unsigned short, 35785 vector unsigned short); 35786 35787 vector unsigned char vec_packsu (vector unsigned short, 35788 vector unsigned short); 35789 vector unsigned char vec_packsu (vector signed short, 35790 vector signed short); 35791 vector unsigned short vec_packsu (vector unsigned int, 35792 vector unsigned int); 35793 vector unsigned short vec_packsu (vector signed int, vector signed int); 35794 35795 vector unsigned short vec_vpkswus (vector signed int, 35796 vector signed int); 35797 35798 vector unsigned char vec_vpkshus (vector signed short, 35799 vector signed short); 35800 35801 vector float vec_perm (vector float, 35802 vector float, 35803 vector unsigned char); 35804 vector signed int vec_perm (vector signed int, 35805 vector signed int, 35806 vector unsigned char); 35807 vector unsigned int vec_perm (vector unsigned int, 35808 vector unsigned int, 35809 vector unsigned char); 35810 vector bool int vec_perm (vector bool int, 35811 vector bool int, 35812 vector unsigned char); 35813 vector signed short vec_perm (vector signed short, 35814 vector signed short, 35815 vector unsigned char); 35816 vector unsigned short vec_perm (vector unsigned short, 35817 vector unsigned short, 35818 vector unsigned char); 35819 vector bool short vec_perm (vector bool short, 35820 vector bool short, 35821 vector unsigned char); 35822 vector pixel vec_perm (vector pixel, 35823 vector pixel, 35824 vector unsigned char); 35825 vector signed char vec_perm (vector signed char, 35826 vector signed char, 35827 vector unsigned char); 35828 vector unsigned char vec_perm (vector unsigned char, 35829 vector unsigned char, 35830 vector unsigned char); 35831 vector bool char vec_perm (vector bool char, 35832 vector bool char, 35833 vector unsigned char); 35834 35835 vector float vec_re (vector float); 35836 35837 vector signed char vec_rl (vector signed char, 35838 vector unsigned char); 35839 vector unsigned char vec_rl (vector unsigned char, 35840 vector unsigned char); 35841 vector signed short vec_rl (vector signed short, vector unsigned short); 35842 vector unsigned short vec_rl (vector unsigned short, 35843 vector unsigned short); 35844 vector signed int vec_rl (vector signed int, vector unsigned int); 35845 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 35846 35847 vector signed int vec_vrlw (vector signed int, vector unsigned int); 35848 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 35849 35850 vector signed short vec_vrlh (vector signed short, 35851 vector unsigned short); 35852 vector unsigned short vec_vrlh (vector unsigned short, 35853 vector unsigned short); 35854 35855 vector signed char vec_vrlb (vector signed char, vector unsigned char); 35856 vector unsigned char vec_vrlb (vector unsigned char, 35857 vector unsigned char); 35858 35859 vector float vec_round (vector float); 35860 35861 vector float vec_recip (vector float, vector float); 35862 35863 vector float vec_rsqrt (vector float); 35864 35865 vector float vec_rsqrte (vector float); 35866 35867 vector float vec_sel (vector float, vector float, vector bool int); 35868 vector float vec_sel (vector float, vector float, vector unsigned int); 35869 vector signed int vec_sel (vector signed int, 35870 vector signed int, 35871 vector bool int); 35872 vector signed int vec_sel (vector signed int, 35873 vector signed int, 35874 vector unsigned int); 35875 vector unsigned int vec_sel (vector unsigned int, 35876 vector unsigned int, 35877 vector bool int); 35878 vector unsigned int vec_sel (vector unsigned int, 35879 vector unsigned int, 35880 vector unsigned int); 35881 vector bool int vec_sel (vector bool int, 35882 vector bool int, 35883 vector bool int); 35884 vector bool int vec_sel (vector bool int, 35885 vector bool int, 35886 vector unsigned int); 35887 vector signed short vec_sel (vector signed short, 35888 vector signed short, 35889 vector bool short); 35890 vector signed short vec_sel (vector signed short, 35891 vector signed short, 35892 vector unsigned short); 35893 vector unsigned short vec_sel (vector unsigned short, 35894 vector unsigned short, 35895 vector bool short); 35896 vector unsigned short vec_sel (vector unsigned short, 35897 vector unsigned short, 35898 vector unsigned short); 35899 vector bool short vec_sel (vector bool short, 35900 vector bool short, 35901 vector bool short); 35902 vector bool short vec_sel (vector bool short, 35903 vector bool short, 35904 vector unsigned short); 35905 vector signed char vec_sel (vector signed char, 35906 vector signed char, 35907 vector bool char); 35908 vector signed char vec_sel (vector signed char, 35909 vector signed char, 35910 vector unsigned char); 35911 vector unsigned char vec_sel (vector unsigned char, 35912 vector unsigned char, 35913 vector bool char); 35914 vector unsigned char vec_sel (vector unsigned char, 35915 vector unsigned char, 35916 vector unsigned char); 35917 vector bool char vec_sel (vector bool char, 35918 vector bool char, 35919 vector bool char); 35920 vector bool char vec_sel (vector bool char, 35921 vector bool char, 35922 vector unsigned char); 35923 35924 vector signed char vec_sl (vector signed char, 35925 vector unsigned char); 35926 vector unsigned char vec_sl (vector unsigned char, 35927 vector unsigned char); 35928 vector signed short vec_sl (vector signed short, vector unsigned short); 35929 vector unsigned short vec_sl (vector unsigned short, 35930 vector unsigned short); 35931 vector signed int vec_sl (vector signed int, vector unsigned int); 35932 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 35933 35934 vector signed int vec_vslw (vector signed int, vector unsigned int); 35935 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 35936 35937 vector signed short vec_vslh (vector signed short, 35938 vector unsigned short); 35939 vector unsigned short vec_vslh (vector unsigned short, 35940 vector unsigned short); 35941 35942 vector signed char vec_vslb (vector signed char, vector unsigned char); 35943 vector unsigned char vec_vslb (vector unsigned char, 35944 vector unsigned char); 35945 35946 vector float vec_sld (vector float, vector float, const int); 35947 vector signed int vec_sld (vector signed int, 35948 vector signed int, 35949 const int); 35950 vector unsigned int vec_sld (vector unsigned int, 35951 vector unsigned int, 35952 const int); 35953 vector bool int vec_sld (vector bool int, 35954 vector bool int, 35955 const int); 35956 vector signed short vec_sld (vector signed short, 35957 vector signed short, 35958 const int); 35959 vector unsigned short vec_sld (vector unsigned short, 35960 vector unsigned short, 35961 const int); 35962 vector bool short vec_sld (vector bool short, 35963 vector bool short, 35964 const int); 35965 vector pixel vec_sld (vector pixel, 35966 vector pixel, 35967 const int); 35968 vector signed char vec_sld (vector signed char, 35969 vector signed char, 35970 const int); 35971 vector unsigned char vec_sld (vector unsigned char, 35972 vector unsigned char, 35973 const int); 35974 vector bool char vec_sld (vector bool char, 35975 vector bool char, 35976 const int); 35977 35978 vector signed int vec_sll (vector signed int, 35979 vector unsigned int); 35980 vector signed int vec_sll (vector signed int, 35981 vector unsigned short); 35982 vector signed int vec_sll (vector signed int, 35983 vector unsigned char); 35984 vector unsigned int vec_sll (vector unsigned int, 35985 vector unsigned int); 35986 vector unsigned int vec_sll (vector unsigned int, 35987 vector unsigned short); 35988 vector unsigned int vec_sll (vector unsigned int, 35989 vector unsigned char); 35990 vector bool int vec_sll (vector bool int, 35991 vector unsigned int); 35992 vector bool int vec_sll (vector bool int, 35993 vector unsigned short); 35994 vector bool int vec_sll (vector bool int, 35995 vector unsigned char); 35996 vector signed short vec_sll (vector signed short, 35997 vector unsigned int); 35998 vector signed short vec_sll (vector signed short, 35999 vector unsigned short); 36000 vector signed short vec_sll (vector signed short, 36001 vector unsigned char); 36002 vector unsigned short vec_sll (vector unsigned short, 36003 vector unsigned int); 36004 vector unsigned short vec_sll (vector unsigned short, 36005 vector unsigned short); 36006 vector unsigned short vec_sll (vector unsigned short, 36007 vector unsigned char); 36008 vector bool short vec_sll (vector bool short, vector unsigned int); 36009 vector bool short vec_sll (vector bool short, vector unsigned short); 36010 vector bool short vec_sll (vector bool short, vector unsigned char); 36011 vector pixel vec_sll (vector pixel, vector unsigned int); 36012 vector pixel vec_sll (vector pixel, vector unsigned short); 36013 vector pixel vec_sll (vector pixel, vector unsigned char); 36014 vector signed char vec_sll (vector signed char, vector unsigned int); 36015 vector signed char vec_sll (vector signed char, vector unsigned short); 36016 vector signed char vec_sll (vector signed char, vector unsigned char); 36017 vector unsigned char vec_sll (vector unsigned char, 36018 vector unsigned int); 36019 vector unsigned char vec_sll (vector unsigned char, 36020 vector unsigned short); 36021 vector unsigned char vec_sll (vector unsigned char, 36022 vector unsigned char); 36023 vector bool char vec_sll (vector bool char, vector unsigned int); 36024 vector bool char vec_sll (vector bool char, vector unsigned short); 36025 vector bool char vec_sll (vector bool char, vector unsigned char); 36026 36027 vector float vec_slo (vector float, vector signed char); 36028 vector float vec_slo (vector float, vector unsigned char); 36029 vector signed int vec_slo (vector signed int, vector signed char); 36030 vector signed int vec_slo (vector signed int, vector unsigned char); 36031 vector unsigned int vec_slo (vector unsigned int, vector signed char); 36032 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 36033 vector signed short vec_slo (vector signed short, vector signed char); 36034 vector signed short vec_slo (vector signed short, vector unsigned char); 36035 vector unsigned short vec_slo (vector unsigned short, 36036 vector signed char); 36037 vector unsigned short vec_slo (vector unsigned short, 36038 vector unsigned char); 36039 vector pixel vec_slo (vector pixel, vector signed char); 36040 vector pixel vec_slo (vector pixel, vector unsigned char); 36041 vector signed char vec_slo (vector signed char, vector signed char); 36042 vector signed char vec_slo (vector signed char, vector unsigned char); 36043 vector unsigned char vec_slo (vector unsigned char, vector signed char); 36044 vector unsigned char vec_slo (vector unsigned char, 36045 vector unsigned char); 36046 36047 vector signed char vec_splat (vector signed char, const int); 36048 vector unsigned char vec_splat (vector unsigned char, const int); 36049 vector bool char vec_splat (vector bool char, const int); 36050 vector signed short vec_splat (vector signed short, const int); 36051 vector unsigned short vec_splat (vector unsigned short, const int); 36052 vector bool short vec_splat (vector bool short, const int); 36053 vector pixel vec_splat (vector pixel, const int); 36054 vector float vec_splat (vector float, const int); 36055 vector signed int vec_splat (vector signed int, const int); 36056 vector unsigned int vec_splat (vector unsigned int, const int); 36057 vector bool int vec_splat (vector bool int, const int); 36058 36059 vector float vec_vspltw (vector float, const int); 36060 vector signed int vec_vspltw (vector signed int, const int); 36061 vector unsigned int vec_vspltw (vector unsigned int, const int); 36062 vector bool int vec_vspltw (vector bool int, const int); 36063 36064 vector bool short vec_vsplth (vector bool short, const int); 36065 vector signed short vec_vsplth (vector signed short, const int); 36066 vector unsigned short vec_vsplth (vector unsigned short, const int); 36067 vector pixel vec_vsplth (vector pixel, const int); 36068 36069 vector signed char vec_vspltb (vector signed char, const int); 36070 vector unsigned char vec_vspltb (vector unsigned char, const int); 36071 vector bool char vec_vspltb (vector bool char, const int); 36072 36073 vector signed char vec_splat_s8 (const int); 36074 36075 vector signed short vec_splat_s16 (const int); 36076 36077 vector signed int vec_splat_s32 (const int); 36078 36079 vector unsigned char vec_splat_u8 (const int); 36080 36081 vector unsigned short vec_splat_u16 (const int); 36082 36083 vector unsigned int vec_splat_u32 (const int); 36084 36085 vector signed char vec_sr (vector signed char, vector unsigned char); 36086 vector unsigned char vec_sr (vector unsigned char, 36087 vector unsigned char); 36088 vector signed short vec_sr (vector signed short, 36089 vector unsigned short); 36090 vector unsigned short vec_sr (vector unsigned short, 36091 vector unsigned short); 36092 vector signed int vec_sr (vector signed int, vector unsigned int); 36093 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 36094 36095 vector signed int vec_vsrw (vector signed int, vector unsigned int); 36096 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 36097 36098 vector signed short vec_vsrh (vector signed short, 36099 vector unsigned short); 36100 vector unsigned short vec_vsrh (vector unsigned short, 36101 vector unsigned short); 36102 36103 vector signed char vec_vsrb (vector signed char, vector unsigned char); 36104 vector unsigned char vec_vsrb (vector unsigned char, 36105 vector unsigned char); 36106 36107 vector signed char vec_sra (vector signed char, vector unsigned char); 36108 vector unsigned char vec_sra (vector unsigned char, 36109 vector unsigned char); 36110 vector signed short vec_sra (vector signed short, 36111 vector unsigned short); 36112 vector unsigned short vec_sra (vector unsigned short, 36113 vector unsigned short); 36114 vector signed int vec_sra (vector signed int, vector unsigned int); 36115 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 36116 36117 vector signed int vec_vsraw (vector signed int, vector unsigned int); 36118 vector unsigned int vec_vsraw (vector unsigned int, 36119 vector unsigned int); 36120 36121 vector signed short vec_vsrah (vector signed short, 36122 vector unsigned short); 36123 vector unsigned short vec_vsrah (vector unsigned short, 36124 vector unsigned short); 36125 36126 vector signed char vec_vsrab (vector signed char, vector unsigned char); 36127 vector unsigned char vec_vsrab (vector unsigned char, 36128 vector unsigned char); 36129 36130 vector signed int vec_srl (vector signed int, vector unsigned int); 36131 vector signed int vec_srl (vector signed int, vector unsigned short); 36132 vector signed int vec_srl (vector signed int, vector unsigned char); 36133 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 36134 vector unsigned int vec_srl (vector unsigned int, 36135 vector unsigned short); 36136 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 36137 vector bool int vec_srl (vector bool int, vector unsigned int); 36138 vector bool int vec_srl (vector bool int, vector unsigned short); 36139 vector bool int vec_srl (vector bool int, vector unsigned char); 36140 vector signed short vec_srl (vector signed short, vector unsigned int); 36141 vector signed short vec_srl (vector signed short, 36142 vector unsigned short); 36143 vector signed short vec_srl (vector signed short, vector unsigned char); 36144 vector unsigned short vec_srl (vector unsigned short, 36145 vector unsigned int); 36146 vector unsigned short vec_srl (vector unsigned short, 36147 vector unsigned short); 36148 vector unsigned short vec_srl (vector unsigned short, 36149 vector unsigned char); 36150 vector bool short vec_srl (vector bool short, vector unsigned int); 36151 vector bool short vec_srl (vector bool short, vector unsigned short); 36152 vector bool short vec_srl (vector bool short, vector unsigned char); 36153 vector pixel vec_srl (vector pixel, vector unsigned int); 36154 vector pixel vec_srl (vector pixel, vector unsigned short); 36155 vector pixel vec_srl (vector pixel, vector unsigned char); 36156 vector signed char vec_srl (vector signed char, vector unsigned int); 36157 vector signed char vec_srl (vector signed char, vector unsigned short); 36158 vector signed char vec_srl (vector signed char, vector unsigned char); 36159 vector unsigned char vec_srl (vector unsigned char, 36160 vector unsigned int); 36161 vector unsigned char vec_srl (vector unsigned char, 36162 vector unsigned short); 36163 vector unsigned char vec_srl (vector unsigned char, 36164 vector unsigned char); 36165 vector bool char vec_srl (vector bool char, vector unsigned int); 36166 vector bool char vec_srl (vector bool char, vector unsigned short); 36167 vector bool char vec_srl (vector bool char, vector unsigned char); 36168 36169 vector float vec_sro (vector float, vector signed char); 36170 vector float vec_sro (vector float, vector unsigned char); 36171 vector signed int vec_sro (vector signed int, vector signed char); 36172 vector signed int vec_sro (vector signed int, vector unsigned char); 36173 vector unsigned int vec_sro (vector unsigned int, vector signed char); 36174 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 36175 vector signed short vec_sro (vector signed short, vector signed char); 36176 vector signed short vec_sro (vector signed short, vector unsigned char); 36177 vector unsigned short vec_sro (vector unsigned short, 36178 vector signed char); 36179 vector unsigned short vec_sro (vector unsigned short, 36180 vector unsigned char); 36181 vector pixel vec_sro (vector pixel, vector signed char); 36182 vector pixel vec_sro (vector pixel, vector unsigned char); 36183 vector signed char vec_sro (vector signed char, vector signed char); 36184 vector signed char vec_sro (vector signed char, vector unsigned char); 36185 vector unsigned char vec_sro (vector unsigned char, vector signed char); 36186 vector unsigned char vec_sro (vector unsigned char, 36187 vector unsigned char); 36188 36189 void vec_st (vector float, int, vector float *); 36190 void vec_st (vector float, int, float *); 36191 void vec_st (vector signed int, int, vector signed int *); 36192 void vec_st (vector signed int, int, int *); 36193 void vec_st (vector unsigned int, int, vector unsigned int *); 36194 void vec_st (vector unsigned int, int, unsigned int *); 36195 void vec_st (vector bool int, int, vector bool int *); 36196 void vec_st (vector bool int, int, unsigned int *); 36197 void vec_st (vector bool int, int, int *); 36198 void vec_st (vector signed short, int, vector signed short *); 36199 void vec_st (vector signed short, int, short *); 36200 void vec_st (vector unsigned short, int, vector unsigned short *); 36201 void vec_st (vector unsigned short, int, unsigned short *); 36202 void vec_st (vector bool short, int, vector bool short *); 36203 void vec_st (vector bool short, int, unsigned short *); 36204 void vec_st (vector pixel, int, vector pixel *); 36205 void vec_st (vector pixel, int, unsigned short *); 36206 void vec_st (vector pixel, int, short *); 36207 void vec_st (vector bool short, int, short *); 36208 void vec_st (vector signed char, int, vector signed char *); 36209 void vec_st (vector signed char, int, signed char *); 36210 void vec_st (vector unsigned char, int, vector unsigned char *); 36211 void vec_st (vector unsigned char, int, unsigned char *); 36212 void vec_st (vector bool char, int, vector bool char *); 36213 void vec_st (vector bool char, int, unsigned char *); 36214 void vec_st (vector bool char, int, signed char *); 36215 36216 void vec_ste (vector signed char, int, signed char *); 36217 void vec_ste (vector unsigned char, int, unsigned char *); 36218 void vec_ste (vector bool char, int, signed char *); 36219 void vec_ste (vector bool char, int, unsigned char *); 36220 void vec_ste (vector signed short, int, short *); 36221 void vec_ste (vector unsigned short, int, unsigned short *); 36222 void vec_ste (vector bool short, int, short *); 36223 void vec_ste (vector bool short, int, unsigned short *); 36224 void vec_ste (vector pixel, int, short *); 36225 void vec_ste (vector pixel, int, unsigned short *); 36226 void vec_ste (vector float, int, float *); 36227 void vec_ste (vector signed int, int, int *); 36228 void vec_ste (vector unsigned int, int, unsigned int *); 36229 void vec_ste (vector bool int, int, int *); 36230 void vec_ste (vector bool int, int, unsigned int *); 36231 36232 void vec_stvewx (vector float, int, float *); 36233 void vec_stvewx (vector signed int, int, int *); 36234 void vec_stvewx (vector unsigned int, int, unsigned int *); 36235 void vec_stvewx (vector bool int, int, int *); 36236 void vec_stvewx (vector bool int, int, unsigned int *); 36237 36238 void vec_stvehx (vector signed short, int, short *); 36239 void vec_stvehx (vector unsigned short, int, unsigned short *); 36240 void vec_stvehx (vector bool short, int, short *); 36241 void vec_stvehx (vector bool short, int, unsigned short *); 36242 void vec_stvehx (vector pixel, int, short *); 36243 void vec_stvehx (vector pixel, int, unsigned short *); 36244 36245 void vec_stvebx (vector signed char, int, signed char *); 36246 void vec_stvebx (vector unsigned char, int, unsigned char *); 36247 void vec_stvebx (vector bool char, int, signed char *); 36248 void vec_stvebx (vector bool char, int, unsigned char *); 36249 36250 void vec_stl (vector float, int, vector float *); 36251 void vec_stl (vector float, int, float *); 36252 void vec_stl (vector signed int, int, vector signed int *); 36253 void vec_stl (vector signed int, int, int *); 36254 void vec_stl (vector unsigned int, int, vector unsigned int *); 36255 void vec_stl (vector unsigned int, int, unsigned int *); 36256 void vec_stl (vector bool int, int, vector bool int *); 36257 void vec_stl (vector bool int, int, unsigned int *); 36258 void vec_stl (vector bool int, int, int *); 36259 void vec_stl (vector signed short, int, vector signed short *); 36260 void vec_stl (vector signed short, int, short *); 36261 void vec_stl (vector unsigned short, int, vector unsigned short *); 36262 void vec_stl (vector unsigned short, int, unsigned short *); 36263 void vec_stl (vector bool short, int, vector bool short *); 36264 void vec_stl (vector bool short, int, unsigned short *); 36265 void vec_stl (vector bool short, int, short *); 36266 void vec_stl (vector pixel, int, vector pixel *); 36267 void vec_stl (vector pixel, int, unsigned short *); 36268 void vec_stl (vector pixel, int, short *); 36269 void vec_stl (vector signed char, int, vector signed char *); 36270 void vec_stl (vector signed char, int, signed char *); 36271 void vec_stl (vector unsigned char, int, vector unsigned char *); 36272 void vec_stl (vector unsigned char, int, unsigned char *); 36273 void vec_stl (vector bool char, int, vector bool char *); 36274 void vec_stl (vector bool char, int, unsigned char *); 36275 void vec_stl (vector bool char, int, signed char *); 36276 36277 vector signed char vec_sub (vector bool char, vector signed char); 36278 vector signed char vec_sub (vector signed char, vector bool char); 36279 vector signed char vec_sub (vector signed char, vector signed char); 36280 vector unsigned char vec_sub (vector bool char, vector unsigned char); 36281 vector unsigned char vec_sub (vector unsigned char, vector bool char); 36282 vector unsigned char vec_sub (vector unsigned char, 36283 vector unsigned char); 36284 vector signed short vec_sub (vector bool short, vector signed short); 36285 vector signed short vec_sub (vector signed short, vector bool short); 36286 vector signed short vec_sub (vector signed short, vector signed short); 36287 vector unsigned short vec_sub (vector bool short, 36288 vector unsigned short); 36289 vector unsigned short vec_sub (vector unsigned short, 36290 vector bool short); 36291 vector unsigned short vec_sub (vector unsigned short, 36292 vector unsigned short); 36293 vector signed int vec_sub (vector bool int, vector signed int); 36294 vector signed int vec_sub (vector signed int, vector bool int); 36295 vector signed int vec_sub (vector signed int, vector signed int); 36296 vector unsigned int vec_sub (vector bool int, vector unsigned int); 36297 vector unsigned int vec_sub (vector unsigned int, vector bool int); 36298 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 36299 vector float vec_sub (vector float, vector float); 36300 36301 vector float vec_vsubfp (vector float, vector float); 36302 36303 vector signed int vec_vsubuwm (vector bool int, vector signed int); 36304 vector signed int vec_vsubuwm (vector signed int, vector bool int); 36305 vector signed int vec_vsubuwm (vector signed int, vector signed int); 36306 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 36307 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 36308 vector unsigned int vec_vsubuwm (vector unsigned int, 36309 vector unsigned int); 36310 36311 vector signed short vec_vsubuhm (vector bool short, 36312 vector signed short); 36313 vector signed short vec_vsubuhm (vector signed short, 36314 vector bool short); 36315 vector signed short vec_vsubuhm (vector signed short, 36316 vector signed short); 36317 vector unsigned short vec_vsubuhm (vector bool short, 36318 vector unsigned short); 36319 vector unsigned short vec_vsubuhm (vector unsigned short, 36320 vector bool short); 36321 vector unsigned short vec_vsubuhm (vector unsigned short, 36322 vector unsigned short); 36323 36324 vector signed char vec_vsububm (vector bool char, vector signed char); 36325 vector signed char vec_vsububm (vector signed char, vector bool char); 36326 vector signed char vec_vsububm (vector signed char, vector signed char); 36327 vector unsigned char vec_vsububm (vector bool char, 36328 vector unsigned char); 36329 vector unsigned char vec_vsububm (vector unsigned char, 36330 vector bool char); 36331 vector unsigned char vec_vsububm (vector unsigned char, 36332 vector unsigned char); 36333 36334 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 36335 36336 vector unsigned char vec_subs (vector bool char, vector unsigned char); 36337 vector unsigned char vec_subs (vector unsigned char, vector bool char); 36338 vector unsigned char vec_subs (vector unsigned char, 36339 vector unsigned char); 36340 vector signed char vec_subs (vector bool char, vector signed char); 36341 vector signed char vec_subs (vector signed char, vector bool char); 36342 vector signed char vec_subs (vector signed char, vector signed char); 36343 vector unsigned short vec_subs (vector bool short, 36344 vector unsigned short); 36345 vector unsigned short vec_subs (vector unsigned short, 36346 vector bool short); 36347 vector unsigned short vec_subs (vector unsigned short, 36348 vector unsigned short); 36349 vector signed short vec_subs (vector bool short, vector signed short); 36350 vector signed short vec_subs (vector signed short, vector bool short); 36351 vector signed short vec_subs (vector signed short, vector signed short); 36352 vector unsigned int vec_subs (vector bool int, vector unsigned int); 36353 vector unsigned int vec_subs (vector unsigned int, vector bool int); 36354 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 36355 vector signed int vec_subs (vector bool int, vector signed int); 36356 vector signed int vec_subs (vector signed int, vector bool int); 36357 vector signed int vec_subs (vector signed int, vector signed int); 36358 36359 vector signed int vec_vsubsws (vector bool int, vector signed int); 36360 vector signed int vec_vsubsws (vector signed int, vector bool int); 36361 vector signed int vec_vsubsws (vector signed int, vector signed int); 36362 36363 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 36364 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 36365 vector unsigned int vec_vsubuws (vector unsigned int, 36366 vector unsigned int); 36367 36368 vector signed short vec_vsubshs (vector bool short, 36369 vector signed short); 36370 vector signed short vec_vsubshs (vector signed short, 36371 vector bool short); 36372 vector signed short vec_vsubshs (vector signed short, 36373 vector signed short); 36374 36375 vector unsigned short vec_vsubuhs (vector bool short, 36376 vector unsigned short); 36377 vector unsigned short vec_vsubuhs (vector unsigned short, 36378 vector bool short); 36379 vector unsigned short vec_vsubuhs (vector unsigned short, 36380 vector unsigned short); 36381 36382 vector signed char vec_vsubsbs (vector bool char, vector signed char); 36383 vector signed char vec_vsubsbs (vector signed char, vector bool char); 36384 vector signed char vec_vsubsbs (vector signed char, vector signed char); 36385 36386 vector unsigned char vec_vsububs (vector bool char, 36387 vector unsigned char); 36388 vector unsigned char vec_vsububs (vector unsigned char, 36389 vector bool char); 36390 vector unsigned char vec_vsububs (vector unsigned char, 36391 vector unsigned char); 36392 36393 vector unsigned int vec_sum4s (vector unsigned char, 36394 vector unsigned int); 36395 vector signed int vec_sum4s (vector signed char, vector signed int); 36396 vector signed int vec_sum4s (vector signed short, vector signed int); 36397 36398 vector signed int vec_vsum4shs (vector signed short, vector signed int); 36399 36400 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 36401 36402 vector unsigned int vec_vsum4ubs (vector unsigned char, 36403 vector unsigned int); 36404 36405 vector signed int vec_sum2s (vector signed int, vector signed int); 36406 36407 vector signed int vec_sums (vector signed int, vector signed int); 36408 36409 vector float vec_trunc (vector float); 36410 36411 vector signed short vec_unpackh (vector signed char); 36412 vector bool short vec_unpackh (vector bool char); 36413 vector signed int vec_unpackh (vector signed short); 36414 vector bool int vec_unpackh (vector bool short); 36415 vector unsigned int vec_unpackh (vector pixel); 36416 36417 vector bool int vec_vupkhsh (vector bool short); 36418 vector signed int vec_vupkhsh (vector signed short); 36419 36420 vector unsigned int vec_vupkhpx (vector pixel); 36421 36422 vector bool short vec_vupkhsb (vector bool char); 36423 vector signed short vec_vupkhsb (vector signed char); 36424 36425 vector signed short vec_unpackl (vector signed char); 36426 vector bool short vec_unpackl (vector bool char); 36427 vector unsigned int vec_unpackl (vector pixel); 36428 vector signed int vec_unpackl (vector signed short); 36429 vector bool int vec_unpackl (vector bool short); 36430 36431 vector unsigned int vec_vupklpx (vector pixel); 36432 36433 vector bool int vec_vupklsh (vector bool short); 36434 vector signed int vec_vupklsh (vector signed short); 36435 36436 vector bool short vec_vupklsb (vector bool char); 36437 vector signed short vec_vupklsb (vector signed char); 36438 36439 vector float vec_xor (vector float, vector float); 36440 vector float vec_xor (vector float, vector bool int); 36441 vector float vec_xor (vector bool int, vector float); 36442 vector bool int vec_xor (vector bool int, vector bool int); 36443 vector signed int vec_xor (vector bool int, vector signed int); 36444 vector signed int vec_xor (vector signed int, vector bool int); 36445 vector signed int vec_xor (vector signed int, vector signed int); 36446 vector unsigned int vec_xor (vector bool int, vector unsigned int); 36447 vector unsigned int vec_xor (vector unsigned int, vector bool int); 36448 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 36449 vector bool short vec_xor (vector bool short, vector bool short); 36450 vector signed short vec_xor (vector bool short, vector signed short); 36451 vector signed short vec_xor (vector signed short, vector bool short); 36452 vector signed short vec_xor (vector signed short, vector signed short); 36453 vector unsigned short vec_xor (vector bool short, 36454 vector unsigned short); 36455 vector unsigned short vec_xor (vector unsigned short, 36456 vector bool short); 36457 vector unsigned short vec_xor (vector unsigned short, 36458 vector unsigned short); 36459 vector signed char vec_xor (vector bool char, vector signed char); 36460 vector bool char vec_xor (vector bool char, vector bool char); 36461 vector signed char vec_xor (vector signed char, vector bool char); 36462 vector signed char vec_xor (vector signed char, vector signed char); 36463 vector unsigned char vec_xor (vector bool char, vector unsigned char); 36464 vector unsigned char vec_xor (vector unsigned char, vector bool char); 36465 vector unsigned char vec_xor (vector unsigned char, 36466 vector unsigned char); 36467 36468 int vec_all_eq (vector signed char, vector bool char); 36469 int vec_all_eq (vector signed char, vector signed char); 36470 int vec_all_eq (vector unsigned char, vector bool char); 36471 int vec_all_eq (vector unsigned char, vector unsigned char); 36472 int vec_all_eq (vector bool char, vector bool char); 36473 int vec_all_eq (vector bool char, vector unsigned char); 36474 int vec_all_eq (vector bool char, vector signed char); 36475 int vec_all_eq (vector signed short, vector bool short); 36476 int vec_all_eq (vector signed short, vector signed short); 36477 int vec_all_eq (vector unsigned short, vector bool short); 36478 int vec_all_eq (vector unsigned short, vector unsigned short); 36479 int vec_all_eq (vector bool short, vector bool short); 36480 int vec_all_eq (vector bool short, vector unsigned short); 36481 int vec_all_eq (vector bool short, vector signed short); 36482 int vec_all_eq (vector pixel, vector pixel); 36483 int vec_all_eq (vector signed int, vector bool int); 36484 int vec_all_eq (vector signed int, vector signed int); 36485 int vec_all_eq (vector unsigned int, vector bool int); 36486 int vec_all_eq (vector unsigned int, vector unsigned int); 36487 int vec_all_eq (vector bool int, vector bool int); 36488 int vec_all_eq (vector bool int, vector unsigned int); 36489 int vec_all_eq (vector bool int, vector signed int); 36490 int vec_all_eq (vector float, vector float); 36491 36492 int vec_all_ge (vector bool char, vector unsigned char); 36493 int vec_all_ge (vector unsigned char, vector bool char); 36494 int vec_all_ge (vector unsigned char, vector unsigned char); 36495 int vec_all_ge (vector bool char, vector signed char); 36496 int vec_all_ge (vector signed char, vector bool char); 36497 int vec_all_ge (vector signed char, vector signed char); 36498 int vec_all_ge (vector bool short, vector unsigned short); 36499 int vec_all_ge (vector unsigned short, vector bool short); 36500 int vec_all_ge (vector unsigned short, vector unsigned short); 36501 int vec_all_ge (vector signed short, vector signed short); 36502 int vec_all_ge (vector bool short, vector signed short); 36503 int vec_all_ge (vector signed short, vector bool short); 36504 int vec_all_ge (vector bool int, vector unsigned int); 36505 int vec_all_ge (vector unsigned int, vector bool int); 36506 int vec_all_ge (vector unsigned int, vector unsigned int); 36507 int vec_all_ge (vector bool int, vector signed int); 36508 int vec_all_ge (vector signed int, vector bool int); 36509 int vec_all_ge (vector signed int, vector signed int); 36510 int vec_all_ge (vector float, vector float); 36511 36512 int vec_all_gt (vector bool char, vector unsigned char); 36513 int vec_all_gt (vector unsigned char, vector bool char); 36514 int vec_all_gt (vector unsigned char, vector unsigned char); 36515 int vec_all_gt (vector bool char, vector signed char); 36516 int vec_all_gt (vector signed char, vector bool char); 36517 int vec_all_gt (vector signed char, vector signed char); 36518 int vec_all_gt (vector bool short, vector unsigned short); 36519 int vec_all_gt (vector unsigned short, vector bool short); 36520 int vec_all_gt (vector unsigned short, vector unsigned short); 36521 int vec_all_gt (vector bool short, vector signed short); 36522 int vec_all_gt (vector signed short, vector bool short); 36523 int vec_all_gt (vector signed short, vector signed short); 36524 int vec_all_gt (vector bool int, vector unsigned int); 36525 int vec_all_gt (vector unsigned int, vector bool int); 36526 int vec_all_gt (vector unsigned int, vector unsigned int); 36527 int vec_all_gt (vector bool int, vector signed int); 36528 int vec_all_gt (vector signed int, vector bool int); 36529 int vec_all_gt (vector signed int, vector signed int); 36530 int vec_all_gt (vector float, vector float); 36531 36532 int vec_all_in (vector float, vector float); 36533 36534 int vec_all_le (vector bool char, vector unsigned char); 36535 int vec_all_le (vector unsigned char, vector bool char); 36536 int vec_all_le (vector unsigned char, vector unsigned char); 36537 int vec_all_le (vector bool char, vector signed char); 36538 int vec_all_le (vector signed char, vector bool char); 36539 int vec_all_le (vector signed char, vector signed char); 36540 int vec_all_le (vector bool short, vector unsigned short); 36541 int vec_all_le (vector unsigned short, vector bool short); 36542 int vec_all_le (vector unsigned short, vector unsigned short); 36543 int vec_all_le (vector bool short, vector signed short); 36544 int vec_all_le (vector signed short, vector bool short); 36545 int vec_all_le (vector signed short, vector signed short); 36546 int vec_all_le (vector bool int, vector unsigned int); 36547 int vec_all_le (vector unsigned int, vector bool int); 36548 int vec_all_le (vector unsigned int, vector unsigned int); 36549 int vec_all_le (vector bool int, vector signed int); 36550 int vec_all_le (vector signed int, vector bool int); 36551 int vec_all_le (vector signed int, vector signed int); 36552 int vec_all_le (vector float, vector float); 36553 36554 int vec_all_lt (vector bool char, vector unsigned char); 36555 int vec_all_lt (vector unsigned char, vector bool char); 36556 int vec_all_lt (vector unsigned char, vector unsigned char); 36557 int vec_all_lt (vector bool char, vector signed char); 36558 int vec_all_lt (vector signed char, vector bool char); 36559 int vec_all_lt (vector signed char, vector signed char); 36560 int vec_all_lt (vector bool short, vector unsigned short); 36561 int vec_all_lt (vector unsigned short, vector bool short); 36562 int vec_all_lt (vector unsigned short, vector unsigned short); 36563 int vec_all_lt (vector bool short, vector signed short); 36564 int vec_all_lt (vector signed short, vector bool short); 36565 int vec_all_lt (vector signed short, vector signed short); 36566 int vec_all_lt (vector bool int, vector unsigned int); 36567 int vec_all_lt (vector unsigned int, vector bool int); 36568 int vec_all_lt (vector unsigned int, vector unsigned int); 36569 int vec_all_lt (vector bool int, vector signed int); 36570 int vec_all_lt (vector signed int, vector bool int); 36571 int vec_all_lt (vector signed int, vector signed int); 36572 int vec_all_lt (vector float, vector float); 36573 36574 int vec_all_nan (vector float); 36575 36576 int vec_all_ne (vector signed char, vector bool char); 36577 int vec_all_ne (vector signed char, vector signed char); 36578 int vec_all_ne (vector unsigned char, vector bool char); 36579 int vec_all_ne (vector unsigned char, vector unsigned char); 36580 int vec_all_ne (vector bool char, vector bool char); 36581 int vec_all_ne (vector bool char, vector unsigned char); 36582 int vec_all_ne (vector bool char, vector signed char); 36583 int vec_all_ne (vector signed short, vector bool short); 36584 int vec_all_ne (vector signed short, vector signed short); 36585 int vec_all_ne (vector unsigned short, vector bool short); 36586 int vec_all_ne (vector unsigned short, vector unsigned short); 36587 int vec_all_ne (vector bool short, vector bool short); 36588 int vec_all_ne (vector bool short, vector unsigned short); 36589 int vec_all_ne (vector bool short, vector signed short); 36590 int vec_all_ne (vector pixel, vector pixel); 36591 int vec_all_ne (vector signed int, vector bool int); 36592 int vec_all_ne (vector signed int, vector signed int); 36593 int vec_all_ne (vector unsigned int, vector bool int); 36594 int vec_all_ne (vector unsigned int, vector unsigned int); 36595 int vec_all_ne (vector bool int, vector bool int); 36596 int vec_all_ne (vector bool int, vector unsigned int); 36597 int vec_all_ne (vector bool int, vector signed int); 36598 int vec_all_ne (vector float, vector float); 36599 36600 int vec_all_nge (vector float, vector float); 36601 36602 int vec_all_ngt (vector float, vector float); 36603 36604 int vec_all_nle (vector float, vector float); 36605 36606 int vec_all_nlt (vector float, vector float); 36607 36608 int vec_all_numeric (vector float); 36609 36610 int vec_any_eq (vector signed char, vector bool char); 36611 int vec_any_eq (vector signed char, vector signed char); 36612 int vec_any_eq (vector unsigned char, vector bool char); 36613 int vec_any_eq (vector unsigned char, vector unsigned char); 36614 int vec_any_eq (vector bool char, vector bool char); 36615 int vec_any_eq (vector bool char, vector unsigned char); 36616 int vec_any_eq (vector bool char, vector signed char); 36617 int vec_any_eq (vector signed short, vector bool short); 36618 int vec_any_eq (vector signed short, vector signed short); 36619 int vec_any_eq (vector unsigned short, vector bool short); 36620 int vec_any_eq (vector unsigned short, vector unsigned short); 36621 int vec_any_eq (vector bool short, vector bool short); 36622 int vec_any_eq (vector bool short, vector unsigned short); 36623 int vec_any_eq (vector bool short, vector signed short); 36624 int vec_any_eq (vector pixel, vector pixel); 36625 int vec_any_eq (vector signed int, vector bool int); 36626 int vec_any_eq (vector signed int, vector signed int); 36627 int vec_any_eq (vector unsigned int, vector bool int); 36628 int vec_any_eq (vector unsigned int, vector unsigned int); 36629 int vec_any_eq (vector bool int, vector bool int); 36630 int vec_any_eq (vector bool int, vector unsigned int); 36631 int vec_any_eq (vector bool int, vector signed int); 36632 int vec_any_eq (vector float, vector float); 36633 36634 int vec_any_ge (vector signed char, vector bool char); 36635 int vec_any_ge (vector unsigned char, vector bool char); 36636 int vec_any_ge (vector unsigned char, vector unsigned char); 36637 int vec_any_ge (vector signed char, vector signed char); 36638 int vec_any_ge (vector bool char, vector unsigned char); 36639 int vec_any_ge (vector bool char, vector signed char); 36640 int vec_any_ge (vector unsigned short, vector bool short); 36641 int vec_any_ge (vector unsigned short, vector unsigned short); 36642 int vec_any_ge (vector signed short, vector signed short); 36643 int vec_any_ge (vector signed short, vector bool short); 36644 int vec_any_ge (vector bool short, vector unsigned short); 36645 int vec_any_ge (vector bool short, vector signed short); 36646 int vec_any_ge (vector signed int, vector bool int); 36647 int vec_any_ge (vector unsigned int, vector bool int); 36648 int vec_any_ge (vector unsigned int, vector unsigned int); 36649 int vec_any_ge (vector signed int, vector signed int); 36650 int vec_any_ge (vector bool int, vector unsigned int); 36651 int vec_any_ge (vector bool int, vector signed int); 36652 int vec_any_ge (vector float, vector float); 36653 36654 int vec_any_gt (vector bool char, vector unsigned char); 36655 int vec_any_gt (vector unsigned char, vector bool char); 36656 int vec_any_gt (vector unsigned char, vector unsigned char); 36657 int vec_any_gt (vector bool char, vector signed char); 36658 int vec_any_gt (vector signed char, vector bool char); 36659 int vec_any_gt (vector signed char, vector signed char); 36660 int vec_any_gt (vector bool short, vector unsigned short); 36661 int vec_any_gt (vector unsigned short, vector bool short); 36662 int vec_any_gt (vector unsigned short, vector unsigned short); 36663 int vec_any_gt (vector bool short, vector signed short); 36664 int vec_any_gt (vector signed short, vector bool short); 36665 int vec_any_gt (vector signed short, vector signed short); 36666 int vec_any_gt (vector bool int, vector unsigned int); 36667 int vec_any_gt (vector unsigned int, vector bool int); 36668 int vec_any_gt (vector unsigned int, vector unsigned int); 36669 int vec_any_gt (vector bool int, vector signed int); 36670 int vec_any_gt (vector signed int, vector bool int); 36671 int vec_any_gt (vector signed int, vector signed int); 36672 int vec_any_gt (vector float, vector float); 36673 36674 int vec_any_le (vector bool char, vector unsigned char); 36675 int vec_any_le (vector unsigned char, vector bool char); 36676 int vec_any_le (vector unsigned char, vector unsigned char); 36677 int vec_any_le (vector bool char, vector signed char); 36678 int vec_any_le (vector signed char, vector bool char); 36679 int vec_any_le (vector signed char, vector signed char); 36680 int vec_any_le (vector bool short, vector unsigned short); 36681 int vec_any_le (vector unsigned short, vector bool short); 36682 int vec_any_le (vector unsigned short, vector unsigned short); 36683 int vec_any_le (vector bool short, vector signed short); 36684 int vec_any_le (vector signed short, vector bool short); 36685 int vec_any_le (vector signed short, vector signed short); 36686 int vec_any_le (vector bool int, vector unsigned int); 36687 int vec_any_le (vector unsigned int, vector bool int); 36688 int vec_any_le (vector unsigned int, vector unsigned int); 36689 int vec_any_le (vector bool int, vector signed int); 36690 int vec_any_le (vector signed int, vector bool int); 36691 int vec_any_le (vector signed int, vector signed int); 36692 int vec_any_le (vector float, vector float); 36693 36694 int vec_any_lt (vector bool char, vector unsigned char); 36695 int vec_any_lt (vector unsigned char, vector bool char); 36696 int vec_any_lt (vector unsigned char, vector unsigned char); 36697 int vec_any_lt (vector bool char, vector signed char); 36698 int vec_any_lt (vector signed char, vector bool char); 36699 int vec_any_lt (vector signed char, vector signed char); 36700 int vec_any_lt (vector bool short, vector unsigned short); 36701 int vec_any_lt (vector unsigned short, vector bool short); 36702 int vec_any_lt (vector unsigned short, vector unsigned short); 36703 int vec_any_lt (vector bool short, vector signed short); 36704 int vec_any_lt (vector signed short, vector bool short); 36705 int vec_any_lt (vector signed short, vector signed short); 36706 int vec_any_lt (vector bool int, vector unsigned int); 36707 int vec_any_lt (vector unsigned int, vector bool int); 36708 int vec_any_lt (vector unsigned int, vector unsigned int); 36709 int vec_any_lt (vector bool int, vector signed int); 36710 int vec_any_lt (vector signed int, vector bool int); 36711 int vec_any_lt (vector signed int, vector signed int); 36712 int vec_any_lt (vector float, vector float); 36713 36714 int vec_any_nan (vector float); 36715 36716 int vec_any_ne (vector signed char, vector bool char); 36717 int vec_any_ne (vector signed char, vector signed char); 36718 int vec_any_ne (vector unsigned char, vector bool char); 36719 int vec_any_ne (vector unsigned char, vector unsigned char); 36720 int vec_any_ne (vector bool char, vector bool char); 36721 int vec_any_ne (vector bool char, vector unsigned char); 36722 int vec_any_ne (vector bool char, vector signed char); 36723 int vec_any_ne (vector signed short, vector bool short); 36724 int vec_any_ne (vector signed short, vector signed short); 36725 int vec_any_ne (vector unsigned short, vector bool short); 36726 int vec_any_ne (vector unsigned short, vector unsigned short); 36727 int vec_any_ne (vector bool short, vector bool short); 36728 int vec_any_ne (vector bool short, vector unsigned short); 36729 int vec_any_ne (vector bool short, vector signed short); 36730 int vec_any_ne (vector pixel, vector pixel); 36731 int vec_any_ne (vector signed int, vector bool int); 36732 int vec_any_ne (vector signed int, vector signed int); 36733 int vec_any_ne (vector unsigned int, vector bool int); 36734 int vec_any_ne (vector unsigned int, vector unsigned int); 36735 int vec_any_ne (vector bool int, vector bool int); 36736 int vec_any_ne (vector bool int, vector unsigned int); 36737 int vec_any_ne (vector bool int, vector signed int); 36738 int vec_any_ne (vector float, vector float); 36739 36740 int vec_any_nge (vector float, vector float); 36741 36742 int vec_any_ngt (vector float, vector float); 36743 36744 int vec_any_nle (vector float, vector float); 36745 36746 int vec_any_nlt (vector float, vector float); 36747 36748 int vec_any_numeric (vector float); 36749 36750 int vec_any_out (vector float, vector float); 36751 36752 If the vector/scalar (VSX) instruction set is available, the following 36753additional functions are available: 36754 36755 vector double vec_abs (vector double); 36756 vector double vec_add (vector double, vector double); 36757 vector double vec_and (vector double, vector double); 36758 vector double vec_and (vector double, vector bool long); 36759 vector double vec_and (vector bool long, vector double); 36760 vector double vec_andc (vector double, vector double); 36761 vector double vec_andc (vector double, vector bool long); 36762 vector double vec_andc (vector bool long, vector double); 36763 vector double vec_ceil (vector double); 36764 vector bool long vec_cmpeq (vector double, vector double); 36765 vector bool long vec_cmpge (vector double, vector double); 36766 vector bool long vec_cmpgt (vector double, vector double); 36767 vector bool long vec_cmple (vector double, vector double); 36768 vector bool long vec_cmplt (vector double, vector double); 36769 vector float vec_div (vector float, vector float); 36770 vector double vec_div (vector double, vector double); 36771 vector double vec_floor (vector double); 36772 vector double vec_ld (int, const vector double *); 36773 vector double vec_ld (int, const double *); 36774 vector double vec_ldl (int, const vector double *); 36775 vector double vec_ldl (int, const double *); 36776 vector unsigned char vec_lvsl (int, const volatile double *); 36777 vector unsigned char vec_lvsr (int, const volatile double *); 36778 vector double vec_madd (vector double, vector double, vector double); 36779 vector double vec_max (vector double, vector double); 36780 vector double vec_min (vector double, vector double); 36781 vector float vec_msub (vector float, vector float, vector float); 36782 vector double vec_msub (vector double, vector double, vector double); 36783 vector float vec_mul (vector float, vector float); 36784 vector double vec_mul (vector double, vector double); 36785 vector float vec_nearbyint (vector float); 36786 vector double vec_nearbyint (vector double); 36787 vector float vec_nmadd (vector float, vector float, vector float); 36788 vector double vec_nmadd (vector double, vector double, vector double); 36789 vector double vec_nmsub (vector double, vector double, vector double); 36790 vector double vec_nor (vector double, vector double); 36791 vector double vec_or (vector double, vector double); 36792 vector double vec_or (vector double, vector bool long); 36793 vector double vec_or (vector bool long, vector double); 36794 vector double vec_perm (vector double, 36795 vector double, 36796 vector unsigned char); 36797 vector double vec_rint (vector double); 36798 vector double vec_recip (vector double, vector double); 36799 vector double vec_rsqrt (vector double); 36800 vector double vec_rsqrte (vector double); 36801 vector double vec_sel (vector double, vector double, vector bool long); 36802 vector double vec_sel (vector double, vector double, vector unsigned long); 36803 vector double vec_sub (vector double, vector double); 36804 vector float vec_sqrt (vector float); 36805 vector double vec_sqrt (vector double); 36806 void vec_st (vector double, int, vector double *); 36807 void vec_st (vector double, int, double *); 36808 vector double vec_trunc (vector double); 36809 vector double vec_xor (vector double, vector double); 36810 vector double vec_xor (vector double, vector bool long); 36811 vector double vec_xor (vector bool long, vector double); 36812 int vec_all_eq (vector double, vector double); 36813 int vec_all_ge (vector double, vector double); 36814 int vec_all_gt (vector double, vector double); 36815 int vec_all_le (vector double, vector double); 36816 int vec_all_lt (vector double, vector double); 36817 int vec_all_nan (vector double); 36818 int vec_all_ne (vector double, vector double); 36819 int vec_all_nge (vector double, vector double); 36820 int vec_all_ngt (vector double, vector double); 36821 int vec_all_nle (vector double, vector double); 36822 int vec_all_nlt (vector double, vector double); 36823 int vec_all_numeric (vector double); 36824 int vec_any_eq (vector double, vector double); 36825 int vec_any_ge (vector double, vector double); 36826 int vec_any_gt (vector double, vector double); 36827 int vec_any_le (vector double, vector double); 36828 int vec_any_lt (vector double, vector double); 36829 int vec_any_nan (vector double); 36830 int vec_any_ne (vector double, vector double); 36831 int vec_any_nge (vector double, vector double); 36832 int vec_any_ngt (vector double, vector double); 36833 int vec_any_nle (vector double, vector double); 36834 int vec_any_nlt (vector double, vector double); 36835 int vec_any_numeric (vector double); 36836 36837 vector double vec_vsx_ld (int, const vector double *); 36838 vector double vec_vsx_ld (int, const double *); 36839 vector float vec_vsx_ld (int, const vector float *); 36840 vector float vec_vsx_ld (int, const float *); 36841 vector bool int vec_vsx_ld (int, const vector bool int *); 36842 vector signed int vec_vsx_ld (int, const vector signed int *); 36843 vector signed int vec_vsx_ld (int, const int *); 36844 vector signed int vec_vsx_ld (int, const long *); 36845 vector unsigned int vec_vsx_ld (int, const vector unsigned int *); 36846 vector unsigned int vec_vsx_ld (int, const unsigned int *); 36847 vector unsigned int vec_vsx_ld (int, const unsigned long *); 36848 vector bool short vec_vsx_ld (int, const vector bool short *); 36849 vector pixel vec_vsx_ld (int, const vector pixel *); 36850 vector signed short vec_vsx_ld (int, const vector signed short *); 36851 vector signed short vec_vsx_ld (int, const short *); 36852 vector unsigned short vec_vsx_ld (int, const vector unsigned short *); 36853 vector unsigned short vec_vsx_ld (int, const unsigned short *); 36854 vector bool char vec_vsx_ld (int, const vector bool char *); 36855 vector signed char vec_vsx_ld (int, const vector signed char *); 36856 vector signed char vec_vsx_ld (int, const signed char *); 36857 vector unsigned char vec_vsx_ld (int, const vector unsigned char *); 36858 vector unsigned char vec_vsx_ld (int, const unsigned char *); 36859 36860 void vec_vsx_st (vector double, int, vector double *); 36861 void vec_vsx_st (vector double, int, double *); 36862 void vec_vsx_st (vector float, int, vector float *); 36863 void vec_vsx_st (vector float, int, float *); 36864 void vec_vsx_st (vector signed int, int, vector signed int *); 36865 void vec_vsx_st (vector signed int, int, int *); 36866 void vec_vsx_st (vector unsigned int, int, vector unsigned int *); 36867 void vec_vsx_st (vector unsigned int, int, unsigned int *); 36868 void vec_vsx_st (vector bool int, int, vector bool int *); 36869 void vec_vsx_st (vector bool int, int, unsigned int *); 36870 void vec_vsx_st (vector bool int, int, int *); 36871 void vec_vsx_st (vector signed short, int, vector signed short *); 36872 void vec_vsx_st (vector signed short, int, short *); 36873 void vec_vsx_st (vector unsigned short, int, vector unsigned short *); 36874 void vec_vsx_st (vector unsigned short, int, unsigned short *); 36875 void vec_vsx_st (vector bool short, int, vector bool short *); 36876 void vec_vsx_st (vector bool short, int, unsigned short *); 36877 void vec_vsx_st (vector pixel, int, vector pixel *); 36878 void vec_vsx_st (vector pixel, int, unsigned short *); 36879 void vec_vsx_st (vector pixel, int, short *); 36880 void vec_vsx_st (vector bool short, int, short *); 36881 void vec_vsx_st (vector signed char, int, vector signed char *); 36882 void vec_vsx_st (vector signed char, int, signed char *); 36883 void vec_vsx_st (vector unsigned char, int, vector unsigned char *); 36884 void vec_vsx_st (vector unsigned char, int, unsigned char *); 36885 void vec_vsx_st (vector bool char, int, vector bool char *); 36886 void vec_vsx_st (vector bool char, int, unsigned char *); 36887 void vec_vsx_st (vector bool char, int, signed char *); 36888 36889 Note that the `vec_ld' and `vec_st' builtins will always generate the 36890Altivec `LVX' and `STVX' instructions even if the VSX instruction set 36891is available. The `vec_vsx_ld' and `vec_vsx_st' builtins will always 36892generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X' 36893instructions. 36894 36895 GCC provides a few other builtins on Powerpc to access certain 36896instructions: 36897 float __builtin_recipdivf (float, float); 36898 float __builtin_rsqrtf (float); 36899 double __builtin_recipdiv (double, double); 36900 double __builtin_rsqrt (double); 36901 long __builtin_bpermd (long, long); 36902 int __builtin_bswap16 (int); 36903 36904 The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions 36905generate multiple instructions to implement the reciprocal sqrt 36906functionality using reciprocal sqrt estimate instructions. 36907 36908 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate 36909multiple instructions to implement division using the reciprocal 36910estimate instructions. 36911 36912 GCC also provides a family of builtins on PowerPC to explicitly use 36913the `isel' instruction. While GCC can and does generate `isel' 36914instructions normally, the builtins enable you to explicitly force 36915generation of these instructions. The builtins are only available when 36916compiling for processors that support the `isel' instruction; they 36917compile to a code sequence of `cmpw' followed by `isel'. 36918 36919`int __builtin_iseleq (int X, int Y, int A, int B)' 36920`int __builtin_iseleq (unsigned int X, unsigned int Y, int A, int B)' 36921`int __builtin_iseleq (void *X, void *Y, int A, int B)' 36922`unsigned int __builtin_iseleq (int X, int Y, unsigned int A, unsigned int B)' 36923`unsigned int __builtin_iseleq (unsigned int X, unsigned int Y, unsigned int A, unsigned int B)' 36924`unsigned int __builtin_iseleq (void *X, void *Y, unsigned int A, unsigned int B)' 36925`void *__builtin_iseleq (int X, int Y, void *A, void *B)' 36926`void *__builtin_iseleq (unsigned int X, unsigned int Y, void *A, void *B)' 36927`void *__builtin_iseleq (void *X, void *Y, void *A, void *B)' 36928 Return A if X and Y are equal, otherwise return B. 36929 36930`int __builtin_isellt (int X, int Y, int A, int B)' 36931`unsigned int __builtin_isellt (int X, int Y, unsigned int A, unsigned int B)' 36932`void *__builtin_isellt (int X, int Y, void *A, void *B)' 36933 Return A if X is less than Y, otherwise return B. Note that this 36934 uses signed comparison. 36935 36936`int __builtin_iselgt (int X, int Y, int A, int B)' 36937`unsigned int __builtin_iselgt (int X, int Y, unsigned int A, unsigned int B)' 36938`void *__builtin_iselgt (int X, int Y, void *A, void *B)' 36939 Return A if X is greater than Y, otherwise return B. Note that 36940 this uses signed comparison. 36941 36942`int __builtin_iselltu (unsigned int X, unsigned int Y, int A, int B)' 36943`int __builtin_iselltu (void *X, void *Y, int A, int B)' 36944`unsigned int __builtin_iselltu (unsigned int X, unsigned int Y, unsigned int A, unsigned int B)' 36945`unsigned int __builtin_iselltu (void *X, void *Y, unsigned int A, unsigned int B)' 36946`void *__builtin_iselltu (unsigned int X, unsigned int Y, void *A, void *B)' 36947`void *__builtin_iselltu (void *X, void *Y, void *A, void *B)' 36948 Return A if X is less than Y, otherwise return B In contrast to 36949 `__builtin_isellt', this uses unsigned comparison. 36950 36951`int __builtin_iselgtu (unsigned int X, unsigned int Y, int A, int B)' 36952`int __builtin_iselgtu (void *X, void *Y, int A, int B)' 36953`unsigned int __builtin_iselgtu (unsigned int X, unsigned int Y, unsigned int A, unsigned int B)' 36954`unsigned int __builtin_iselgtu (void *X, void *Y, unsigned int A, unsigned int B)' 36955`void *__builtin_iselgtu (unsigned int X, unsigned int Y, void *A, void *B)' 36956`void *__builtin_iselgtu (void *X, void *Y, void *A, void *B)' 36957 Return A if X is greater than Y, otherwise return B In contrast to 36958 `__builtin_iselgt', this uses unsigned comparison. 36959 36960 36961 Builtins that do 64-bit comparisons (i.e. using `cmpd' instead of 36962`cmpw') are also available on 64-bit processors supporting `isel'. 36963 36964`long __builtin_isel64eq (long X, long Y, long A, long B)' 36965`long __builtin_isel64eq (unsigned long X, unsigned long Y, long A, long B)' 36966`long __builtin_isel64eq (void *X, void *Y, long A, long B)' 36967`unsigned long __builtin_isel64eq (long X, long Y, unsigned long A, unsigned long B)' 36968`unsigned long __builtin_isel64eq (unsigned long X, unsigned long Y, unsigned long A, unsigned long B)' 36969`unsigned long __builtin_isel64eq (void *X, void *Y, unsigned long A, unsigned long B)' 36970`void *__builtin_isel64eq (long X, long Y, void *A, void *B)' 36971`void *__builtin_isel64eq (unsigned long X, unsigned long Y, void *A, void *B)' 36972`void *__builtin_isel64eq (void *X, void *Y, void *A, void *B)' 36973 Return A if X and Y are equal, otherwise return B. 36974 36975`long __builtin_isel64lt (long X, long Y, long A, long B)' 36976`unsigned long __builtin_isel64lt (long X, long Y, unsigned long A, unsigned long B)' 36977`void *__builtin_isel64lt (long X, long Y, void *A, void *B)' 36978 Return A if X is less than Y, otherwise return B. Note that this 36979 uses signed comparison. 36980 36981`long __builtin_isel64gt (long X, long Y, long A, long B)' 36982`unsigned long __builtin_isel64gt (long X, long Y, unsigned long A, unsigned long B)' 36983`void *__builtin_isel64gt (long X, long Y, void *A, void *B)' 36984 Return A if X is greater than Y, otherwise return B. Note that 36985 this uses signed comparison. 36986 36987`long __builtin_isel64ltu (unsigned long X, unsigned long Y, long A, long B)' 36988`long __builtin_isel64ltu (void *X, void *Y, long A, long B)' 36989`unsigned long __builtin_isel64ltu (unsigned long X, unsigned long Y, unsigned long A, unsigned long B)' 36990`unsigned long __builtin_isel64ltu (void *X, void *Y, unsigned long A, unsigned long B)' 36991`void *__builtin_isel64ltu (unsigned long X, unsigned long Y, void *A, void *B)' 36992`void *__builtin_isel64ltu (void *X, void *Y, void *A, void *B)' 36993 Return A if X is less than Y, otherwise return B In contrast to 36994 `__builtin_isel64lt', this uses unsigned comparison. 36995 36996`long __builtin_isel64gtu (unsigned long X, unsigned long Y, long A, long B)' 36997`long __builtin_isel64gtu (void *X, void *Y, long A, long B)' 36998`unsigned long __builtin_isel64gtu (unsigned long X, unsigned long Y, unsigned long A, unsigned long B)' 36999`unsigned long __builtin_isel64gtu (void *X, void *Y, unsigned long A, unsigned long B)' 37000`void *__builtin_isel64gtu (unsigned long X, unsigned long Y, void *A, void *B)' 37001`void *__builtin_isel64gtu (void *X, void *Y, void *A, void *B)' 37002 Return A if X is greater than Y, otherwise return B In contrast to 37003 `__builtin_isel64gt', this uses unsigned comparison. 37004 37005 37006 37007File: gcc.info, Node: RX Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins 37008 370096.54.13 RX Built-in Functions 37010----------------------------- 37011 37012GCC supports some of the RX instructions which cannot be expressed in 37013the C programming language via the use of built-in functions. The 37014following functions are supported: 37015 37016 -- Built-in Function: void __builtin_rx_brk (void) 37017 Generates the `brk' machine instruction. 37018 37019 -- Built-in Function: void __builtin_rx_clrpsw (int) 37020 Generates the `clrpsw' machine instruction to clear the specified 37021 bit in the processor status word. 37022 37023 -- Built-in Function: void __builtin_rx_int (int) 37024 Generates the `int' machine instruction to generate an interrupt 37025 with the specified value. 37026 37027 -- Built-in Function: void __builtin_rx_machi (int, int) 37028 Generates the `machi' machine instruction to add the result of 37029 multiplying the top 16-bits of the two arguments into the 37030 accumulator. 37031 37032 -- Built-in Function: void __builtin_rx_maclo (int, int) 37033 Generates the `maclo' machine instruction to add the result of 37034 multiplying the bottom 16-bits of the two arguments into the 37035 accumulator. 37036 37037 -- Built-in Function: void __builtin_rx_mulhi (int, int) 37038 Generates the `mulhi' machine instruction to place the result of 37039 multiplying the top 16-bits of the two arguments into the 37040 accumulator. 37041 37042 -- Built-in Function: void __builtin_rx_mullo (int, int) 37043 Generates the `mullo' machine instruction to place the result of 37044 multiplying the bottom 16-bits of the two arguments into the 37045 accumulator. 37046 37047 -- Built-in Function: int __builtin_rx_mvfachi (void) 37048 Generates the `mvfachi' machine instruction to read the top 37049 32-bits of the accumulator. 37050 37051 -- Built-in Function: int __builtin_rx_mvfacmi (void) 37052 Generates the `mvfacmi' machine instruction to read the middle 37053 32-bits of the accumulator. 37054 37055 -- Built-in Function: int __builtin_rx_mvfc (int) 37056 Generates the `mvfc' machine instruction which reads the control 37057 register specified in its argument and returns its value. 37058 37059 -- Built-in Function: void __builtin_rx_mvtachi (int) 37060 Generates the `mvtachi' machine instruction to set the top 32-bits 37061 of the accumulator. 37062 37063 -- Built-in Function: void __builtin_rx_mvtaclo (int) 37064 Generates the `mvtaclo' machine instruction to set the bottom 37065 32-bits of the accumulator. 37066 37067 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val) 37068 Generates the `mvtc' machine instruction which sets control 37069 register number `reg' to `val'. 37070 37071 -- Built-in Function: void __builtin_rx_mvtipl (int) 37072 Generates the `mvtipl' machine instruction set the interrupt 37073 priority level. 37074 37075 -- Built-in Function: void __builtin_rx_racw (int) 37076 Generates the `racw' machine instruction to round the accumulator 37077 according to the specified mode. 37078 37079 -- Built-in Function: int __builtin_rx_revw (int) 37080 Generates the `revw' machine instruction which swaps the bytes in 37081 the argument so that bits 0-7 now occupy bits 8-15 and vice versa, 37082 and also bits 16-23 occupy bits 24-31 and vice versa. 37083 37084 -- Built-in Function: void __builtin_rx_rmpa (void) 37085 Generates the `rmpa' machine instruction which initiates a 37086 repeated multiply and accumulate sequence. 37087 37088 -- Built-in Function: void __builtin_rx_round (float) 37089 Generates the `round' machine instruction which returns the 37090 floating point argument rounded according to the current rounding 37091 mode set in the floating point status word register. 37092 37093 -- Built-in Function: int __builtin_rx_sat (int) 37094 Generates the `sat' machine instruction which returns the 37095 saturated value of the argument. 37096 37097 -- Built-in Function: void __builtin_rx_setpsw (int) 37098 Generates the `setpsw' machine instruction to set the specified 37099 bit in the processor status word. 37100 37101 -- Built-in Function: void __builtin_rx_wait (void) 37102 Generates the `wait' machine instruction. 37103 37104 37105File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins 37106 371076.54.14 SPARC VIS Built-in Functions 37108------------------------------------ 37109 37110GCC supports SIMD operations on the SPARC using both the generic vector 37111extensions (*note Vector Extensions::) as well as built-in functions for 37112the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 37113switch, the VIS extension is exposed as the following built-in 37114functions: 37115 37116 typedef int v2si __attribute__ ((vector_size (8))); 37117 typedef short v4hi __attribute__ ((vector_size (8))); 37118 typedef short v2hi __attribute__ ((vector_size (4))); 37119 typedef char v8qi __attribute__ ((vector_size (8))); 37120 typedef char v4qi __attribute__ ((vector_size (4))); 37121 37122 void * __builtin_vis_alignaddr (void *, long); 37123 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 37124 v2si __builtin_vis_faligndatav2si (v2si, v2si); 37125 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 37126 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 37127 37128 v4hi __builtin_vis_fexpand (v4qi); 37129 37130 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 37131 v4hi __builtin_vis_fmul8x16au (v4qi, v4hi); 37132 v4hi __builtin_vis_fmul8x16al (v4qi, v4hi); 37133 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 37134 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 37135 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 37136 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 37137 37138 v4qi __builtin_vis_fpack16 (v4hi); 37139 v8qi __builtin_vis_fpack32 (v2si, v2si); 37140 v2hi __builtin_vis_fpackfix (v2si); 37141 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 37142 37143 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 37144 37145 37146File: gcc.info, Node: SPU Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 37147 371486.54.15 SPU Built-in Functions 37149------------------------------ 37150 37151GCC provides extensions for the SPU processor as described in the 37152Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 37153found at `http://cell.scei.co.jp/' or 37154`http://www.ibm.com/developerworks/power/cell/'. GCC's implementation 37155differs in several ways. 37156 37157 * The optional extension of specifying vector constants in 37158 parentheses is not supported. 37159 37160 * A vector initializer requires no cast if the vector constant is of 37161 the same type as the variable it is initializing. 37162 37163 * If `signed' or `unsigned' is omitted, the signedness of the vector 37164 type is the default signedness of the base type. The default 37165 varies depending on the operating system, so a portable program 37166 should always specify the signedness. 37167 37168 * By default, the keyword `__vector' is added. The macro `vector' is 37169 defined in `<spu_intrinsics.h>' and can be undefined. 37170 37171 * GCC allows using a `typedef' name as the type specifier for a 37172 vector type. 37173 37174 * For C, overloaded functions are implemented with macros so the 37175 following does not work: 37176 37177 spu_add ((vector signed int){1, 2, 3, 4}, foo); 37178 37179 Since `spu_add' is a macro, the vector constant in the example is 37180 treated as four separate arguments. Wrap the entire argument in 37181 parentheses for this to work. 37182 37183 * The extended version of `__builtin_expect' is not supported. 37184 37185 37186 _Note:_ Only the interface described in the aforementioned 37187specification is supported. Internally, GCC uses built-in functions to 37188implement the required functionality, but these are not supported and 37189are subject to change without notice. 37190 37191 37192File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 37193 371946.55 Format Checks Specific to Particular Target Machines 37195========================================================= 37196 37197For some target machines, GCC supports additional options to the format 37198attribute (*note Declaring Attributes of Functions: Function 37199Attributes.). 37200 37201* Menu: 37202 37203* Solaris Format Checks:: 37204* Darwin Format Checks:: 37205 37206 37207File: gcc.info, Node: Solaris Format Checks, Next: Darwin Format Checks, Up: Target Format Checks 37208 372096.55.1 Solaris Format Checks 37210---------------------------- 37211 37212Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 37213`cmn_err' accepts a subset of the standard `printf' conversions, and 37214the two-argument `%b' conversion for displaying bit-fields. See the 37215Solaris man page for `cmn_err' for more information. 37216 37217 37218File: gcc.info, Node: Darwin Format Checks, Prev: Solaris Format Checks, Up: Target Format Checks 37219 372206.55.2 Darwin Format Checks 37221--------------------------- 37222 37223Darwin targets support the `CFString' (or `__CFString__') in the format 37224attribute context. Declarations made with such attribution will be 37225parsed for correct syntax and format argument types. However, parsing 37226of the format string itself is currently undefined and will not be 37227carried out by this version of the compiler. 37228 37229 Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers) 37230may also be used as format arguments. Note that the relevant headers 37231are only likely to be available on Darwin (OSX) installations. On such 37232installations, the XCode and system documentation provide descriptions 37233of `CFString', `CFStringRefs' and associated functions. 37234 37235 37236File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 37237 372386.56 Pragmas Accepted by GCC 37239============================ 37240 37241GCC supports several types of pragmas, primarily in order to compile 37242code originally written for other compilers. Note that in general we 37243do not recommend the use of pragmas; *Note Function Attributes::, for 37244further explanation. 37245 37246* Menu: 37247 37248* ARM Pragmas:: 37249* M32C Pragmas:: 37250* MeP Pragmas:: 37251* RS/6000 and PowerPC Pragmas:: 37252* Darwin Pragmas:: 37253* Solaris Pragmas:: 37254* Symbol-Renaming Pragmas:: 37255* Structure-Packing Pragmas:: 37256* Weak Pragmas:: 37257* Diagnostic Pragmas:: 37258* Visibility Pragmas:: 37259* Push/Pop Macro Pragmas:: 37260* Function Specific Option Pragmas:: 37261 37262 37263File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 37264 372656.56.1 ARM Pragmas 37266------------------ 37267 37268The ARM target defines pragmas for controlling the default addition of 37269`long_call' and `short_call' attributes to functions. *Note Function 37270Attributes::, for information about the effects of these attributes. 37271 37272`long_calls' 37273 Set all subsequent functions to have the `long_call' attribute. 37274 37275`no_long_calls' 37276 Set all subsequent functions to have the `short_call' attribute. 37277 37278`long_calls_off' 37279 Do not affect the `long_call' or `short_call' attributes of 37280 subsequent functions. 37281 37282 37283File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas 37284 372856.56.2 M32C Pragmas 37286------------------- 37287 37288`GCC memregs NUMBER' 37289 Overrides the command-line option `-memregs=' for the current 37290 file. Use with care! This pragma must be before any function in 37291 the file, and mixing different memregs values in different objects 37292 may make them incompatible. This pragma is useful when a 37293 performance-critical function uses a memreg for temporary values, 37294 as it may allow you to reduce the number of memregs used. 37295 37296`ADDRESS NAME ADDRESS' 37297 For any declared symbols matching NAME, this does three things to 37298 that symbol: it forces the symbol to be located at the given 37299 address (a number), it forces the symbol to be volatile, and it 37300 changes the symbol's scope to be static. This pragma exists for 37301 compatibility with other compilers, but note that the common 37302 `1234H' numeric syntax is not supported (use `0x1234' instead). 37303 Example: 37304 37305 #pragma ADDRESS port3 0x103 37306 char port3; 37307 37308 37309 37310File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas 37311 373126.56.3 MeP Pragmas 37313------------------ 37314 37315`custom io_volatile (on|off)' 37316 Overrides the command line option `-mio-volatile' for the current 37317 file. Note that for compatibility with future GCC releases, this 37318 option should only be used once before any `io' variables in each 37319 file. 37320 37321`GCC coprocessor available REGISTERS' 37322 Specifies which coprocessor registers are available to the register 37323 allocator. REGISTERS may be a single register, register range 37324 separated by ellipses, or comma-separated list of those. Example: 37325 37326 #pragma GCC coprocessor available $c0...$c10, $c28 37327 37328`GCC coprocessor call_saved REGISTERS' 37329 Specifies which coprocessor registers are to be saved and restored 37330 by any function using them. REGISTERS may be a single register, 37331 register range separated by ellipses, or comma-separated list of 37332 those. Example: 37333 37334 #pragma GCC coprocessor call_saved $c4...$c6, $c31 37335 37336`GCC coprocessor subclass '(A|B|C|D)' = REGISTERS' 37337 Creates and defines a register class. These register classes can 37338 be used by inline `asm' constructs. REGISTERS may be a single 37339 register, register range separated by ellipses, or comma-separated 37340 list of those. Example: 37341 37342 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6 37343 37344 asm ("cpfoo %0" : "=B" (x)); 37345 37346`GCC disinterrupt NAME , NAME ...' 37347 For the named functions, the compiler adds code to disable 37348 interrupts for the duration of those functions. Any functions so 37349 named, which are not encountered in the source, cause a warning 37350 that the pragma was not used. Examples: 37351 37352 #pragma disinterrupt foo 37353 #pragma disinterrupt bar, grill 37354 int foo () { ... } 37355 37356`GCC call NAME , NAME ...' 37357 For the named functions, the compiler always uses a 37358 register-indirect call model when calling the named functions. 37359 Examples: 37360 37361 extern int foo (); 37362 #pragma call foo 37363 37364 37365 37366File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas 37367 373686.56.4 RS/6000 and PowerPC Pragmas 37369---------------------------------- 37370 37371The RS/6000 and PowerPC targets define one pragma for controlling 37372whether or not the `longcall' attribute is added to function 37373declarations by default. This pragma overrides the `-mlongcall' 37374option, but not the `longcall' and `shortcall' attributes. *Note 37375RS/6000 and PowerPC Options::, for more information about when long 37376calls are and are not necessary. 37377 37378`longcall (1)' 37379 Apply the `longcall' attribute to all subsequent function 37380 declarations. 37381 37382`longcall (0)' 37383 Do not apply the `longcall' attribute to subsequent function 37384 declarations. 37385 37386 37387File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 37388 373896.56.5 Darwin Pragmas 37390--------------------- 37391 37392The following pragmas are available for all architectures running the 37393Darwin operating system. These are useful for compatibility with other 37394Mac OS compilers. 37395 37396`mark TOKENS...' 37397 This pragma is accepted, but has no effect. 37398 37399`options align=ALIGNMENT' 37400 This pragma sets the alignment of fields in structures. The 37401 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 37402 `power', to emulate PowerPC alignment. Uses of this pragma nest 37403 properly; to restore the previous setting, use `reset' for the 37404 ALIGNMENT. 37405 37406`segment TOKENS...' 37407 This pragma is accepted, but has no effect. 37408 37409`unused (VAR [, VAR]...)' 37410 This pragma declares variables to be possibly unused. GCC will not 37411 produce warnings for the listed variables. The effect is similar 37412 to that of the `unused' attribute, except that this pragma may 37413 appear anywhere within the variables' scopes. 37414 37415 37416File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 37417 374186.56.6 Solaris Pragmas 37419---------------------- 37420 37421The Solaris target supports `#pragma redefine_extname' (*note 37422Symbol-Renaming Pragmas::). It also supports additional `#pragma' 37423directives for compatibility with the system compiler. 37424 37425`align ALIGNMENT (VARIABLE [, VARIABLE]...)' 37426 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 37427 This is the same as GCC's `aligned' attribute *note Variable 37428 Attributes::). Macro expansion occurs on the arguments to this 37429 pragma when compiling C and Objective-C. It does not currently 37430 occur when compiling C++, but this is a bug which may be fixed in 37431 a future release. 37432 37433`fini (FUNCTION [, FUNCTION]...)' 37434 This pragma causes each listed FUNCTION to be called after main, 37435 or during shared module unloading, by adding a call to the `.fini' 37436 section. 37437 37438`init (FUNCTION [, FUNCTION]...)' 37439 This pragma causes each listed FUNCTION to be called during 37440 initialization (before `main') or during shared module loading, by 37441 adding a call to the `.init' section. 37442 37443 37444 37445File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 37446 374476.56.7 Symbol-Renaming Pragmas 37448------------------------------ 37449 37450For compatibility with the Solaris and Tru64 UNIX system headers, GCC 37451supports two `#pragma' directives which change the name used in 37452assembly for a given declaration. `#pragma extern_prefix' is only 37453available on platforms whose system headers need it. To get this effect 37454on all platforms supported by GCC, use the asm labels extension (*note 37455Asm Labels::). 37456 37457`redefine_extname OLDNAME NEWNAME' 37458 This pragma gives the C function OLDNAME the assembly symbol 37459 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will 37460 be defined if this pragma is available (currently on all 37461 platforms). 37462 37463`extern_prefix STRING' 37464 This pragma causes all subsequent external function and variable 37465 declarations to have STRING prepended to their assembly symbols. 37466 This effect may be terminated with another `extern_prefix' pragma 37467 whose argument is an empty string. The preprocessor macro 37468 `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is 37469 available (currently only on Tru64 UNIX). 37470 37471 These pragmas and the asm labels extension interact in a complicated 37472manner. Here are some corner cases you may want to be aware of. 37473 37474 1. Both pragmas silently apply only to declarations with external 37475 linkage. Asm labels do not have this restriction. 37476 37477 2. In C++, both pragmas silently apply only to declarations with "C" 37478 linkage. Again, asm labels do not have this restriction. 37479 37480 3. If any of the three ways of changing the assembly name of a 37481 declaration is applied to a declaration whose assembly name has 37482 already been determined (either by a previous use of one of these 37483 features, or because the compiler needed the assembly name in 37484 order to generate code), and the new name is different, a warning 37485 issues and the name does not change. 37486 37487 4. The OLDNAME used by `#pragma redefine_extname' is always the 37488 C-language name. 37489 37490 5. If `#pragma extern_prefix' is in effect, and a declaration occurs 37491 with an asm label attached, the prefix is silently ignored for 37492 that declaration. 37493 37494 6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to 37495 the same declaration, whichever triggered first wins, and a 37496 warning issues if they contradict each other. (We would like to 37497 have `#pragma redefine_extname' always win, for consistency with 37498 asm labels, but if `#pragma extern_prefix' triggers first we have 37499 no way of knowing that that happened.) 37500 37501 37502File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 37503 375046.56.8 Structure-Packing Pragmas 37505-------------------------------- 37506 37507For compatibility with Microsoft Windows compilers, GCC supports a set 37508of `#pragma' directives which change the maximum alignment of members 37509of structures (other than zero-width bitfields), unions, and classes 37510subsequently defined. The N value below always is required to be a 37511small power of two and specifies the new alignment in bytes. 37512 37513 1. `#pragma pack(N)' simply sets the new alignment. 37514 37515 2. `#pragma pack()' sets the alignment to the one that was in effect 37516 when compilation started (see also command-line option 37517 `-fpack-struct[=N]' *note Code Gen Options::). 37518 37519 3. `#pragma pack(push[,N])' pushes the current alignment setting on 37520 an internal stack and then optionally sets the new alignment. 37521 37522 4. `#pragma pack(pop)' restores the alignment setting to the one 37523 saved at the top of the internal stack (and removes that stack 37524 entry). Note that `#pragma pack([N])' does not influence this 37525 internal stack; thus it is possible to have `#pragma pack(push)' 37526 followed by multiple `#pragma pack(N)' instances and finalized by 37527 a single `#pragma pack(pop)'. 37528 37529 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma' 37530which lays out a structure as the documented `__attribute__ 37531((ms_struct))'. 37532 1. `#pragma ms_struct on' turns on the layout for structures declared. 37533 37534 2. `#pragma ms_struct off' turns off the layout for structures 37535 declared. 37536 37537 3. `#pragma ms_struct reset' goes back to the default layout. 37538 37539 37540File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 37541 375426.56.9 Weak Pragmas 37543------------------- 37544 37545For compatibility with SVR4, GCC supports a set of `#pragma' directives 37546for declaring symbols to be weak, and defining weak aliases. 37547 37548`#pragma weak SYMBOL' 37549 This pragma declares SYMBOL to be weak, as if the declaration had 37550 the attribute of the same name. The pragma may appear before or 37551 after the declaration of SYMBOL. It is not an error for SYMBOL to 37552 never be defined at all. 37553 37554`#pragma weak SYMBOL1 = SYMBOL2' 37555 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 37556 an error if SYMBOL2 is not defined in the current translation unit. 37557 37558 37559File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 37560 375616.56.10 Diagnostic Pragmas 37562-------------------------- 37563 37564GCC allows the user to selectively enable or disable certain types of 37565diagnostics, and change the kind of the diagnostic. For example, a 37566project's policy might require that all sources compile with `-Werror' 37567but certain files might have exceptions allowing specific types of 37568warnings. Or, a project might selectively enable diagnostics and treat 37569them as errors depending on which preprocessor macros are defined. 37570 37571`#pragma GCC diagnostic KIND OPTION' 37572 Modifies the disposition of a diagnostic. Note that not all 37573 diagnostics are modifiable; at the moment only warnings (normally 37574 controlled by `-W...') can be controlled, and not all of them. 37575 Use `-fdiagnostics-show-option' to determine which diagnostics are 37576 controllable and which option controls them. 37577 37578 KIND is `error' to treat this diagnostic as an error, `warning' to 37579 treat it like a warning (even if `-Werror' is in effect), or 37580 `ignored' if the diagnostic is to be ignored. OPTION is a double 37581 quoted string which matches the command-line option. 37582 37583 #pragma GCC diagnostic warning "-Wformat" 37584 #pragma GCC diagnostic error "-Wformat" 37585 #pragma GCC diagnostic ignored "-Wformat" 37586 37587 Note that these pragmas override any command-line options. GCC 37588 keeps track of the location of each pragma, and issues diagnostics 37589 according to the state as of that point in the source file. Thus, 37590 pragmas occurring after a line do not affect diagnostics caused by 37591 that line. 37592 37593`#pragma GCC diagnostic push' 37594`#pragma GCC diagnostic pop' 37595 Causes GCC to remember the state of the diagnostics as of each 37596 `push', and restore to that point at each `pop'. If a `pop' has 37597 no matching `push', the command line options are restored. 37598 37599 #pragma GCC diagnostic error "-Wuninitialized" 37600 foo(a); /* error is given for this one */ 37601 #pragma GCC diagnostic push 37602 #pragma GCC diagnostic ignored "-Wuninitialized" 37603 foo(b); /* no diagnostic for this one */ 37604 #pragma GCC diagnostic pop 37605 foo(c); /* error is given for this one */ 37606 #pragma GCC diagnostic pop 37607 foo(d); /* depends on command line options */ 37608 37609 37610 GCC also offers a simple mechanism for printing messages during 37611compilation. 37612 37613`#pragma message STRING' 37614 Prints STRING as a compiler message on compilation. The message 37615 is informational only, and is neither a compilation warning nor an 37616 error. 37617 37618 #pragma message "Compiling " __FILE__ "..." 37619 37620 STRING may be parenthesized, and is printed with location 37621 information. For example, 37622 37623 #define DO_PRAGMA(x) _Pragma (#x) 37624 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 37625 37626 TODO(Remember to fix this) 37627 37628 prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to 37629 fix this'. 37630 37631 37632 37633File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 37634 376356.56.11 Visibility Pragmas 37636-------------------------- 37637 37638`#pragma GCC visibility push(VISIBILITY)' 37639`#pragma GCC visibility pop' 37640 This pragma allows the user to set the visibility for multiple 37641 declarations without having to give each a visibility attribute 37642 *Note Function Attributes::, for more information about visibility 37643 and the attribute syntax. 37644 37645 In C++, `#pragma GCC visibility' affects only namespace-scope 37646 declarations. Class members and template specializations are not 37647 affected; if you want to override the visibility for a particular 37648 member or instantiation, you must use an attribute. 37649 37650 37651 37652File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 37653 376546.56.12 Push/Pop Macro Pragmas 37655------------------------------ 37656 37657For compatibility with Microsoft Windows compilers, GCC supports 37658`#pragma push_macro("MACRO_NAME")' and `#pragma 37659pop_macro("MACRO_NAME")'. 37660 37661`#pragma push_macro("MACRO_NAME")' 37662 This pragma saves the value of the macro named as MACRO_NAME to 37663 the top of the stack for this macro. 37664 37665`#pragma pop_macro("MACRO_NAME")' 37666 This pragma sets the value of the macro named as MACRO_NAME to the 37667 value on top of the stack for this macro. If the stack for 37668 MACRO_NAME is empty, the value of the macro remains unchanged. 37669 37670 For example: 37671 37672 #define X 1 37673 #pragma push_macro("X") 37674 #undef X 37675 #define X -1 37676 #pragma pop_macro("X") 37677 int x [X]; 37678 37679 In this example, the definition of X as 1 is saved by `#pragma 37680push_macro' and restored by `#pragma pop_macro'. 37681 37682 37683File: gcc.info, Node: Function Specific Option Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 37684 376856.56.13 Function Specific Option Pragmas 37686---------------------------------------- 37687 37688`#pragma GCC target ("STRING"...)' 37689 This pragma allows you to set target specific options for functions 37690 defined later in the source file. One or more strings can be 37691 specified. Each function that is defined after this point will be 37692 as if `attribute((target("STRING")))' was specified for that 37693 function. The parenthesis around the options is optional. *Note 37694 Function Attributes::, for more information about the `target' 37695 attribute and the attribute syntax. 37696 37697 The `#pragma GCC target' attribute is not implemented in GCC 37698 versions earlier than 4.4 for the i386/x86_64 and 4.6 for the 37699 PowerPC backends. At present, it is not implemented for other 37700 backends. 37701 37702`#pragma GCC optimize ("STRING"...)' 37703 This pragma allows you to set global optimization options for 37704 functions defined later in the source file. One or more strings 37705 can be specified. Each function that is defined after this point 37706 will be as if `attribute((optimize("STRING")))' was specified for 37707 that function. The parenthesis around the options is optional. 37708 *Note Function Attributes::, for more information about the 37709 `optimize' attribute and the attribute syntax. 37710 37711 The `#pragma GCC optimize' pragma is not implemented in GCC 37712 versions earlier than 4.4. 37713 37714`#pragma GCC push_options' 37715`#pragma GCC pop_options' 37716 These pragmas maintain a stack of the current target and 37717 optimization options. It is intended for include files where you 37718 temporarily want to switch to using a different `#pragma GCC 37719 target' or `#pragma GCC optimize' and then to pop back to the 37720 previous options. 37721 37722 The `#pragma GCC push_options' and `#pragma GCC pop_options' 37723 pragmas are not implemented in GCC versions earlier than 4.4. 37724 37725`#pragma GCC reset_options' 37726 This pragma clears the current `#pragma GCC target' and `#pragma 37727 GCC optimize' to use the default switches as specified on the 37728 command line. 37729 37730 The `#pragma GCC reset_options' pragma is not implemented in GCC 37731 versions earlier than 4.4. 37732 37733 37734File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 37735 377366.57 Unnamed struct/union fields within structs/unions 37737====================================================== 37738 37739As permitted by ISO C1X and for compatibility with other compilers, GCC 37740allows you to define a structure or union that contains, as fields, 37741structures and unions without names. For example: 37742 37743 struct { 37744 int a; 37745 union { 37746 int b; 37747 float c; 37748 }; 37749 int d; 37750 } foo; 37751 37752 In this example, the user would be able to access members of the 37753unnamed union with code like `foo.b'. Note that only unnamed structs 37754and unions are allowed, you may not have, for example, an unnamed `int'. 37755 37756 You must never create such structures that cause ambiguous field 37757definitions. For example, this structure: 37758 37759 struct { 37760 int a; 37761 struct { 37762 int a; 37763 }; 37764 } foo; 37765 37766 It is ambiguous which `a' is being referred to with `foo.a'. The 37767compiler gives errors for such constructs. 37768 37769 Unless `-fms-extensions' is used, the unnamed field must be a 37770structure or union definition without a tag (for example, `struct { int 37771a; };'). If `-fms-extensions' is used, the field may also be a 37772definition with a tag such as `struct foo { int a; };', a reference to 37773a previously defined structure or union such as `struct foo;', or a 37774reference to a `typedef' name for a previously defined structure or 37775union type. 37776 37777 The option `-fplan9-extensions' enables `-fms-extensions' as well as 37778two other extensions. First, a pointer to a structure is automatically 37779converted to a pointer to an anonymous field for assignments and 37780function calls. For example: 37781 37782 struct s1 { int a; }; 37783 struct s2 { struct s1; }; 37784 extern void f1 (struct s1 *); 37785 void f2 (struct s2 *p) { f1 (p); } 37786 37787 In the call to `f1' inside `f2', the pointer `p' is converted into a 37788pointer to the anonymous field. 37789 37790 Second, when the type of an anonymous field is a `typedef' for a 37791`struct' or `union', code may refer to the field using the name of the 37792`typedef'. 37793 37794 typedef struct { int a; } s1; 37795 struct s2 { s1; }; 37796 s1 f1 (struct s2 *p) { return p->s1; } 37797 37798 These usages are only permitted when they are not ambiguous. 37799 37800 37801File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 37802 378036.58 Thread-Local Storage 37804========================= 37805 37806Thread-local storage (TLS) is a mechanism by which variables are 37807allocated such that there is one instance of the variable per extant 37808thread. The run-time model GCC uses to implement this originates in 37809the IA-64 processor-specific ABI, but has since been migrated to other 37810processors as well. It requires significant support from the linker 37811(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 37812`libpthread.so'), so it is not available everywhere. 37813 37814 At the user level, the extension is visible with a new storage class 37815keyword: `__thread'. For example: 37816 37817 __thread int i; 37818 extern __thread struct state s; 37819 static __thread char *p; 37820 37821 The `__thread' specifier may be used alone, with the `extern' or 37822`static' specifiers, but with no other storage class specifier. When 37823used with `extern' or `static', `__thread' must appear immediately 37824after the other storage class specifier. 37825 37826 The `__thread' specifier may be applied to any global, file-scoped 37827static, function-scoped static, or static data member of a class. It 37828may not be applied to block-scoped automatic or non-static data member. 37829 37830 When the address-of operator is applied to a thread-local variable, it 37831is evaluated at run-time and returns the address of the current thread's 37832instance of that variable. An address so obtained may be used by any 37833thread. When a thread terminates, any pointers to thread-local 37834variables in that thread become invalid. 37835 37836 No static initialization may refer to the address of a thread-local 37837variable. 37838 37839 In C++, if an initializer is present for a thread-local variable, it 37840must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 37841standard. 37842 37843 See ELF Handling For Thread-Local Storage 37844(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of 37845the four thread-local storage addressing models, and how the run-time 37846is expected to function. 37847 37848* Menu: 37849 37850* C99 Thread-Local Edits:: 37851* C++98 Thread-Local Edits:: 37852 37853 37854File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 37855 378566.58.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 37857------------------------------------------------------- 37858 37859The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 37860document the exact semantics of the language extension. 37861 37862 * `5.1.2 Execution environments' 37863 37864 Add new text after paragraph 1 37865 37866 Within either execution environment, a "thread" is a flow of 37867 control within a program. It is implementation defined 37868 whether or not there may be more than one thread associated 37869 with a program. It is implementation defined how threads 37870 beyond the first are created, the name and type of the 37871 function called at thread startup, and how threads may be 37872 terminated. However, objects with thread storage duration 37873 shall be initialized before thread startup. 37874 37875 * `6.2.4 Storage durations of objects' 37876 37877 Add new text before paragraph 3 37878 37879 An object whose identifier is declared with the storage-class 37880 specifier `__thread' has "thread storage duration". Its 37881 lifetime is the entire execution of the thread, and its 37882 stored value is initialized only once, prior to thread 37883 startup. 37884 37885 * `6.4.1 Keywords' 37886 37887 Add `__thread'. 37888 37889 * `6.7.1 Storage-class specifiers' 37890 37891 Add `__thread' to the list of storage class specifiers in 37892 paragraph 1. 37893 37894 Change paragraph 2 to 37895 37896 With the exception of `__thread', at most one storage-class 37897 specifier may be given [...]. The `__thread' specifier may 37898 be used alone, or immediately following `extern' or `static'. 37899 37900 Add new text after paragraph 6 37901 37902 The declaration of an identifier for a variable that has 37903 block scope that specifies `__thread' shall also specify 37904 either `extern' or `static'. 37905 37906 The `__thread' specifier shall be used only with variables. 37907 37908 37909File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 37910 379116.58.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 37912-------------------------------------------------------- 37913 37914The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 37915that document the exact semantics of the language extension. 37916 37917 * [intro.execution] 37918 37919 New text after paragraph 4 37920 37921 A "thread" is a flow of control within the abstract machine. 37922 It is implementation defined whether or not there may be more 37923 than one thread. 37924 37925 New text after paragraph 7 37926 37927 It is unspecified whether additional action must be taken to 37928 ensure when and whether side effects are visible to other 37929 threads. 37930 37931 * [lex.key] 37932 37933 Add `__thread'. 37934 37935 * [basic.start.main] 37936 37937 Add after paragraph 5 37938 37939 The thread that begins execution at the `main' function is 37940 called the "main thread". It is implementation defined how 37941 functions beginning threads other than the main thread are 37942 designated or typed. A function so designated, as well as 37943 the `main' function, is called a "thread startup function". 37944 It is implementation defined what happens if a thread startup 37945 function returns. It is implementation defined what happens 37946 to other threads when any thread calls `exit'. 37947 37948 * [basic.start.init] 37949 37950 Add after paragraph 4 37951 37952 The storage for an object of thread storage duration shall be 37953 statically initialized before the first statement of the 37954 thread startup function. An object of thread storage 37955 duration shall not require dynamic initialization. 37956 37957 * [basic.start.term] 37958 37959 Add after paragraph 3 37960 37961 The type of an object with thread storage duration shall not 37962 have a non-trivial destructor, nor shall it be an array type 37963 whose elements (directly or indirectly) have non-trivial 37964 destructors. 37965 37966 * [basic.stc] 37967 37968 Add "thread storage duration" to the list in paragraph 1. 37969 37970 Change paragraph 2 37971 37972 Thread, static, and automatic storage durations are 37973 associated with objects introduced by declarations [...]. 37974 37975 Add `__thread' to the list of specifiers in paragraph 3. 37976 37977 * [basic.stc.thread] 37978 37979 New section before [basic.stc.static] 37980 37981 The keyword `__thread' applied to a non-local object gives the 37982 object thread storage duration. 37983 37984 A local variable or class data member declared both `static' 37985 and `__thread' gives the variable or member thread storage 37986 duration. 37987 37988 * [basic.stc.static] 37989 37990 Change paragraph 1 37991 37992 All objects which have neither thread storage duration, 37993 dynamic storage duration nor are local [...]. 37994 37995 * [dcl.stc] 37996 37997 Add `__thread' to the list in paragraph 1. 37998 37999 Change paragraph 1 38000 38001 With the exception of `__thread', at most one 38002 STORAGE-CLASS-SPECIFIER shall appear in a given 38003 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 38004 alone, or immediately following the `extern' or `static' 38005 specifiers. [...] 38006 38007 Add after paragraph 5 38008 38009 The `__thread' specifier can be applied only to the names of 38010 objects and to anonymous unions. 38011 38012 * [class.mem] 38013 38014 Add after paragraph 6 38015 38016 Non-`static' members shall not be `__thread'. 38017 38018 38019File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 38020 380216.59 Binary constants using the `0b' prefix 38022=========================================== 38023 38024Integer constants can be written as binary constants, consisting of a 38025sequence of `0' and `1' digits, prefixed by `0b' or `0B'. This is 38026particularly useful in environments that operate a lot on the bit-level 38027(like microcontrollers). 38028 38029 The following statements are identical: 38030 38031 i = 42; 38032 i = 0x2a; 38033 i = 052; 38034 i = 0b101010; 38035 38036 The type of these constants follows the same rules as for octal or 38037hexadecimal integer constants, so suffixes like `L' or `UL' can be 38038applied. 38039 38040 38041File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C++ Implementation, Up: Top 38042 380437 Extensions to the C++ Language 38044******************************** 38045 38046The GNU compiler provides these extensions to the C++ language (and you 38047can also use most of the C language extensions in your C++ programs). 38048If you want to write code that checks whether these features are 38049available, you can test for the GNU compiler the same way as for C 38050programs: check for a predefined macro `__GNUC__'. You can also use 38051`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 38052(cpp)Common Predefined Macros.). 38053 38054* Menu: 38055 38056* C++ Volatiles:: What constitutes an access to a volatile object. 38057* Restricted Pointers:: C99 restricted pointers and references. 38058* Vague Linkage:: Where G++ puts inlines, vtables and such. 38059* C++ Interface:: You can use a single C++ header file for both 38060 declarations and definitions. 38061* Template Instantiation:: Methods for ensuring that exactly one copy of 38062 each needed template instantiation is emitted. 38063* Bound member functions:: You can extract a function pointer to the 38064 method denoted by a `->*' or `.*' expression. 38065* C++ Attributes:: Variable, function, and type attributes for C++ only. 38066* Namespace Association:: Strong using-directives for namespace association. 38067* Type Traits:: Compiler support for type traits 38068* Java Exceptions:: Tweaking exception handling to work with Java. 38069* Deprecated Features:: Things will disappear from g++. 38070* Backwards Compatibility:: Compatibilities with earlier definitions of C++. 38071 38072 38073File: gcc.info, Node: C++ Volatiles, Next: Restricted Pointers, Up: C++ Extensions 38074 380757.1 When is a Volatile C++ Object Accessed? 38076=========================================== 38077 38078The C++ standard differs from the C standard in its treatment of 38079volatile objects. It fails to specify what constitutes a volatile 38080access, except to say that C++ should behave in a similar manner to C 38081with respect to volatiles, where possible. However, the different 38082lvalueness of expressions between C and C++ complicate the behavior. 38083G++ behaves the same as GCC for volatile access, *Note Volatiles: C 38084Extensions, for a description of GCC's behavior. 38085 38086 The C and C++ language specifications differ when an object is 38087accessed in a void context: 38088 38089 volatile int *src = SOMEVALUE; 38090 *src; 38091 38092 The C++ standard specifies that such expressions do not undergo lvalue 38093to rvalue conversion, and that the type of the dereferenced object may 38094be incomplete. The C++ standard does not specify explicitly that it is 38095lvalue to rvalue conversion which is responsible for causing an access. 38096There is reason to believe that it is, because otherwise certain simple 38097expressions become undefined. However, because it would surprise most 38098programmers, G++ treats dereferencing a pointer to volatile object of 38099complete type as GCC would do for an equivalent type in C. When the 38100object has incomplete type, G++ issues a warning; if you wish to force 38101an error, you must force a conversion to rvalue with, for instance, a 38102static cast. 38103 38104 When using a reference to volatile, G++ does not treat equivalent 38105expressions as accesses to volatiles, but instead issues a warning that 38106no volatile is accessed. The rationale for this is that otherwise it 38107becomes difficult to determine where volatile access occur, and not 38108possible to ignore the return value from functions returning volatile 38109references. Again, if you wish to force a read, cast the reference to 38110an rvalue. 38111 38112 G++ implements the same behavior as GCC does when assigning to a 38113volatile object - there is no reread of the assigned-to object, the 38114assigned rvalue is reused. Note that in C++ assignment expressions are 38115lvalues, and if used as an lvalue, the volatile object will be referred 38116to. For instance, VREF will refer to VOBJ, as expected, in the 38117following example: 38118 38119 volatile int vobj; 38120 volatile int &vref = vobj = SOMETHING; 38121 38122 38123File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: C++ Volatiles, Up: C++ Extensions 38124 381257.2 Restricting Pointer Aliasing 38126================================ 38127 38128As with the C front end, G++ understands the C99 feature of restricted 38129pointers, specified with the `__restrict__', or `__restrict' type 38130qualifier. Because you cannot compile C++ by specifying the `-std=c99' 38131language flag, `restrict' is not a keyword in C++. 38132 38133 In addition to allowing restricted pointers, you can specify restricted 38134references, which indicate that the reference is not aliased in the 38135local context. 38136 38137 void fn (int *__restrict__ rptr, int &__restrict__ rref) 38138 { 38139 /* ... */ 38140 } 38141 38142In the body of `fn', RPTR points to an unaliased integer and RREF 38143refers to a (different) unaliased integer. 38144 38145 You may also specify whether a member function's THIS pointer is 38146unaliased by using `__restrict__' as a member function qualifier. 38147 38148 void T::fn () __restrict__ 38149 { 38150 /* ... */ 38151 } 38152 38153Within the body of `T::fn', THIS will have the effective definition `T 38154*__restrict__ const this'. Notice that the interpretation of a 38155`__restrict__' member function qualifier is different to that of 38156`const' or `volatile' qualifier, in that it is applied to the pointer 38157rather than the object. This is consistent with other compilers which 38158implement restricted pointers. 38159 38160 As with all outermost parameter qualifiers, `__restrict__' is ignored 38161in function definition matching. This means you only need to specify 38162`__restrict__' in a function definition, rather than in a function 38163prototype as well. 38164 38165 38166File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 38167 381687.3 Vague Linkage 38169================= 38170 38171There are several constructs in C++ which require space in the object 38172file but are not clearly tied to a single translation unit. We say that 38173these constructs have "vague linkage". Typically such constructs are 38174emitted wherever they are needed, though sometimes we can be more 38175clever. 38176 38177Inline Functions 38178 Inline functions are typically defined in a header file which can 38179 be included in many different compilations. Hopefully they can 38180 usually be inlined, but sometimes an out-of-line copy is 38181 necessary, if the address of the function is taken or if inlining 38182 fails. In general, we emit an out-of-line copy in all translation 38183 units where one is needed. As an exception, we only emit inline 38184 virtual functions with the vtable, since it will always require a 38185 copy. 38186 38187 Local static variables and string constants used in an inline 38188 function are also considered to have vague linkage, since they 38189 must be shared between all inlined and out-of-line instances of 38190 the function. 38191 38192VTables 38193 C++ virtual functions are implemented in most compilers using a 38194 lookup table, known as a vtable. The vtable contains pointers to 38195 the virtual functions provided by a class, and each object of the 38196 class contains a pointer to its vtable (or vtables, in some 38197 multiple-inheritance situations). If the class declares any 38198 non-inline, non-pure virtual functions, the first one is chosen as 38199 the "key method" for the class, and the vtable is only emitted in 38200 the translation unit where the key method is defined. 38201 38202 _Note:_ If the chosen key method is later defined as inline, the 38203 vtable will still be emitted in every translation unit which 38204 defines it. Make sure that any inline virtuals are declared 38205 inline in the class body, even if they are not defined there. 38206 38207`type_info' objects 38208 C++ requires information about types to be written out in order to 38209 implement `dynamic_cast', `typeid' and exception handling. For 38210 polymorphic classes (classes with virtual functions), the 38211 `type_info' object is written out along with the vtable so that 38212 `dynamic_cast' can determine the dynamic type of a class object at 38213 runtime. For all other types, we write out the `type_info' object 38214 when it is used: when applying `typeid' to an expression, throwing 38215 an object, or referring to a type in a catch clause or exception 38216 specification. 38217 38218Template Instantiations 38219 Most everything in this section also applies to template 38220 instantiations, but there are other options as well. *Note 38221 Where's the Template?: Template Instantiation. 38222 38223 38224 When used with GNU ld version 2.8 or later on an ELF system such as 38225GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 38226these constructs will be discarded at link time. This is known as 38227COMDAT support. 38228 38229 On targets that don't support COMDAT, but do support weak symbols, GCC 38230will use them. This way one copy will override all the others, but the 38231unused copies will still take up space in the executable. 38232 38233 For targets which do not support either COMDAT or weak symbols, most 38234entities with vague linkage will be emitted as local symbols to avoid 38235duplicate definition errors from the linker. This will not happen for 38236local statics in inlines, however, as having multiple copies will 38237almost certainly break things. 38238 38239 *Note Declarations and Definitions in One Header: C++ Interface, for 38240another way to control placement of these constructs. 38241 38242 38243File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 38244 382457.4 #pragma interface and implementation 38246======================================== 38247 38248`#pragma interface' and `#pragma implementation' provide the user with 38249a way of explicitly directing the compiler to emit entities with vague 38250linkage (and debugging information) in a particular translation unit. 38251 38252 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 38253cases, because of COMDAT support and the "key method" heuristic 38254mentioned in *note Vague Linkage::. Using them can actually cause your 38255program to grow due to unnecessary out-of-line copies of inline 38256functions. Currently (3.4) the only benefit of these `#pragma's is 38257reduced duplication of debugging information, and that should be 38258addressed soon on DWARF 2 targets with the use of COMDAT groups. 38259 38260`#pragma interface' 38261`#pragma interface "SUBDIR/OBJECTS.h"' 38262 Use this directive in _header files_ that define object classes, 38263 to save space in most of the object files that use those classes. 38264 Normally, local copies of certain information (backup copies of 38265 inline member functions, debugging information, and the internal 38266 tables that implement virtual functions) must be kept in each 38267 object file that includes class definitions. You can use this 38268 pragma to avoid such duplication. When a header file containing 38269 `#pragma interface' is included in a compilation, this auxiliary 38270 information will not be generated (unless the main input source 38271 file itself uses `#pragma implementation'). Instead, the object 38272 files will contain references to be resolved at link time. 38273 38274 The second form of this directive is useful for the case where you 38275 have multiple headers with the same name in different directories. 38276 If you use this form, you must specify the same string to `#pragma 38277 implementation'. 38278 38279`#pragma implementation' 38280`#pragma implementation "OBJECTS.h"' 38281 Use this pragma in a _main input file_, when you want full output 38282 from included header files to be generated (and made globally 38283 visible). The included header file, in turn, should use `#pragma 38284 interface'. Backup copies of inline member functions, debugging 38285 information, and the internal tables used to implement virtual 38286 functions are all generated in implementation files. 38287 38288 If you use `#pragma implementation' with no argument, it applies to 38289 an include file with the same basename(1) as your source file. 38290 For example, in `allclass.cc', giving just `#pragma implementation' 38291 by itself is equivalent to `#pragma implementation "allclass.h"'. 38292 38293 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 38294 an implementation file whenever you would include it from 38295 `allclass.cc' even if you never specified `#pragma 38296 implementation'. This was deemed to be more trouble than it was 38297 worth, however, and disabled. 38298 38299 Use the string argument if you want a single implementation file to 38300 include code from multiple header files. (You must also use 38301 `#include' to include the header file; `#pragma implementation' 38302 only specifies how to use the file--it doesn't actually include 38303 it.) 38304 38305 There is no way to split up the contents of a single header file 38306 into multiple implementation files. 38307 38308 `#pragma implementation' and `#pragma interface' also have an effect 38309on function inlining. 38310 38311 If you define a class in a header file marked with `#pragma 38312interface', the effect on an inline function defined in that class is 38313similar to an explicit `extern' declaration--the compiler emits no code 38314at all to define an independent version of the function. Its 38315definition is used only for inlining with its callers. 38316 38317 Conversely, when you include the same header file in a main source file 38318that declares it as `#pragma implementation', the compiler emits code 38319for the function itself; this defines a version of the function that 38320can be found via pointers (or by callers compiled without inlining). 38321If all calls to the function can be inlined, you can avoid emitting the 38322function by compiling with `-fno-implement-inlines'. If any calls were 38323not inlined, you will get linker errors. 38324 38325 ---------- Footnotes ---------- 38326 38327 (1) A file's "basename" was the name stripped of all leading path 38328information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 38329 38330 38331File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 38332 383337.5 Where's the Template? 38334========================= 38335 38336C++ templates are the first language feature to require more 38337intelligence from the environment than one usually finds on a UNIX 38338system. Somehow the compiler and linker have to make sure that each 38339template instance occurs exactly once in the executable if it is needed, 38340and not at all otherwise. There are two basic approaches to this 38341problem, which are referred to as the Borland model and the Cfront 38342model. 38343 38344Borland model 38345 Borland C++ solved the template instantiation problem by adding 38346 the code equivalent of common blocks to their linker; the compiler 38347 emits template instances in each translation unit that uses them, 38348 and the linker collapses them together. The advantage of this 38349 model is that the linker only has to consider the object files 38350 themselves; there is no external complexity to worry about. This 38351 disadvantage is that compilation time is increased because the 38352 template code is being compiled repeatedly. Code written for this 38353 model tends to include definitions of all templates in the header 38354 file, since they must be seen to be instantiated. 38355 38356Cfront model 38357 The AT&T C++ translator, Cfront, solved the template instantiation 38358 problem by creating the notion of a template repository, an 38359 automatically maintained place where template instances are 38360 stored. A more modern version of the repository works as follows: 38361 As individual object files are built, the compiler places any 38362 template definitions and instantiations encountered in the 38363 repository. At link time, the link wrapper adds in the objects in 38364 the repository and compiles any needed instances that were not 38365 previously emitted. The advantages of this model are more optimal 38366 compilation speed and the ability to use the system linker; to 38367 implement the Borland model a compiler vendor also needs to 38368 replace the linker. The disadvantages are vastly increased 38369 complexity, and thus potential for error; for some code this can be 38370 just as transparent, but in practice it can been very difficult to 38371 build multiple programs in one directory and one program in 38372 multiple directories. Code written for this model tends to 38373 separate definitions of non-inline member templates into a 38374 separate file, which should be compiled separately. 38375 38376 When used with GNU ld version 2.8 or later on an ELF system such as 38377GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 38378Borland model. On other systems, G++ implements neither automatic 38379model. 38380 38381 A future version of G++ will support a hybrid model whereby the 38382compiler will emit any instantiations for which the template definition 38383is included in the compile, and store template definitions and 38384instantiation context information into the object file for the rest. 38385The link wrapper will extract that information as necessary and invoke 38386the compiler to produce the remaining instantiations. The linker will 38387then combine duplicate instantiations. 38388 38389 In the mean time, you have the following options for dealing with 38390template instantiations: 38391 38392 1. Compile your template-using code with `-frepo'. The compiler will 38393 generate files with the extension `.rpo' listing all of the 38394 template instantiations used in the corresponding object files 38395 which could be instantiated there; the link wrapper, `collect2', 38396 will then update the `.rpo' files to tell the compiler where to 38397 place those instantiations and rebuild any affected object files. 38398 The link-time overhead is negligible after the first pass, as the 38399 compiler will continue to place the instantiations in the same 38400 files. 38401 38402 This is your best option for application code written for the 38403 Borland model, as it will just work. Code written for the Cfront 38404 model will need to be modified so that the template definitions 38405 are available at one or more points of instantiation; usually this 38406 is as simple as adding `#include <tmethods.cc>' to the end of each 38407 template header. 38408 38409 For library code, if you want the library to provide all of the 38410 template instantiations it needs, just try to link all of its 38411 object files together; the link will fail, but cause the 38412 instantiations to be generated as a side effect. Be warned, 38413 however, that this may cause conflicts if multiple libraries try 38414 to provide the same instantiations. For greater control, use 38415 explicit instantiation as described in the next option. 38416 38417 2. Compile your code with `-fno-implicit-templates' to disable the 38418 implicit generation of template instances, and explicitly 38419 instantiate all the ones you use. This approach requires more 38420 knowledge of exactly which instances you need than do the others, 38421 but it's less mysterious and allows greater control. You can 38422 scatter the explicit instantiations throughout your program, 38423 perhaps putting them in the translation units where the instances 38424 are used or the translation units that define the templates 38425 themselves; you can put all of the explicit instantiations you 38426 need into one big file; or you can create small files like 38427 38428 #include "Foo.h" 38429 #include "Foo.cc" 38430 38431 template class Foo<int>; 38432 template ostream& operator << 38433 (ostream&, const Foo<int>&); 38434 38435 for each of the instances you need, and create a template 38436 instantiation library from those. 38437 38438 If you are using Cfront-model code, you can probably get away with 38439 not using `-fno-implicit-templates' when compiling files that don't 38440 `#include' the member template definitions. 38441 38442 If you use one big file to do the instantiations, you may want to 38443 compile it without `-fno-implicit-templates' so you get all of the 38444 instances required by your explicit instantiations (but not by any 38445 other files) without having to specify them as well. 38446 38447 G++ has extended the template instantiation syntax given in the ISO 38448 standard to allow forward declaration of explicit instantiations 38449 (with `extern'), instantiation of the compiler support data for a 38450 template class (i.e. the vtable) without instantiating any of its 38451 members (with `inline'), and instantiation of only the static data 38452 members of a template class, without the support data or member 38453 functions (with (`static'): 38454 38455 extern template int max (int, int); 38456 inline template class Foo<int>; 38457 static template class Foo<int>; 38458 38459 3. Do nothing. Pretend G++ does implement automatic instantiation 38460 management. Code written for the Borland model will work fine, but 38461 each translation unit will contain instances of each of the 38462 templates it uses. In a large program, this can lead to an 38463 unacceptable amount of code duplication. 38464 38465 38466File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 38467 384687.6 Extracting the function pointer from a bound pointer to member function 38469=========================================================================== 38470 38471In C++, pointer to member functions (PMFs) are implemented using a wide 38472pointer of sorts to handle all the possible call mechanisms; the PMF 38473needs to store information about how to adjust the `this' pointer, and 38474if the function pointed to is virtual, where to find the vtable, and 38475where in the vtable to look for the member function. If you are using 38476PMFs in an inner loop, you should really reconsider that decision. If 38477that is not an option, you can extract the pointer to the function that 38478would be called for a given object/PMF pair and call it directly inside 38479the inner loop, to save a bit of time. 38480 38481 Note that you will still be paying the penalty for the call through a 38482function pointer; on most modern architectures, such a call defeats the 38483branch prediction features of the CPU. This is also true of normal 38484virtual function calls. 38485 38486 The syntax for this extension is 38487 38488 extern A a; 38489 extern int (A::*fp)(); 38490 typedef int (*fptr)(A *); 38491 38492 fptr p = (fptr)(a.*fp); 38493 38494 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 38495object is needed to obtain the address of the function. They can be 38496converted to function pointers directly: 38497 38498 fptr p1 = (fptr)(&A::foo); 38499 38500 You must specify `-Wno-pmf-conversions' to use this extension. 38501 38502 38503File: gcc.info, Node: C++ Attributes, Next: Namespace Association, Prev: Bound member functions, Up: C++ Extensions 38504 385057.7 C++-Specific Variable, Function, and Type Attributes 38506======================================================== 38507 38508Some attributes only make sense for C++ programs. 38509 38510`init_priority (PRIORITY)' 38511 In Standard C++, objects defined at namespace scope are guaranteed 38512 to be initialized in an order in strict accordance with that of 38513 their definitions _in a given translation unit_. No guarantee is 38514 made for initializations across translation units. However, GNU 38515 C++ allows users to control the order of initialization of objects 38516 defined at namespace scope with the `init_priority' attribute by 38517 specifying a relative PRIORITY, a constant integral expression 38518 currently bounded between 101 and 65535 inclusive. Lower numbers 38519 indicate a higher priority. 38520 38521 In the following example, `A' would normally be created before 38522 `B', but the `init_priority' attribute has reversed that order: 38523 38524 Some_Class A __attribute__ ((init_priority (2000))); 38525 Some_Class B __attribute__ ((init_priority (543))); 38526 38527 Note that the particular values of PRIORITY do not matter; only 38528 their relative ordering. 38529 38530`java_interface' 38531 This type attribute informs C++ that the class is a Java 38532 interface. It may only be applied to classes declared within an 38533 `extern "Java"' block. Calls to methods declared in this 38534 interface will be dispatched using GCJ's interface table 38535 mechanism, instead of regular virtual table dispatch. 38536 38537 38538 See also *note Namespace Association::. 38539 38540 38541File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: C++ Attributes, Up: C++ Extensions 38542 385437.8 Namespace Association 38544========================= 38545 38546*Caution:* The semantics of this extension are not fully defined. 38547Users should refrain from using this extension as its semantics may 38548change subtly over time. It is possible that this extension will be 38549removed in future versions of G++. 38550 38551 A using-directive with `__attribute ((strong))' is stronger than a 38552normal using-directive in two ways: 38553 38554 * Templates from the used namespace can be specialized and explicitly 38555 instantiated as though they were members of the using namespace. 38556 38557 * The using namespace is considered an associated namespace of all 38558 templates in the used namespace for purposes of argument-dependent 38559 name lookup. 38560 38561 The used namespace must be nested within the using namespace so that 38562normal unqualified lookup works properly. 38563 38564 This is useful for composing a namespace transparently from 38565implementation namespaces. For example: 38566 38567 namespace std { 38568 namespace debug { 38569 template <class T> struct A { }; 38570 } 38571 using namespace debug __attribute ((__strong__)); 38572 template <> struct A<int> { }; // ok to specialize 38573 38574 template <class T> void f (A<T>); 38575 } 38576 38577 int main() 38578 { 38579 f (std::A<float>()); // lookup finds std::f 38580 f (std::A<int>()); 38581 } 38582 38583 38584File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 38585 385867.9 Type Traits 38587=============== 38588 38589The C++ front-end implements syntactic extensions that allow to 38590determine at compile time various characteristics of a type (or of a 38591pair of types). 38592 38593`__has_nothrow_assign (type)' 38594 If `type' is const qualified or is a reference type then the trait 38595 is false. Otherwise if `__has_trivial_assign (type)' is true then 38596 the trait is true, else if `type' is a cv class or union type with 38597 copy assignment operators that are known not to throw an exception 38598 then the trait is true, else it is false. Requires: `type' shall 38599 be a complete type, (possibly cv-qualified) `void', or an array of 38600 unknown bound. 38601 38602`__has_nothrow_copy (type)' 38603 If `__has_trivial_copy (type)' is true then the trait is true, 38604 else if `type' is a cv class or union type with copy constructors 38605 that are known not to throw an exception then the trait is true, 38606 else it is false. Requires: `type' shall be a complete type, 38607 (possibly cv-qualified) `void', or an array of unknown bound. 38608 38609`__has_nothrow_constructor (type)' 38610 If `__has_trivial_constructor (type)' is true then the trait is 38611 true, else if `type' is a cv class or union type (or array 38612 thereof) with a default constructor that is known not to throw an 38613 exception then the trait is true, else it is false. Requires: 38614 `type' shall be a complete type, (possibly cv-qualified) `void', 38615 or an array of unknown bound. 38616 38617`__has_trivial_assign (type)' 38618 If `type' is const qualified or is a reference type then the trait 38619 is false. Otherwise if `__is_pod (type)' is true then the trait is 38620 true, else if `type' is a cv class or union type with a trivial 38621 copy assignment ([class.copy]) then the trait is true, else it is 38622 false. Requires: `type' shall be a complete type, (possibly 38623 cv-qualified) `void', or an array of unknown bound. 38624 38625`__has_trivial_copy (type)' 38626 If `__is_pod (type)' is true or `type' is a reference type then 38627 the trait is true, else if `type' is a cv class or union type with 38628 a trivial copy constructor ([class.copy]) then the trait is true, 38629 else it is false. Requires: `type' shall be a complete type, 38630 (possibly cv-qualified) `void', or an array of unknown bound. 38631 38632`__has_trivial_constructor (type)' 38633 If `__is_pod (type)' is true then the trait is true, else if 38634 `type' is a cv class or union type (or array thereof) with a 38635 trivial default constructor ([class.ctor]) then the trait is true, 38636 else it is false. Requires: `type' shall be a complete type, 38637 (possibly cv-qualified) `void', or an array of unknown bound. 38638 38639`__has_trivial_destructor (type)' 38640 If `__is_pod (type)' is true or `type' is a reference type then 38641 the trait is true, else if `type' is a cv class or union type (or 38642 array thereof) with a trivial destructor ([class.dtor]) then the 38643 trait is true, else it is false. Requires: `type' shall be a 38644 complete type, (possibly cv-qualified) `void', or an array of 38645 unknown bound. 38646 38647`__has_virtual_destructor (type)' 38648 If `type' is a class type with a virtual destructor ([class.dtor]) 38649 then the trait is true, else it is false. Requires: `type' shall 38650 be a complete type, (possibly cv-qualified) `void', or an array of 38651 unknown bound. 38652 38653`__is_abstract (type)' 38654 If `type' is an abstract class ([class.abstract]) then the trait 38655 is true, else it is false. Requires: `type' shall be a complete 38656 type, (possibly cv-qualified) `void', or an array of unknown bound. 38657 38658`__is_base_of (base_type, derived_type)' 38659 If `base_type' is a base class of `derived_type' ([class.derived]) 38660 then the trait is true, otherwise it is false. Top-level cv 38661 qualifications of `base_type' and `derived_type' are ignored. For 38662 the purposes of this trait, a class type is considered is own 38663 base. Requires: if `__is_class (base_type)' and `__is_class 38664 (derived_type)' are true and `base_type' and `derived_type' are 38665 not the same type (disregarding cv-qualifiers), `derived_type' 38666 shall be a complete type. Diagnostic is produced if this 38667 requirement is not met. 38668 38669`__is_class (type)' 38670 If `type' is a cv class type, and not a union type 38671 ([basic.compound]) the trait is true, else it is false. 38672 38673`__is_empty (type)' 38674 If `__is_class (type)' is false then the trait is false. 38675 Otherwise `type' is considered empty if and only if: `type' has no 38676 non-static data members, or all non-static data members, if any, 38677 are bit-fields of length 0, and `type' has no virtual members, and 38678 `type' has no virtual base classes, and `type' has no base classes 38679 `base_type' for which `__is_empty (base_type)' is false. 38680 Requires: `type' shall be a complete type, (possibly cv-qualified) 38681 `void', or an array of unknown bound. 38682 38683`__is_enum (type)' 38684 If `type' is a cv enumeration type ([basic.compound]) the trait is 38685 true, else it is false. 38686 38687`__is_literal_type (type)' 38688 If `type' is a literal type ([basic.types]) the trait is true, 38689 else it is false. Requires: `type' shall be a complete type, 38690 (possibly cv-qualified) `void', or an array of unknown bound. 38691 38692`__is_pod (type)' 38693 If `type' is a cv POD type ([basic.types]) then the trait is true, 38694 else it is false. Requires: `type' shall be a complete type, 38695 (possibly cv-qualified) `void', or an array of unknown bound. 38696 38697`__is_polymorphic (type)' 38698 If `type' is a polymorphic class ([class.virtual]) then the trait 38699 is true, else it is false. Requires: `type' shall be a complete 38700 type, (possibly cv-qualified) `void', or an array of unknown bound. 38701 38702`__is_standard_layout (type)' 38703 If `type' is a standard-layout type ([basic.types]) the trait is 38704 true, else it is false. Requires: `type' shall be a complete 38705 type, (possibly cv-qualified) `void', or an array of unknown bound. 38706 38707`__is_trivial (type)' 38708 If `type' is a trivial type ([basic.types]) the trait is true, 38709 else it is false. Requires: `type' shall be a complete type, 38710 (possibly cv-qualified) `void', or an array of unknown bound. 38711 38712`__is_union (type)' 38713 If `type' is a cv union type ([basic.compound]) the trait is true, 38714 else it is false. 38715 38716 38717 38718File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 38719 387207.10 Java Exceptions 38721==================== 38722 38723The Java language uses a slightly different exception handling model 38724from C++. Normally, GNU C++ will automatically detect when you are 38725writing C++ code that uses Java exceptions, and handle them 38726appropriately. However, if C++ code only needs to execute destructors 38727when Java exceptions are thrown through it, GCC will guess incorrectly. 38728Sample problematic code is: 38729 38730 struct S { ~S(); }; 38731 extern void bar(); // is written in Java, and may throw exceptions 38732 void foo() 38733 { 38734 S s; 38735 bar(); 38736 } 38737 38738The usual effect of an incorrect guess is a link failure, complaining of 38739a missing routine called `__gxx_personality_v0'. 38740 38741 You can inform the compiler that Java exceptions are to be used in a 38742translation unit, irrespective of what it might think, by writing 38743`#pragma GCC java_exceptions' at the head of the file. This `#pragma' 38744must appear before any functions that throw or catch exceptions, or run 38745destructors when exceptions are thrown through them. 38746 38747 You cannot mix Java and C++ exceptions in the same translation unit. 38748It is believed to be safe to throw a C++ exception from one file through 38749another file compiled for the Java exception model, or vice versa, but 38750there may be bugs in this area. 38751 38752 38753File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 38754 387557.11 Deprecated Features 38756======================== 38757 38758In the past, the GNU C++ compiler was extended to experiment with new 38759features, at a time when the C++ language was still evolving. Now that 38760the C++ standard is complete, some of those features are superseded by 38761superior alternatives. Using the old features might cause a warning in 38762some cases that the feature will be dropped in the future. In other 38763cases, the feature might be gone already. 38764 38765 While the list below is not exhaustive, it documents some of the 38766options that are now deprecated: 38767 38768`-fexternal-templates' 38769`-falt-external-templates' 38770 These are two of the many ways for G++ to implement template 38771 instantiation. *Note Template Instantiation::. The C++ standard 38772 clearly defines how template definitions have to be organized 38773 across implementation units. G++ has an implicit instantiation 38774 mechanism that should work just fine for standard-conforming code. 38775 38776`-fstrict-prototype' 38777`-fno-strict-prototype' 38778 Previously it was possible to use an empty prototype parameter 38779 list to indicate an unspecified number of parameters (like C), 38780 rather than no parameters, as C++ demands. This feature has been 38781 removed, except where it is required for backwards compatibility. 38782 *Note Backwards Compatibility::. 38783 38784 G++ allows a virtual function returning `void *' to be overridden by 38785one returning a different pointer type. This extension to the 38786covariant return type rules is now deprecated and will be removed from a 38787future version. 38788 38789 The G++ minimum and maximum operators (`<?' and `>?') and their 38790compound forms (`<?=') and `>?=') have been deprecated and are now 38791removed from G++. Code using these operators should be modified to use 38792`std::min' and `std::max' instead. 38793 38794 The named return value extension has been deprecated, and is now 38795removed from G++. 38796 38797 The use of initializer lists with new expressions has been deprecated, 38798and is now removed from G++. 38799 38800 Floating and complex non-type template parameters have been deprecated, 38801and are now removed from G++. 38802 38803 The implicit typename extension has been deprecated and is now removed 38804from G++. 38805 38806 The use of default arguments in function pointers, function typedefs 38807and other places where they are not permitted by the standard is 38808deprecated and will be removed from a future version of G++. 38809 38810 G++ allows floating-point literals to appear in integral constant 38811expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 38812deprecated and will be removed from a future version. 38813 38814 G++ allows static data members of const floating-point type to be 38815declared with an initializer in a class definition. The standard only 38816allows initializers for static members of const integral types and const 38817enumeration types so this extension has been deprecated and will be 38818removed from a future version. 38819 38820 38821File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 38822 388237.12 Backwards Compatibility 38824============================ 38825 38826Now that there is a definitive ISO standard C++, G++ has a specification 38827to adhere to. The C++ language evolved over time, and features that 38828used to be acceptable in previous drafts of the standard, such as the 38829ARM [Annotated C++ Reference Manual], are no longer accepted. In order 38830to allow compilation of C++ written to such drafts, G++ contains some 38831backwards compatibilities. _All such backwards compatibility features 38832are liable to disappear in future versions of G++._ They should be 38833considered deprecated. *Note Deprecated Features::. 38834 38835`For scope' 38836 If a variable is declared at for scope, it used to remain in scope 38837 until the end of the scope which contained the for statement 38838 (rather than just within the for scope). G++ retains this, but 38839 issues a warning, if such a variable is accessed outside the for 38840 scope. 38841 38842`Implicit C language' 38843 Old C system header files did not contain an `extern "C" {...}' 38844 scope to set the language. On such systems, all header files are 38845 implicitly scoped inside a C language scope. Also, an empty 38846 prototype `()' will be treated as an unspecified number of 38847 arguments, rather than no arguments, as C++ demands. 38848 38849 38850File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 38851 388528 GNU Objective-C features 38853************************** 38854 38855This document is meant to describe some of the GNU Objective-C 38856features. It is not intended to teach you Objective-C. There are 38857several resources on the Internet that present the language. 38858 38859* Menu: 38860 38861* GNU Objective-C runtime API:: 38862* Executing code before main:: 38863* Type encoding:: 38864* Garbage Collection:: 38865* Constant string objects:: 38866* compatibility_alias:: 38867* Exceptions:: 38868* Synchronization:: 38869* Fast enumeration:: 38870* Messaging with the GNU Objective-C runtime:: 38871 38872 38873File: gcc.info, Node: GNU Objective-C runtime API, Next: Executing code before main, Up: Objective-C 38874 388758.1 GNU Objective-C runtime API 38876=============================== 38877 38878This section is specific for the GNU Objective-C runtime. If you are 38879using a different runtime, you can skip it. 38880 38881 The GNU Objective-C runtime provides an API that allows you to 38882interact with the Objective-C runtime system, querying the live runtime 38883structures and even manipulating them. This allows you for example to 38884inspect and navigate classes, methods and protocols; to define new 38885classes or new methods, and even to modify existing classes or 38886protocols. 38887 38888 If you are using a "Foundation" library such as GNUstep-Base, this 38889library will provide you with a rich set of functionality to do most of 38890the inspection tasks, and you probably will only need direct access to 38891the GNU Objective-C runtime API to define new classes or methods. 38892 38893* Menu: 38894 38895* Modern GNU Objective-C runtime API:: 38896* Traditional GNU Objective-C runtime API:: 38897 38898 38899File: gcc.info, Node: Modern GNU Objective-C runtime API, Next: Traditional GNU Objective-C runtime API, Up: GNU Objective-C runtime API 38900 389018.1.1 Modern GNU Objective-C runtime API 38902---------------------------------------- 38903 38904The GNU Objective-C runtime provides an API which is similar to the one 38905provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime. The 38906API is documented in the public header files of the GNU Objective-C 38907runtime: 38908 38909 * `objc/objc.h': this is the basic Objective-C header file, defining 38910 the basic Objective-C types such as `id', `Class' and `BOOL'. You 38911 have to include this header to do almost anything with Objective-C. 38912 38913 * `objc/runtime.h': this header declares most of the public runtime 38914 API functions allowing you to inspect and manipulate the 38915 Objective-C runtime data structures. These functions are fairly 38916 standardized across Objective-C runtimes and are almost identical 38917 to the Apple/NeXT Objective-C runtime ones. It does not declare 38918 functions in some specialized areas (constructing and forwarding 38919 message invocations, threading) which are in the other headers 38920 below. You have to include `objc/objc.h' and `objc/runtime.h' to 38921 use any of the functions, such as `class_getName()', declared in 38922 `objc/runtime.h'. 38923 38924 * `objc/message.h': this header declares public functions used to 38925 construct, deconstruct and forward message invocations. Because 38926 messaging is done in quite a different way on different runtimes, 38927 functions in this header are specific to the GNU Objective-C 38928 runtime implementation. 38929 38930 * `objc/objc-exception.h': this header declares some public 38931 functions related to Objective-C exceptions. For example 38932 functions in this header allow you to throw an Objective-C 38933 exception from plain C/C++ code. 38934 38935 * `objc/objc-sync.h': this header declares some public functions 38936 related to the Objective-C `@synchronized()' syntax, allowing you 38937 to emulate an Objective-C `@synchronized()' block in plain C/C++ 38938 code. 38939 38940 * `objc/thr.h': this header declares a public runtime API threading 38941 layer that is only provided by the GNU Objective-C runtime. It 38942 declares functions such as `objc_mutex_lock()', which provide a 38943 platform-independent set of threading functions. 38944 38945 38946 The header files contain detailed documentation for each function in 38947the GNU Objective-C runtime API. 38948 38949 38950File: gcc.info, Node: Traditional GNU Objective-C runtime API, Prev: Modern GNU Objective-C runtime API, Up: GNU Objective-C runtime API 38951 389528.1.2 Traditional GNU Objective-C runtime API 38953--------------------------------------------- 38954 38955The GNU Objective-C runtime used to provide a different API, which we 38956call the "traditional" GNU Objective-C runtime API. Functions 38957belonging to this API are easy to recognize because they use a 38958different naming convention, such as `class_get_super_class()' 38959(traditional API) instead of `class_getSuperclass()' (modern API). 38960Software using this API includes the file `objc/objc-api.h' where it is 38961declared. 38962 38963 The traditional API is deprecated but it is still supported in this 38964release of the runtime; you can access it as usual by including 38965`objc/objc-api.h'. 38966 38967 If you are using the traditional API you are urged to upgrade your 38968software to use the modern API because the traditional API requires 38969access to private runtime internals to do anything serious with it; for 38970this reason, there is no guarantee that future releases of the GNU 38971Objective-C runtime library will be able to provide a fully compatible 38972`objc/objc-api.h' as the private runtime internals change. It is 38973expected that the next release will hide a number of runtime internals 38974making the traditional API nominally supported but fairly useless 38975beyond very simple use cases. 38976 38977 Finally, you can not include both `objc/objc-api.h' and 38978`objc/runtime.h' at the same time. The traditional and modern APIs 38979unfortunately have some conflicting declarations (such as the one for 38980`Method') and can not be used at the same time. 38981 38982 38983File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: GNU Objective-C runtime API, Up: Objective-C 38984 389858.2 `+load': Executing code before main 38986======================================= 38987 38988This section is specific for the GNU Objective-C runtime. If you are 38989using a different runtime, you can skip it. 38990 38991 The GNU Objective-C runtime provides a way that allows you to execute 38992code before the execution of the program enters the `main' function. 38993The code is executed on a per-class and a per-category basis, through a 38994special class method `+load'. 38995 38996 This facility is very useful if you want to initialize global variables 38997which can be accessed by the program directly, without sending a message 38998to the class first. The usual way to initialize global variables, in 38999the `+initialize' method, might not be useful because `+initialize' is 39000only called when the first message is sent to a class object, which in 39001some cases could be too late. 39002 39003 Suppose for example you have a `FileStream' class that declares 39004`Stdin', `Stdout' and `Stderr' as global variables, like below: 39005 39006 39007 FileStream *Stdin = nil; 39008 FileStream *Stdout = nil; 39009 FileStream *Stderr = nil; 39010 39011 @implementation FileStream 39012 39013 + (void)initialize 39014 { 39015 Stdin = [[FileStream new] initWithFd:0]; 39016 Stdout = [[FileStream new] initWithFd:1]; 39017 Stderr = [[FileStream new] initWithFd:2]; 39018 } 39019 39020 /* Other methods here */ 39021 @end 39022 39023 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 39024in `+initialize' occurs too late. The programmer can send a message to 39025one of these objects before the variables are actually initialized, 39026thus sending messages to the `nil' object. The `+initialize' method 39027which actually initializes the global variables is not invoked until 39028the first message is sent to the class object. The solution would 39029require these variables to be initialized just before entering `main'. 39030 39031 The correct solution of the above problem is to use the `+load' method 39032instead of `+initialize': 39033 39034 39035 @implementation FileStream 39036 39037 + (void)load 39038 { 39039 Stdin = [[FileStream new] initWithFd:0]; 39040 Stdout = [[FileStream new] initWithFd:1]; 39041 Stderr = [[FileStream new] initWithFd:2]; 39042 } 39043 39044 /* Other methods here */ 39045 @end 39046 39047 The `+load' is a method that is not overridden by categories. If a 39048class and a category of it both implement `+load', both methods are 39049invoked. This allows some additional initializations to be performed in 39050a category. 39051 39052 This mechanism is not intended to be a replacement for `+initialize'. 39053You should be aware of its limitations when you decide to use it 39054instead of `+initialize'. 39055 39056* Menu: 39057 39058* What you can and what you cannot do in +load:: 39059 39060 39061File: gcc.info, Node: What you can and what you cannot do in +load, Up: Executing code before main 39062 390638.2.1 What you can and what you cannot do in `+load' 39064---------------------------------------------------- 39065 39066`+load' is to be used only as a last resort. Because it is executed 39067very early, most of the Objective-C runtime machinery will not be ready 39068when `+load' is executed; hence `+load' works best for executing C code 39069that is independent on the Objective-C runtime. 39070 39071 The `+load' implementation in the GNU runtime guarantees you the 39072following things: 39073 39074 * you can write whatever C code you like; 39075 39076 * you can allocate and send messages to objects whose class is 39077 implemented in the same file; 39078 39079 * the `+load' implementation of all super classes of a class are 39080 executed before the `+load' of that class is executed; 39081 39082 * the `+load' implementation of a class is executed before the 39083 `+load' implementation of any category. 39084 39085 39086 In particular, the following things, even if they can work in a 39087particular case, are not guaranteed: 39088 39089 * allocation of or sending messages to arbitrary objects; 39090 39091 * allocation of or sending messages to objects whose classes have a 39092 category implemented in the same file; 39093 39094 * sending messages to Objective-C constant strings (`@"this is a 39095 constant string"'); 39096 39097 39098 You should make no assumptions about receiving `+load' in sibling 39099classes when you write `+load' of a class. The order in which sibling 39100classes receive `+load' is not guaranteed. 39101 39102 The order in which `+load' and `+initialize' are called could be 39103problematic if this matters. If you don't allocate objects inside 39104`+load', it is guaranteed that `+load' is called before `+initialize'. 39105If you create an object inside `+load' the `+initialize' method of 39106object's class is invoked even if `+load' was not invoked. Note if you 39107explicitly call `+load' on a class, `+initialize' will be called first. 39108To avoid possible problems try to implement only one of these methods. 39109 39110 The `+load' method is also invoked when a bundle is dynamically loaded 39111into your running program. This happens automatically without any 39112intervening operation from you. When you write bundles and you need to 39113write `+load' you can safely create and send messages to objects whose 39114classes already exist in the running program. The same restrictions as 39115above apply to classes defined in bundle. 39116 39117 39118File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 39119 391208.3 Type encoding 39121================= 39122 39123This is an advanced section. Type encodings are used extensively by 39124the compiler and by the runtime, but you generally do not need to know 39125about them to use Objective-C. 39126 39127 The Objective-C compiler generates type encodings for all the types. 39128These type encodings are used at runtime to find out information about 39129selectors and methods and about objects and classes. 39130 39131 The types are encoded in the following way: 39132 39133`_Bool' `B' 39134`char' `c' 39135`unsigned char' `C' 39136`short' `s' 39137`unsigned short' `S' 39138`int' `i' 39139`unsigned int' `I' 39140`long' `l' 39141`unsigned long' `L' 39142`long long' `q' 39143`unsigned long `Q' 39144long' 39145`float' `f' 39146`double' `d' 39147`long double' `D' 39148`void' `v' 39149`id' `@' 39150`Class' `#' 39151`SEL' `:' 39152`char*' `*' 39153`enum' an `enum' is encoded exactly as the integer type that 39154 the compiler uses for it, which depends on the 39155 enumeration values. Often the compiler users 39156 `unsigned int', which is then encoded as `I'. 39157unknown type `?' 39158Complex types `j' followed by the inner type. For example 39159 `_Complex double' is encoded as "jd". 39160bit-fields `b' followed by the starting position of the 39161 bit-field, the type of the bit-field and the size of 39162 the bit-field (the bit-fields encoding was changed 39163 from the NeXT's compiler encoding, see below) 39164 39165 The encoding of bit-fields has changed to allow bit-fields to be 39166properly handled by the runtime functions that compute sizes and 39167alignments of types that contain bit-fields. The previous encoding 39168contained only the size of the bit-field. Using only this information 39169it is not possible to reliably compute the size occupied by the 39170bit-field. This is very important in the presence of the Boehm's 39171garbage collector because the objects are allocated using the typed 39172memory facility available in this collector. The typed memory 39173allocation requires information about where the pointers are located 39174inside the object. 39175 39176 The position in the bit-field is the position, counting in bits, of the 39177bit closest to the beginning of the structure. 39178 39179 The non-atomic types are encoded as follows: 39180 39181pointers `^' followed by the pointed type. 39182arrays `[' followed by the number of elements in the array 39183 followed by the type of the elements followed by `]' 39184structures `{' followed by the name of the structure (or `?' if the 39185 structure is unnamed), the `=' sign, the type of the 39186 members and by `}' 39187unions `(' followed by the name of the structure (or `?' if the 39188 union is unnamed), the `=' sign, the type of the members 39189 followed by `)' 39190vectors `![' followed by the vector_size (the number of bytes 39191 composing the vector) followed by a comma, followed by 39192 the alignment (in bytes) of the vector, followed by the 39193 type of the elements followed by `]' 39194 39195 Here are some types and their encodings, as they are generated by the 39196compiler on an i386 machine: 39197 39198 39199Objective-C type Compiler encoding 39200 int a[10]; `[10i]' 39201 struct { `{?=i[3f]b128i3b131i2c}' 39202 int i; 39203 float f[3]; 39204 int a:3; 39205 int b:2; 39206 char c; 39207 } 39208 int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine) 39209 39210 39211 In addition to the types the compiler also encodes the type 39212specifiers. The table below describes the encoding of the current 39213Objective-C type specifiers: 39214 39215 39216Specifier Encoding 39217`const' `r' 39218`in' `n' 39219`inout' `N' 39220`out' `o' 39221`bycopy' `O' 39222`byref' `R' 39223`oneway' `V' 39224 39225 39226 The type specifiers are encoded just before the type. Unlike types 39227however, the type specifiers are only encoded when they appear in method 39228argument types. 39229 39230 Note how `const' interacts with pointers: 39231 39232 39233Objective-C type Compiler encoding 39234 const int `ri' 39235 const int* `^ri' 39236 int *const `r^i' 39237 39238 39239 `const int*' is a pointer to a `const int', and so is encoded as 39240`^ri'. `int* const', instead, is a `const' pointer to an `int', and so 39241is encoded as `r^i'. 39242 39243 Finally, there is a complication when encoding `const char *' versus 39244`char * const'. Because `char *' is encoded as `*' and not as `^c', 39245there is no way to express the fact that `r' applies to the pointer or 39246to the pointee. 39247 39248 Hence, it is assumed as a convention that `r*' means `const char *' 39249(since it is what is most often meant), and there is no way to encode 39250`char *const'. `char *const' would simply be encoded as `*', and the 39251`const' is lost. 39252 39253* Menu: 39254 39255* Legacy type encoding:: 39256* @encode:: 39257* Method signatures:: 39258 39259 39260File: gcc.info, Node: Legacy type encoding, Next: @encode, Up: Type encoding 39261 392628.3.1 Legacy type encoding 39263-------------------------- 39264 39265Unfortunately, historically GCC used to have a number of bugs in its 39266encoding code. The NeXT runtime expects GCC to emit type encodings in 39267this historical format (compatible with GCC-3.3), so when using the 39268NeXT runtime, GCC will introduce on purpose a number of incorrect 39269encodings: 39270 39271 * the read-only qualifier of the pointee gets emitted before the '^'. 39272 The read-only qualifier of the pointer itself gets ignored, unless 39273 it is a typedef. Also, the 'r' is only emitted for the outermost 39274 type. 39275 39276 * 32-bit longs are encoded as 'l' or 'L', but not always. For 39277 typedefs, the compiler uses 'i' or 'I' instead if encoding a 39278 struct field or a pointer. 39279 39280 * `enum's are always encoded as 'i' (int) even if they are actually 39281 unsigned or long. 39282 39283 39284 In addition to that, the NeXT runtime uses a different encoding for 39285bitfields. It encodes them as `b' followed by the size, without a bit 39286offset or the underlying field type. 39287 39288 39289File: gcc.info, Node: @encode, Next: Method signatures, Prev: Legacy type encoding, Up: Type encoding 39290 392918.3.2 @encode 39292------------- 39293 39294GNU Objective-C supports the `@encode' syntax that allows you to create 39295a type encoding from a C/Objective-C type. For example, `@encode(int)' 39296is compiled by the compiler into `"i"'. 39297 39298 `@encode' does not support type qualifiers other than `const'. For 39299example, `@encode(const char*)' is valid and is compiled into `"r*"', 39300while `@encode(bycopy char *)' is invalid and will cause a compilation 39301error. 39302 39303 39304File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding 39305 393068.3.3 Method signatures 39307----------------------- 39308 39309This section documents the encoding of method types, which is rarely 39310needed to use Objective-C. You should skip it at a first reading; the 39311runtime provides functions that will work on methods and can walk 39312through the list of parameters and interpret them for you. These 39313functions are part of the public "API" and are the preferred way to 39314interact with method signatures from user code. 39315 39316 But if you need to debug a problem with method signatures and need to 39317know how they are implemented (i.e., the "ABI"), read on. 39318 39319 Methods have their "signature" encoded and made available to the 39320runtime. The "signature" encodes all the information required to 39321dynamically build invocations of the method at runtime: return type and 39322arguments. 39323 39324 The "signature" is a null-terminated string, composed of the following: 39325 39326 * The return type, including type qualifiers. For example, a method 39327 returning `int' would have `i' here. 39328 39329 * The total size (in bytes) required to pass all the parameters. 39330 This includes the two hidden parameters (the object `self' and the 39331 method selector `_cmd'). 39332 39333 * Each argument, with the type encoding, followed by the offset (in 39334 bytes) of the argument in the list of parameters. 39335 39336 39337 For example, a method with no arguments and returning `int' would have 39338the signature `i8@0:4' if the size of a pointer is 4. The signature is 39339interpreted as follows: the `i' is the return type (an `int'), the `8' 39340is the total size of the parameters in bytes (two pointers each of size 393414), the `@0' is the first parameter (an object at byte offset `0') and 39342`:4' is the second parameter (a `SEL' at byte offset `4'). 39343 39344 You can easily find more examples by running the "strings" program on 39345an Objective-C object file compiled by GCC. You'll see a lot of 39346strings that look very much like `i8@0:4'. They are signatures of 39347Objective-C methods. 39348 39349 39350File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 39351 393528.4 Garbage Collection 39353====================== 39354 39355This section is specific for the GNU Objective-C runtime. If you are 39356using a different runtime, you can skip it. 39357 39358 Support for garbage collection with the GNU runtime has been added by 39359using a powerful conservative garbage collector, known as the 39360Boehm-Demers-Weiser conservative garbage collector. 39361 39362 To enable the support for it you have to configure the compiler using 39363an additional argument, `--enable-objc-gc'. This will build the 39364boehm-gc library, and build an additional runtime library which has 39365several enhancements to support the garbage collector. The new library 39366has a new name, `libobjc_gc.a' to not conflict with the 39367non-garbage-collected library. 39368 39369 When the garbage collector is used, the objects are allocated using the 39370so-called typed memory allocation mechanism available in the 39371Boehm-Demers-Weiser collector. This mode requires precise information 39372on where pointers are located inside objects. This information is 39373computed once per class, immediately after the class has been 39374initialized. 39375 39376 There is a new runtime function `class_ivar_set_gcinvisible()' which 39377can be used to declare a so-called "weak pointer" reference. Such a 39378pointer is basically hidden for the garbage collector; this can be 39379useful in certain situations, especially when you want to keep track of 39380the allocated objects, yet allow them to be collected. This kind of 39381pointers can only be members of objects, you cannot declare a global 39382pointer as a weak reference. Every type which is a pointer type can be 39383declared a weak pointer, including `id', `Class' and `SEL'. 39384 39385 Here is an example of how to use this feature. Suppose you want to 39386implement a class whose instances hold a weak pointer reference; the 39387following class does this: 39388 39389 39390 @interface WeakPointer : Object 39391 { 39392 const void* weakPointer; 39393 } 39394 39395 - initWithPointer:(const void*)p; 39396 - (const void*)weakPointer; 39397 @end 39398 39399 39400 @implementation WeakPointer 39401 39402 + (void)initialize 39403 { 39404 class_ivar_set_gcinvisible (self, "weakPointer", YES); 39405 } 39406 39407 - initWithPointer:(const void*)p 39408 { 39409 weakPointer = p; 39410 return self; 39411 } 39412 39413 - (const void*)weakPointer 39414 { 39415 return weakPointer; 39416 } 39417 39418 @end 39419 39420 Weak pointers are supported through a new type character specifier 39421represented by the `!' character. The `class_ivar_set_gcinvisible()' 39422function adds or removes this specifier to the string type description 39423of the instance variable named as argument. 39424 39425 39426File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 39427 394288.5 Constant string objects 39429=========================== 39430 39431GNU Objective-C provides constant string objects that are generated 39432directly by the compiler. You declare a constant string object by 39433prefixing a C constant string with the character `@': 39434 39435 id myString = @"this is a constant string object"; 39436 39437 The constant string objects are by default instances of the 39438`NXConstantString' class which is provided by the GNU Objective-C 39439runtime. To get the definition of this class you must include the 39440`objc/NXConstStr.h' header file. 39441 39442 User defined libraries may want to implement their own constant string 39443class. To be able to support them, the GNU Objective-C compiler 39444provides a new command line options 39445`-fconstant-string-class=CLASS-NAME'. The provided class should adhere 39446to a strict structure, the same as `NXConstantString''s structure: 39447 39448 39449 @interface MyConstantStringClass 39450 { 39451 Class isa; 39452 char *c_string; 39453 unsigned int len; 39454 } 39455 @end 39456 39457 `NXConstantString' inherits from `Object'; user class libraries may 39458choose to inherit the customized constant string class from a different 39459class than `Object'. There is no requirement in the methods the 39460constant string class has to implement, but the final ivar layout of 39461the class must be the compatible with the given structure. 39462 39463 When the compiler creates the statically allocated constant string 39464object, the `c_string' field will be filled by the compiler with the 39465string; the `length' field will be filled by the compiler with the 39466string length; the `isa' pointer will be filled with `NULL' by the 39467compiler, and it will later be fixed up automatically at runtime by the 39468GNU Objective-C runtime library to point to the class which was set by 39469the `-fconstant-string-class' option when the object file is loaded (if 39470you wonder how it works behind the scenes, the name of the class to 39471use, and the list of static objects to fixup, are stored by the 39472compiler in the object file in a place where the GNU runtime library 39473will find them at runtime). 39474 39475 As a result, when a file is compiled with the 39476`-fconstant-string-class' option, all the constant string objects will 39477be instances of the class specified as argument to this option. It is 39478possible to have multiple compilation units referring to different 39479constant string classes, neither the compiler nor the linker impose any 39480restrictions in doing this. 39481 39482 39483File: gcc.info, Node: compatibility_alias, Next: Exceptions, Prev: Constant string objects, Up: Objective-C 39484 394858.6 compatibility_alias 39486======================= 39487 39488The keyword `@compatibility_alias' allows you to define a class name as 39489equivalent to another class name. For example: 39490 39491 @compatibility_alias WOApplication GSWApplication; 39492 39493 tells the compiler that each time it encounters `WOApplication' as a 39494class name, it should replace it with `GSWApplication' (that is, 39495`WOApplication' is just an alias for `GSWApplication'). 39496 39497 There are some constraints on how this can be used-- 39498 39499 * `WOApplication' (the alias) must not be an existing class; 39500 39501 * `GSWApplication' (the real class) must be an existing class. 39502 39503 39504 39505File: gcc.info, Node: Exceptions, Next: Synchronization, Prev: compatibility_alias, Up: Objective-C 39506 395078.7 Exceptions 39508============== 39509 39510GNU Objective-C provides exception support built into the language, as 39511in the following example: 39512 39513 @try { 39514 ... 39515 @throw expr; 39516 ... 39517 } 39518 @catch (AnObjCClass *exc) { 39519 ... 39520 @throw expr; 39521 ... 39522 @throw; 39523 ... 39524 } 39525 @catch (AnotherClass *exc) { 39526 ... 39527 } 39528 @catch (id allOthers) { 39529 ... 39530 } 39531 @finally { 39532 ... 39533 @throw expr; 39534 ... 39535 } 39536 39537 The `@throw' statement may appear anywhere in an Objective-C or 39538Objective-C++ program; when used inside of a `@catch' block, the 39539`@throw' may appear without an argument (as shown above), in which case 39540the object caught by the `@catch' will be rethrown. 39541 39542 Note that only (pointers to) Objective-C objects may be thrown and 39543caught using this scheme. When an object is thrown, it will be caught 39544by the nearest `@catch' clause capable of handling objects of that 39545type, analogously to how `catch' blocks work in C++ and Java. A 39546`@catch(id ...)' clause (as shown above) may also be provided to catch 39547any and all Objective-C exceptions not caught by previous `@catch' 39548clauses (if any). 39549 39550 The `@finally' clause, if present, will be executed upon exit from the 39551immediately preceding `@try ... @catch' section. This will happen 39552regardless of whether any exceptions are thrown, caught or rethrown 39553inside the `@try ... @catch' section, analogously to the behavior of 39554the `finally' clause in Java. 39555 39556 There are several caveats to using the new exception mechanism: 39557 39558 * The `-fobjc-exceptions' command line option must be used when 39559 compiling Objective-C files that use exceptions. 39560 39561 * With the GNU runtime, exceptions are always implemented as "native" 39562 exceptions and it is recommended that the `-fexceptions' and 39563 `-shared-libgcc' options are used when linking. 39564 39565 * With the NeXT runtime, although currently designed to be binary 39566 compatible with `NS_HANDLER'-style idioms provided by the 39567 `NSException' class, the new exceptions can only be used on Mac OS 39568 X 10.3 (Panther) and later systems, due to additional functionality 39569 needed in the NeXT Objective-C runtime. 39570 39571 * As mentioned above, the new exceptions do not support handling 39572 types other than Objective-C objects. Furthermore, when used from 39573 Objective-C++, the Objective-C exception model does not 39574 interoperate with C++ exceptions at this time. This means you 39575 cannot `@throw' an exception from Objective-C and `catch' it in 39576 C++, or vice versa (i.e., `throw ... @catch'). 39577 39578 39579File: gcc.info, Node: Synchronization, Next: Fast enumeration, Prev: Exceptions, Up: Objective-C 39580 395818.8 Synchronization 39582=================== 39583 39584GNU Objective-C provides support for synchronized blocks: 39585 39586 @synchronized (ObjCClass *guard) { 39587 ... 39588 } 39589 39590 Upon entering the `@synchronized' block, a thread of execution shall 39591first check whether a lock has been placed on the corresponding `guard' 39592object by another thread. If it has, the current thread shall wait 39593until the other thread relinquishes its lock. Once `guard' becomes 39594available, the current thread will place its own lock on it, execute 39595the code contained in the `@synchronized' block, and finally relinquish 39596the lock (thereby making `guard' available to other threads). 39597 39598 Unlike Java, Objective-C does not allow for entire methods to be 39599marked `@synchronized'. Note that throwing exceptions out of 39600`@synchronized' blocks is allowed, and will cause the guarding object 39601to be unlocked properly. 39602 39603 Because of the interactions between synchronization and exception 39604handling, you can only use `@synchronized' when compiling with 39605exceptions enabled, that is with the command line option 39606`-fobjc-exceptions'. 39607 39608 39609File: gcc.info, Node: Fast enumeration, Next: Messaging with the GNU Objective-C runtime, Prev: Synchronization, Up: Objective-C 39610 396118.9 Fast enumeration 39612==================== 39613 39614* Menu: 39615 39616* Using fast enumeration:: 39617* c99-like fast enumeration syntax:: 39618* Fast enumeration details:: 39619* Fast enumeration protocol:: 39620 39621 39622File: gcc.info, Node: Using fast enumeration, Next: c99-like fast enumeration syntax, Up: Fast enumeration 39623 396248.9.1 Using fast enumeration 39625---------------------------- 39626 39627GNU Objective-C provides support for the fast enumeration syntax: 39628 39629 id array = ...; 39630 id object; 39631 39632 for (object in array) 39633 { 39634 /* Do something with 'object' */ 39635 } 39636 39637 `array' needs to be an Objective-C object (usually a collection 39638object, for example an array, a dictionary or a set) which implements 39639the "Fast Enumeration Protocol" (see below). If you are using a 39640Foundation library such as GNUstep Base or Apple Cocoa Foundation, all 39641collection objects in the library implement this protocol and can be 39642used in this way. 39643 39644 The code above would iterate over all objects in `array'. For each of 39645them, it assigns it to `object', then executes the `Do something with 39646'object'' statements. 39647 39648 Here is a fully worked-out example using a Foundation library (which 39649provides the implementation of `NSArray', `NSString' and `NSLog'): 39650 39651 NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil]; 39652 NSString *object; 39653 39654 for (object in array) 39655 NSLog (@"Iterating over %@", object); 39656 39657 39658File: gcc.info, Node: c99-like fast enumeration syntax, Next: Fast enumeration details, Prev: Using fast enumeration, Up: Fast enumeration 39659 396608.9.2 c99-like fast enumeration syntax 39661-------------------------------------- 39662 39663A c99-like declaration syntax is also allowed: 39664 39665 id array = ...; 39666 39667 for (id object in array) 39668 { 39669 /* Do something with 'object' */ 39670 } 39671 39672 this is completely equivalent to: 39673 39674 id array = ...; 39675 39676 { 39677 id object; 39678 for (object in array) 39679 { 39680 /* Do something with 'object' */ 39681 } 39682 } 39683 39684 but can save some typing. 39685 39686 Note that the option `-std=c99' is not required to allow this syntax 39687in Objective-C. 39688 39689 39690File: gcc.info, Node: Fast enumeration details, Next: Fast enumeration protocol, Prev: c99-like fast enumeration syntax, Up: Fast enumeration 39691 396928.9.3 Fast enumeration details 39693------------------------------ 39694 39695Here is a more technical description with the gory details. Consider 39696the code 39697 39698 for (OBJECT EXPRESSION in COLLECTION EXPRESSION) 39699 { 39700 STATEMENTS 39701 } 39702 39703 here is what happens when you run it: 39704 39705 * `COLLECTION EXPRESSION' is evaluated exactly once and the result 39706 is used as the collection object to iterate over. This means it 39707 is safe to write code such as `for (object in [NSDictionary 39708 keyEnumerator]) ...'. 39709 39710 * the iteration is implemented by the compiler by repeatedly getting 39711 batches of objects from the collection object using the fast 39712 enumeration protocol (see below), then iterating over all objects 39713 in the batch. This is faster than a normal enumeration where 39714 objects are retrieved one by one (hence the name "fast 39715 enumeration"). 39716 39717 * if there are no objects in the collection, then `OBJECT 39718 EXPRESSION' is set to `nil' and the loop immediately terminates. 39719 39720 * if there are objects in the collection, then for each object in the 39721 collection (in the order they are returned) `OBJECT EXPRESSION' is 39722 set to the object, then `STATEMENTS' are executed. 39723 39724 * `STATEMENTS' can contain `break' and `continue' commands, which 39725 will abort the iteration or skip to the next loop iteration as 39726 expected. 39727 39728 * when the iteration ends because there are no more objects to 39729 iterate over, `OBJECT EXPRESSION' is set to `nil'. This allows 39730 you to determine whether the iteration finished because a `break' 39731 command was used (in which case `OBJECT EXPRESSION' will remain 39732 set to the last object that was iterated over) or because it 39733 iterated over all the objects (in which case `OBJECT EXPRESSION' 39734 will be set to `nil'). 39735 39736 * `STATEMENTS' must not make any changes to the collection object; 39737 if they do, it is a hard error and the fast enumeration terminates 39738 by invoking `objc_enumerationMutation', a runtime function that 39739 normally aborts the program but which can be customized by 39740 Foundation libraries via `objc_set_mutation_handler' to do 39741 something different, such as raising an exception. 39742 39743 39744 39745File: gcc.info, Node: Fast enumeration protocol, Prev: Fast enumeration details, Up: Fast enumeration 39746 397478.9.4 Fast enumeration protocol 39748------------------------------- 39749 39750If you want your own collection object to be usable with fast 39751enumeration, you need to have it implement the method 39752 39753 - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state 39754 objects: (id *)objects 39755 count: (unsigned long)len; 39756 39757 where `NSFastEnumerationState' must be defined in your code as follows: 39758 39759 typedef struct 39760 { 39761 unsigned long state; 39762 id *itemsPtr; 39763 unsigned long *mutationsPtr; 39764 unsigned long extra[5]; 39765 } NSFastEnumerationState; 39766 39767 If no `NSFastEnumerationState' is defined in your code, the compiler 39768will automatically replace `NSFastEnumerationState *' with `struct 39769__objcFastEnumerationState *', where that type is silently defined by 39770the compiler in an identical way. This can be confusing and we 39771recommend that you define `NSFastEnumerationState' (as shown above) 39772instead. 39773 39774 The method is called repeatedly during a fast enumeration to retrieve 39775batches of objects. Each invocation of the method should retrieve the 39776next batch of objects. 39777 39778 The return value of the method is the number of objects in the current 39779batch; this should not exceed `len', which is the maximum size of a 39780batch as requested by the caller. The batch itself is returned in the 39781`itemsPtr' field of the `NSFastEnumerationState' struct. 39782 39783 To help with returning the objects, the `objects' array is a C array 39784preallocated by the caller (on the stack) of size `len'. In many cases 39785you can put the objects you want to return in that `objects' array, 39786then do `itemsPtr = objects'. But you don't have to; if your 39787collection already has the objects to return in some form of C array, 39788it could return them from there instead. 39789 39790 The `state' and `extra' fields of the `NSFastEnumerationState' 39791structure allows your collection object to keep track of the state of 39792the enumeration. In a simple array implementation, `state' may keep 39793track of the index of the last object that was returned, and `extra' 39794may be unused. 39795 39796 The `mutationsPtr' field of the `NSFastEnumerationState' is used to 39797keep track of mutations. It should point to a number; before working 39798on each object, the fast enumeration loop will check that this number 39799has not changed. If it has, a mutation has happened and the fast 39800enumeration will abort. So, `mutationsPtr' could be set to point to 39801some sort of version number of your collection, which is increased by 39802one every time there is a change (for example when an object is added 39803or removed). Or, if you are content with less strict mutation checks, 39804it could point to the number of objects in your collection or some 39805other value that can be checked to perform an approximate check that 39806the collection has not been mutated. 39807 39808 Finally, note how we declared the `len' argument and the return value 39809to be of type `unsigned long'. They could also be declared to be of 39810type `unsigned int' and everything would still work. 39811 39812 39813File: gcc.info, Node: Messaging with the GNU Objective-C runtime, Prev: Fast enumeration, Up: Objective-C 39814 398158.10 Messaging with the GNU Objective-C runtime 39816=============================================== 39817 39818This section is specific for the GNU Objective-C runtime. If you are 39819using a different runtime, you can skip it. 39820 39821 The implementation of messaging in the GNU Objective-C runtime is 39822designed to be portable, and so is based on standard C. 39823 39824 Sending a message in the GNU Objective-C runtime is composed of two 39825separate steps. First, there is a call to the lookup function, 39826`objc_msg_lookup ()' (or, in the case of messages to super, 39827`objc_msg_lookup_super ()'). This runtime function takes as argument 39828the receiver and the selector of the method to be called; it returns 39829the `IMP', that is a pointer to the function implementing the method. 39830The second step of method invocation consists of casting this pointer 39831function to the appropriate function pointer type, and calling the 39832function pointed to it with the right arguments. 39833 39834 For example, when the compiler encounters a method invocation such as 39835`[object init]', it compiles it into a call to `objc_msg_lookup 39836(object, @selector(init))' followed by a cast of the returned value to 39837the appropriate function pointer type, and then it calls it. 39838 39839* Menu: 39840 39841* Dynamically registering methods:: 39842* Forwarding hook:: 39843 39844 39845File: gcc.info, Node: Dynamically registering methods, Next: Forwarding hook, Up: Messaging with the GNU Objective-C runtime 39846 398478.10.1 Dynamically registering methods 39848-------------------------------------- 39849 39850If `objc_msg_lookup()' does not find a suitable method implementation, 39851because the receiver does not implement the required method, it tries 39852to see if the class can dynamically register the method. 39853 39854 To do so, the runtime checks if the class of the receiver implements 39855the method 39856 39857 + (BOOL) resolveInstanceMethod: (SEL)selector; 39858 39859 in the case of an instance method, or 39860 39861 + (BOOL) resolveClassMethod: (SEL)selector; 39862 39863 in the case of a class method. If the class implements it, the 39864runtime invokes it, passing as argument the selector of the original 39865method, and if it returns `YES', the runtime tries the lookup again, 39866which could now succeed if a matching method was added dynamically by 39867`+resolveInstanceMethod:' or `+resolveClassMethod:'. 39868 39869 This allows classes to dynamically register methods (by adding them to 39870the class using `class_addMethod') when they are first called. To do 39871so, a class should implement `+resolveInstanceMethod:' (or, depending 39872on the case, `+resolveClassMethod:') and have it recognize the 39873selectors of methods that can be registered dynamically at runtime, 39874register them, and return `YES'. It should return `NO' for methods 39875that it does not dynamically registered at runtime. 39876 39877 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not 39878implemented or returns `NO', the runtime then tries the forwarding hook. 39879 39880 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was 39881added to the GNU Objective-C runtime in GCC version 4.6. 39882 39883 39884File: gcc.info, Node: Forwarding hook, Prev: Dynamically registering methods, Up: Messaging with the GNU Objective-C runtime 39885 398868.10.2 Forwarding hook 39887---------------------- 39888 39889The GNU Objective-C runtime provides a hook, called 39890`__objc_msg_forward2', which is called by `objc_msg_lookup()' when it 39891can't find a method implementation in the runtime tables and after 39892calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been 39893attempted and did not succeed in dynamically registering the method. 39894 39895 To configure the hook, you set the global variable 39896`__objc_msg_foward2' to a function with the same argument and return 39897types of `objc_msg_lookup()'. When `objc_msg_lookup()' can not find a 39898method implementation, it invokes the hook function you provided to get 39899a method implementation to return. So, in practice 39900`__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by 39901adding some custom code that is called to do a further lookup when no 39902standard method implementation can be found using the normal lookup. 39903 39904 This hook is generally reserved for "Foundation" libraries such as 39905GNUstep Base, which use it to implement their high-level method 39906forwarding API, typically based around the `forwardInvocation:' method. 39907So, unless you are implementing your own "Foundation" library, you 39908should not set this hook. 39909 39910 In a typical forwarding implementation, the `__objc_msg_forward2' hook 39911function determines the argument and return type of the method that is 39912being looked up, and then creates a function that takes these arguments 39913and has that return type, and returns it to the caller. Creating this 39914function is non-trivial and is typically performed using a dedicated 39915library such as `libffi'. 39916 39917 The forwarding method implementation thus created is returned by 39918`objc_msg_lookup()' and is executed as if it was a normal method 39919implementation. When the forwarding method implementation is called, 39920it is usually expected to pack all arguments into some sort of object 39921(typically, an `NSInvocation' in a "Foundation" library), and hand it 39922over to the programmer (`forwardInvocation:') who is then allowed to 39923manipulate the method invocation using a high-level API provided by the 39924"Foundation" library. For example, the programmer may want to examine 39925the method invocation arguments and name and potentially change them 39926before forwarding the method invocation to one or more local objects 39927(`performInvocation:') or even to remote objects (by using Distributed 39928Objects or some other mechanism). When all this completes, the return 39929value is passed back and must be returned correctly to the original 39930caller. 39931 39932 Note that the GNU Objective-C runtime currently provides no support 39933for method forwarding or method invocations other than the 39934`__objc_msg_forward2' hook. 39935 39936 If the forwarding hook does not exist or returns `NULL', the runtime 39937currently attempts forwarding using an older, deprecated API, and if 39938that fails, it aborts the program. In future versions of the GNU 39939Objective-C runtime, the runtime will immediately abort. 39940 39941 39942File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 39943 399449 Binary Compatibility 39945********************** 39946 39947Binary compatibility encompasses several related concepts: 39948 39949"application binary interface (ABI)" 39950 The set of runtime conventions followed by all of the tools that 39951 deal with binary representations of a program, including 39952 compilers, assemblers, linkers, and language runtime support. 39953 Some ABIs are formal with a written specification, possibly 39954 designed by multiple interested parties. Others are simply the 39955 way things are actually done by a particular set of tools. 39956 39957"ABI conformance" 39958 A compiler conforms to an ABI if it generates code that follows 39959 all of the specifications enumerated by that ABI. A library 39960 conforms to an ABI if it is implemented according to that ABI. An 39961 application conforms to an ABI if it is built using tools that 39962 conform to that ABI and does not contain source code that 39963 specifically changes behavior specified by the ABI. 39964 39965"calling conventions" 39966 Calling conventions are a subset of an ABI that specify of how 39967 arguments are passed and function results are returned. 39968 39969"interoperability" 39970 Different sets of tools are interoperable if they generate files 39971 that can be used in the same program. The set of tools includes 39972 compilers, assemblers, linkers, libraries, header files, startup 39973 files, and debuggers. Binaries produced by different sets of 39974 tools are not interoperable unless they implement the same ABI. 39975 This applies to different versions of the same tools as well as 39976 tools from different vendors. 39977 39978"intercallability" 39979 Whether a function in a binary built by one set of tools can call a 39980 function in a binary built by a different set of tools is a subset 39981 of interoperability. 39982 39983"implementation-defined features" 39984 Language standards include lists of implementation-defined 39985 features whose behavior can vary from one implementation to 39986 another. Some of these features are normally covered by a 39987 platform's ABI and others are not. The features that are not 39988 covered by an ABI generally affect how a program behaves, but not 39989 intercallability. 39990 39991"compatibility" 39992 Conformance to the same ABI and the same behavior of 39993 implementation-defined features are both relevant for 39994 compatibility. 39995 39996 The application binary interface implemented by a C or C++ compiler 39997affects code generation and runtime support for: 39998 39999 * size and alignment of data types 40000 40001 * layout of structured types 40002 40003 * calling conventions 40004 40005 * register usage conventions 40006 40007 * interfaces for runtime arithmetic support 40008 40009 * object file formats 40010 40011 In addition, the application binary interface implemented by a C++ 40012compiler affects code generation and runtime support for: 40013 * name mangling 40014 40015 * exception handling 40016 40017 * invoking constructors and destructors 40018 40019 * layout, alignment, and padding of classes 40020 40021 * layout and alignment of virtual tables 40022 40023 Some GCC compilation options cause the compiler to generate code that 40024does not conform to the platform's default ABI. Other options cause 40025different program behavior for implementation-defined features that are 40026not covered by an ABI. These options are provided for consistency with 40027other compilers that do not follow the platform's default ABI or the 40028usual behavior of implementation-defined features for the platform. Be 40029very careful about using such options. 40030 40031 Most platforms have a well-defined ABI that covers C code, but ABIs 40032that cover C++ functionality are not yet common. 40033 40034 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 40035written, vendor-neutral C++ ABI that was designed to be specific to 4003664-bit Itanium but also includes generic specifications that apply to 40037any platform. This C++ ABI is also implemented by other compiler 40038vendors on some platforms, notably GNU/Linux and BSD systems. We have 40039tried hard to provide a stable ABI that will be compatible with future 40040GCC releases, but it is possible that we will encounter problems that 40041make this difficult. Such problems could include different 40042interpretations of the C++ ABI by different vendors, bugs in the ABI, or 40043bugs in the implementation of the ABI in different compilers. GCC's 40044`-Wabi' switch warns when G++ generates code that is probably not 40045compatible with the C++ ABI. 40046 40047 The C++ library used with a C++ compiler includes the Standard C++ 40048Library, with functionality defined in the C++ Standard, plus language 40049runtime support. The runtime support is included in a C++ ABI, but 40050there is no formal ABI for the Standard C++ Library. Two 40051implementations of that library are interoperable if one follows the 40052de-facto ABI of the other and if they are both built with the same 40053compiler, or with compilers that conform to the same ABI for C++ 40054compiler and runtime support. 40055 40056 When G++ and another C++ compiler conform to the same C++ ABI, but the 40057implementations of the Standard C++ Library that they normally use do 40058not follow the same ABI for the Standard C++ Library, object files 40059built with those compilers can be used in the same program only if they 40060use the same C++ library. This requires specifying the location of the 40061C++ library header files when invoking the compiler whose usual library 40062is not being used. The location of GCC's C++ header files depends on 40063how the GCC build was configured, but can be seen by using the G++ `-v' 40064option. With default configuration options for G++ 3.3 the compile 40065line for a different C++ compiler needs to include 40066 40067 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 40068 40069 Similarly, compiling code with G++ that must use a C++ library other 40070than the GNU C++ library requires specifying the location of the header 40071files for that other library. 40072 40073 The most straightforward way to link a program to use a particular C++ 40074library is to use a C++ driver that specifies that C++ library by 40075default. The `g++' driver, for example, tells the linker where to find 40076GCC's C++ library (`libstdc++') plus the other libraries and startup 40077files it needs, in the proper order. 40078 40079 If a program must use a different C++ library and it's not possible to 40080do the final link using a C++ driver that uses that library by default, 40081it is necessary to tell `g++' the location and name of that library. 40082It might also be necessary to specify different startup files and other 40083runtime support libraries, and to suppress the use of GCC's support 40084libraries with one or more of the options `-nostdlib', `-nostartfiles', 40085and `-nodefaultlibs'. 40086 40087 40088File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 40089 4009010 `gcov'--a Test Coverage Program 40091********************************** 40092 40093`gcov' is a tool you can use in conjunction with GCC to test code 40094coverage in your programs. 40095 40096* Menu: 40097 40098* Gcov Intro:: Introduction to gcov. 40099* Invoking Gcov:: How to use gcov. 40100* Gcov and Optimization:: Using gcov with GCC optimization. 40101* Gcov Data Files:: The files used by gcov. 40102* Cross-profiling:: Data file relocation. 40103 40104 40105File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 40106 4010710.1 Introduction to `gcov' 40108=========================== 40109 40110`gcov' is a test coverage program. Use it in concert with GCC to 40111analyze your programs to help create more efficient, faster running 40112code and to discover untested parts of your program. You can use 40113`gcov' as a profiling tool to help discover where your optimization 40114efforts will best affect your code. You can also use `gcov' along with 40115the other profiling tool, `gprof', to assess which parts of your code 40116use the greatest amount of computing time. 40117 40118 Profiling tools help you analyze your code's performance. Using a 40119profiler such as `gcov' or `gprof', you can find out some basic 40120performance statistics, such as: 40121 40122 * how often each line of code executes 40123 40124 * what lines of code are actually executed 40125 40126 * how much computing time each section of code uses 40127 40128 Once you know these things about how your code works when compiled, you 40129can look at each module to see which modules should be optimized. 40130`gcov' helps you determine where to work on optimization. 40131 40132 Software developers also use coverage testing in concert with 40133testsuites, to make sure software is actually good enough for a release. 40134Testsuites can verify that a program works as expected; a coverage 40135program tests to see how much of the program is exercised by the 40136testsuite. Developers can then determine what kinds of test cases need 40137to be added to the testsuites to create both better testing and a better 40138final product. 40139 40140 You should compile your code without optimization if you plan to use 40141`gcov' because the optimization, by combining some lines of code into 40142one function, may not give you as much information as you need to look 40143for `hot spots' where the code is using a great deal of computer time. 40144Likewise, because `gcov' accumulates statistics by line (at the lowest 40145resolution), it works best with a programming style that places only 40146one statement on each line. If you use complicated macros that expand 40147to loops or to other control structures, the statistics are less 40148helpful--they only report on the line where the macro call appears. If 40149your complex macros behave like functions, you can replace them with 40150inline functions to solve this problem. 40151 40152 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 40153many times each line of a source file `SOURCEFILE.c' has executed. You 40154can use these logfiles along with `gprof' to aid in fine-tuning the 40155performance of your programs. `gprof' gives timing information you can 40156use along with the information you get from `gcov'. 40157 40158 `gcov' works only on code compiled with GCC. It is not compatible 40159with any other profiling or test coverage mechanism. 40160 40161 40162File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 40163 4016410.2 Invoking `gcov' 40165==================== 40166 40167 gcov [OPTIONS] SOURCEFILES 40168 40169 `gcov' accepts the following options: 40170 40171`-h' 40172`--help' 40173 Display help about using `gcov' (on the standard output), and exit 40174 without doing any further processing. 40175 40176`-v' 40177`--version' 40178 Display the `gcov' version number (on the standard output), and 40179 exit without doing any further processing. 40180 40181`-a' 40182`--all-blocks' 40183 Write individual execution counts for every basic block. Normally 40184 gcov outputs execution counts only for the main blocks of a line. 40185 With this option you can determine if blocks within a single line 40186 are not being executed. 40187 40188`-b' 40189`--branch-probabilities' 40190 Write branch frequencies to the output file, and write branch 40191 summary info to the standard output. This option allows you to 40192 see how often each branch in your program was taken. 40193 Unconditional branches will not be shown, unless the `-u' option 40194 is given. 40195 40196`-c' 40197`--branch-counts' 40198 Write branch frequencies as the number of branches taken, rather 40199 than the percentage of branches taken. 40200 40201`-n' 40202`--no-output' 40203 Do not create the `gcov' output file. 40204 40205`-l' 40206`--long-file-names' 40207 Create long file names for included source files. For example, if 40208 the header file `x.h' contains code, and was included in the file 40209 `a.c', then running `gcov' on the file `a.c' will produce an 40210 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 40211 can be useful if `x.h' is included in multiple source files. If 40212 you use the `-p' option, both the including and included file 40213 names will be complete path names. 40214 40215`-p' 40216`--preserve-paths' 40217 Preserve complete path information in the names of generated 40218 `.gcov' files. Without this option, just the filename component is 40219 used. With this option, all directories are used, with `/' 40220 characters translated to `#' characters, `.' directory components 40221 removed and `..' components renamed to `^'. This is useful if 40222 sourcefiles are in several different directories. It also affects 40223 the `-l' option. 40224 40225`-f' 40226`--function-summaries' 40227 Output summaries for each function in addition to the file level 40228 summary. 40229 40230`-o DIRECTORY|FILE' 40231`--object-directory DIRECTORY' 40232`--object-file FILE' 40233 Specify either the directory containing the gcov data files, or the 40234 object path name. The `.gcno', and `.gcda' data files are 40235 searched for using this option. If a directory is specified, the 40236 data files are in that directory and named after the source file 40237 name, without its extension. If a file is specified here, the 40238 data files are named after that file, without its extension. If 40239 this option is not supplied, it defaults to the current directory. 40240 40241`-u' 40242`--unconditional-branches' 40243 When branch probabilities are given, include those of 40244 unconditional branches. Unconditional branches are normally not 40245 interesting. 40246 40247`-d' 40248`--display-progress' 40249 Display the progress on the standard output. 40250 40251 40252 `gcov' should be run with the current directory the same as that when 40253you invoked the compiler. Otherwise it will not be able to locate the 40254source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 40255current directory. These contain the coverage information of the 40256source file they correspond to. One `.gcov' file is produced for each 40257source file containing code, which was compiled to produce the data 40258files. The MANGLEDNAME part of the output file name is usually simply 40259the source file name, but can be something more complicated if the `-l' 40260or `-p' options are given. Refer to those options for details. 40261 40262 The `.gcov' files contain the `:' separated fields along with program 40263source code. The format is 40264 40265 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 40266 40267 Additional block information may succeed each line, when requested by 40268command line option. The EXECUTION_COUNT is `-' for lines containing 40269no code and `#####' for lines which were never executed. Some lines of 40270information at the start have LINE_NUMBER of zero. 40271 40272 The preamble lines are of the form 40273 40274 -:0:TAG:VALUE 40275 40276 The ordering and number of these preamble lines will be augmented as 40277`gcov' development progresses -- do not rely on them remaining 40278unchanged. Use TAG to locate a particular preamble line. 40279 40280 The additional block information is of the form 40281 40282 TAG INFORMATION 40283 40284 The INFORMATION is human readable, but designed to be simple enough 40285for machine parsing too. 40286 40287 When printing percentages, 0% and 100% are only printed when the values 40288are _exactly_ 0% and 100% respectively. Other values which would 40289conventionally be rounded to 0% or 100% are instead printed as the 40290nearest non-boundary value. 40291 40292 When using `gcov', you must first compile your program with two 40293special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 40294compiler to generate additional information needed by gcov (basically a 40295flow graph of the program) and also includes additional code in the 40296object files for generating the extra profiling information needed by 40297gcov. These additional files are placed in the directory where the 40298object file is located. 40299 40300 Running the program will cause profile output to be generated. For 40301each source file compiled with `-fprofile-arcs', an accompanying 40302`.gcda' file will be placed in the object file directory. 40303 40304 Running `gcov' with your program's source file names as arguments will 40305now produce a listing of the code along with frequency of execution for 40306each line. For example, if your program is called `tmp.c', this is 40307what you see when you use the basic `gcov' facility: 40308 40309 $ gcc -fprofile-arcs -ftest-coverage tmp.c 40310 $ a.out 40311 $ gcov tmp.c 40312 90.00% of 10 source lines executed in file tmp.c 40313 Creating tmp.c.gcov. 40314 40315 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 40316 40317 -: 0:Source:tmp.c 40318 -: 0:Graph:tmp.gcno 40319 -: 0:Data:tmp.gcda 40320 -: 0:Runs:1 40321 -: 0:Programs:1 40322 -: 1:#include <stdio.h> 40323 -: 2: 40324 -: 3:int main (void) 40325 1: 4:{ 40326 1: 5: int i, total; 40327 -: 6: 40328 1: 7: total = 0; 40329 -: 8: 40330 11: 9: for (i = 0; i < 10; i++) 40331 10: 10: total += i; 40332 -: 11: 40333 1: 12: if (total != 45) 40334 #####: 13: printf ("Failure\n"); 40335 -: 14: else 40336 1: 15: printf ("Success\n"); 40337 1: 16: return 0; 40338 -: 17:} 40339 40340 When you use the `-a' option, you will get individual block counts, 40341and the output looks like this: 40342 40343 -: 0:Source:tmp.c 40344 -: 0:Graph:tmp.gcno 40345 -: 0:Data:tmp.gcda 40346 -: 0:Runs:1 40347 -: 0:Programs:1 40348 -: 1:#include <stdio.h> 40349 -: 2: 40350 -: 3:int main (void) 40351 1: 4:{ 40352 1: 4-block 0 40353 1: 5: int i, total; 40354 -: 6: 40355 1: 7: total = 0; 40356 -: 8: 40357 11: 9: for (i = 0; i < 10; i++) 40358 11: 9-block 0 40359 10: 10: total += i; 40360 10: 10-block 0 40361 -: 11: 40362 1: 12: if (total != 45) 40363 1: 12-block 0 40364 #####: 13: printf ("Failure\n"); 40365 $$$$$: 13-block 0 40366 -: 14: else 40367 1: 15: printf ("Success\n"); 40368 1: 15-block 0 40369 1: 16: return 0; 40370 1: 16-block 0 40371 -: 17:} 40372 40373 In this mode, each basic block is only shown on one line - the last 40374line of the block. A multi-line block will only contribute to the 40375execution count of that last line, and other lines will not be shown to 40376contain code, unless previous blocks end on those lines. The total 40377execution count of a line is shown and subsequent lines show the 40378execution counts for individual blocks that end on that line. After 40379each block, the branch and call counts of the block will be shown, if 40380the `-b' option is given. 40381 40382 Because of the way GCC instruments calls, a call count can be shown 40383after a line with no individual blocks. As you can see, line 13 40384contains a basic block that was not executed. 40385 40386 When you use the `-b' option, your output looks like this: 40387 40388 $ gcov -b tmp.c 40389 90.00% of 10 source lines executed in file tmp.c 40390 80.00% of 5 branches executed in file tmp.c 40391 80.00% of 5 branches taken at least once in file tmp.c 40392 50.00% of 2 calls executed in file tmp.c 40393 Creating tmp.c.gcov. 40394 40395 Here is a sample of a resulting `tmp.c.gcov' file: 40396 40397 -: 0:Source:tmp.c 40398 -: 0:Graph:tmp.gcno 40399 -: 0:Data:tmp.gcda 40400 -: 0:Runs:1 40401 -: 0:Programs:1 40402 -: 1:#include <stdio.h> 40403 -: 2: 40404 -: 3:int main (void) 40405 function main called 1 returned 1 blocks executed 75% 40406 1: 4:{ 40407 1: 5: int i, total; 40408 -: 6: 40409 1: 7: total = 0; 40410 -: 8: 40411 11: 9: for (i = 0; i < 10; i++) 40412 branch 0 taken 91% (fallthrough) 40413 branch 1 taken 9% 40414 10: 10: total += i; 40415 -: 11: 40416 1: 12: if (total != 45) 40417 branch 0 taken 0% (fallthrough) 40418 branch 1 taken 100% 40419 #####: 13: printf ("Failure\n"); 40420 call 0 never executed 40421 -: 14: else 40422 1: 15: printf ("Success\n"); 40423 call 0 called 1 returned 100% 40424 1: 16: return 0; 40425 -: 17:} 40426 40427 For each function, a line is printed showing how many times the 40428function is called, how many times it returns and what percentage of the 40429function's blocks were executed. 40430 40431 For each basic block, a line is printed after the last line of the 40432basic block describing the branch or call that ends the basic block. 40433There can be multiple branches and calls listed for a single source 40434line if there are multiple basic blocks that end on that line. In this 40435case, the branches and calls are each given a number. There is no 40436simple way to map these branches and calls back to source constructs. 40437In general, though, the lowest numbered branch or call will correspond 40438to the leftmost construct on the source line. 40439 40440 For a branch, if it was executed at least once, then a percentage 40441indicating the number of times the branch was taken divided by the 40442number of times the branch was executed will be printed. Otherwise, the 40443message "never executed" is printed. 40444 40445 For a call, if it was executed at least once, then a percentage 40446indicating the number of times the call returned divided by the number 40447of times the call was executed will be printed. This will usually be 40448100%, but may be less for functions that call `exit' or `longjmp', and 40449thus may not return every time they are called. 40450 40451 The execution counts are cumulative. If the example program were 40452executed again without removing the `.gcda' file, the count for the 40453number of times each line in the source was executed would be added to 40454the results of the previous run(s). This is potentially useful in 40455several ways. For example, it could be used to accumulate data over a 40456number of program runs as part of a test verification suite, or to 40457provide more accurate long-term information over a large number of 40458program runs. 40459 40460 The data in the `.gcda' files is saved immediately before the program 40461exits. For each source file compiled with `-fprofile-arcs', the 40462profiling code first attempts to read in an existing `.gcda' file; if 40463the file doesn't match the executable (differing number of basic block 40464counts) it will ignore the contents of the file. It then adds in the 40465new execution counts and finally writes the data to the file. 40466 40467 40468File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 40469 4047010.3 Using `gcov' with GCC Optimization 40471======================================= 40472 40473If you plan to use `gcov' to help optimize your code, you must first 40474compile your program with two special GCC options: `-fprofile-arcs 40475-ftest-coverage'. Aside from that, you can use any other GCC options; 40476but if you want to prove that every single line in your program was 40477executed, you should not compile with optimization at the same time. 40478On some machines the optimizer can eliminate some simple code lines by 40479combining them with other lines. For example, code like this: 40480 40481 if (a != b) 40482 c = 1; 40483 else 40484 c = 0; 40485 40486can be compiled into one instruction on some machines. In this case, 40487there is no way for `gcov' to calculate separate execution counts for 40488each line because there isn't separate code for each line. Hence the 40489`gcov' output looks like this if you compiled the program with 40490optimization: 40491 40492 100: 12:if (a != b) 40493 100: 13: c = 1; 40494 100: 14:else 40495 100: 15: c = 0; 40496 40497 The output shows that this block of code, combined by optimization, 40498executed 100 times. In one sense this result is correct, because there 40499was only one instruction representing all four of these lines. However, 40500the output does not indicate how many times the result was 0 and how 40501many times the result was 1. 40502 40503 Inlineable functions can create unexpected line counts. Line counts 40504are shown for the source code of the inlineable function, but what is 40505shown depends on where the function is inlined, or if it is not inlined 40506at all. 40507 40508 If the function is not inlined, the compiler must emit an out of line 40509copy of the function, in any object file that needs it. If `fileA.o' 40510and `fileB.o' both contain out of line bodies of a particular 40511inlineable function, they will also both contain coverage counts for 40512that function. When `fileA.o' and `fileB.o' are linked together, the 40513linker will, on many systems, select one of those out of line bodies 40514for all calls to that function, and remove or ignore the other. 40515Unfortunately, it will not remove the coverage counters for the unused 40516function body. Hence when instrumented, all but one use of that 40517function will show zero counts. 40518 40519 If the function is inlined in several places, the block structure in 40520each location might not be the same. For instance, a condition might 40521now be calculable at compile time in some instances. Because the 40522coverage of all the uses of the inline function will be shown for the 40523same source lines, the line counts themselves might seem inconsistent. 40524 40525 40526File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 40527 4052810.4 Brief description of `gcov' data files 40529=========================================== 40530 40531`gcov' uses two files for profiling. The names of these files are 40532derived from the original _object_ file by substituting the file suffix 40533with either `.gcno', or `.gcda'. All of these files are placed in the 40534same directory as the object file, and contain data stored in a 40535platform-independent format. 40536 40537 The `.gcno' file is generated when the source file is compiled with 40538the GCC `-ftest-coverage' option. It contains information to 40539reconstruct the basic block graphs and assign source line numbers to 40540blocks. 40541 40542 The `.gcda' file is generated when a program containing object files 40543built with the GCC `-fprofile-arcs' option is executed. A separate 40544`.gcda' file is created for each object file compiled with this option. 40545It contains arc transition counts, and some summary information. 40546 40547 The full details of the file format is specified in `gcov-io.h', and 40548functions provided in that header file should be used to access the 40549coverage files. 40550 40551 40552File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 40553 4055410.5 Data file relocation to support cross-profiling 40555==================================================== 40556 40557Running the program will cause profile output to be generated. For each 40558source file compiled with `-fprofile-arcs', an accompanying `.gcda' 40559file will be placed in the object file directory. That implicitly 40560requires running the program on the same system as it was built or 40561having the same absolute directory structure on the target system. The 40562program will try to create the needed directory structure, if it is not 40563already present. 40564 40565 To support cross-profiling, a program compiled with `-fprofile-arcs' 40566can relocate the data files based on two environment variables: 40567 40568 * GCOV_PREFIX contains the prefix to add to the absolute paths in 40569 the object file. Prefix can be absolute, or relative. The default 40570 is no prefix. 40571 40572 * GCOV_PREFIX_STRIP indicates the how many initial directory names 40573 to strip off the hardwired absolute paths. Default value is 0. 40574 40575 _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is 40576 undefined, then a relative path is made out of the hardwired 40577 absolute paths. 40578 40579 For example, if the object file `/user/build/foo.o' was built with 40580`-fprofile-arcs', the final executable will try to create the data file 40581`/user/build/foo.gcda' when running on the target system. This will 40582fail if the corresponding directory does not exist and it is unable to 40583create it. This can be overcome by, for example, setting the 40584environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 40585Such a setting will name the data file `/target/run/build/foo.gcda'. 40586 40587 You must move the data files to the expected directory tree in order to 40588use them for profile directed optimizations (`--use-profile'), or to 40589use the `gcov' tool. 40590 40591 40592File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 40593 4059411 Known Causes of Trouble with GCC 40595*********************************** 40596 40597This section describes known problems that affect users of GCC. Most 40598of these are not GCC bugs per se--if they were, we would fix them. But 40599the result for a user may be like the result of a bug. 40600 40601 Some of these problems are due to bugs in other software, some are 40602missing features that are too much work to add, and some are places 40603where people's opinions differ as to what is best. 40604 40605* Menu: 40606 40607* Actual Bugs:: Bugs we will fix later. 40608* Cross-Compiler Problems:: Common problems of cross compiling with GCC. 40609* Interoperation:: Problems using GCC with other compilers, 40610 and with certain linkers, assemblers and debuggers. 40611* Incompatibilities:: GCC is incompatible with traditional C. 40612* Fixed Headers:: GCC uses corrected versions of system header files. 40613 This is necessary, but doesn't always work smoothly. 40614* Standard Libraries:: GCC uses the system C library, which might not be 40615 compliant with the ISO C standard. 40616* Disappointments:: Regrettable things we can't change, but not quite bugs. 40617* C++ Misunderstandings:: Common misunderstandings with GNU C++. 40618* Non-bugs:: Things we think are right, but some others disagree. 40619* Warnings and Errors:: Which problems in your code get warnings, 40620 and which get errors. 40621 40622 40623File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble 40624 4062511.1 Actual Bugs We Haven't Fixed Yet 40626===================================== 40627 40628 * The `fixincludes' script interacts badly with automounters; if the 40629 directory of system header files is automounted, it tends to be 40630 unmounted while `fixincludes' is running. This would seem to be a 40631 bug in the automounter. We don't know any good way to work around 40632 it. 40633 40634 40635File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble 40636 4063711.2 Cross-Compiler Problems 40638============================ 40639 40640You may run into problems with cross compilation on certain machines, 40641for several reasons. 40642 40643 * At present, the program `mips-tfile' which adds debug support to 40644 object files on MIPS systems does not work in a cross compile 40645 environment. 40646 40647 40648File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble 40649 4065011.3 Interoperation 40651=================== 40652 40653This section lists various difficulties encountered in using GCC 40654together with other compilers or with the assemblers, linkers, 40655libraries and debuggers on certain systems. 40656 40657 * On many platforms, GCC supports a different ABI for C++ than do 40658 other compilers, so the object files compiled by GCC cannot be 40659 used with object files generated by another C++ compiler. 40660 40661 An area where the difference is most apparent is name mangling. 40662 The use of different name mangling is intentional, to protect you 40663 from more subtle problems. Compilers differ as to many internal 40664 details of C++ implementation, including: how class instances are 40665 laid out, how multiple inheritance is implemented, and how virtual 40666 function calls are handled. If the name encoding were made the 40667 same, your programs would link against libraries provided from 40668 other compilers--but the programs would then crash when run. 40669 Incompatible libraries are then detected at link time, rather than 40670 at run time. 40671 40672 * On some BSD systems, including some versions of Ultrix, use of 40673 profiling causes static variable destructors (currently used only 40674 in C++) not to be run. 40675 40676 * On some SGI systems, when you use `-lgl_s' as an option, it gets 40677 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 40678 does not happen when you use GCC. You must specify all three 40679 options explicitly. 40680 40681 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 40682 boundary, and it expects every `double' to be so aligned. The Sun 40683 compiler usually gives `double' values 8-byte alignment, with one 40684 exception: function arguments of type `double' may not be aligned. 40685 40686 As a result, if a function compiled with Sun CC takes the address 40687 of an argument of type `double' and passes this pointer of type 40688 `double *' to a function compiled with GCC, dereferencing the 40689 pointer may cause a fatal signal. 40690 40691 One way to solve this problem is to compile your entire program 40692 with GCC. Another solution is to modify the function that is 40693 compiled with Sun CC to copy the argument into a local variable; 40694 local variables are always properly aligned. A third solution is 40695 to modify the function that uses the pointer to dereference it via 40696 the following function `access_double' instead of directly with 40697 `*': 40698 40699 inline double 40700 access_double (double *unaligned_ptr) 40701 { 40702 union d2i { double d; int i[2]; }; 40703 40704 union d2i *p = (union d2i *) unaligned_ptr; 40705 union d2i u; 40706 40707 u.i[0] = p->i[0]; 40708 u.i[1] = p->i[1]; 40709 40710 return u.d; 40711 } 40712 40713 Storing into the pointer can be done likewise with the same union. 40714 40715 * On Solaris, the `malloc' function in the `libmalloc.a' library may 40716 allocate memory that is only 4 byte aligned. Since GCC on the 40717 SPARC assumes that doubles are 8 byte aligned, this may result in a 40718 fatal signal if doubles are stored in memory allocated by the 40719 `libmalloc.a' library. 40720 40721 The solution is to not use the `libmalloc.a' library. Use instead 40722 `malloc' and related functions from `libc.a'; they do not have 40723 this problem. 40724 40725 * On the HP PA machine, ADB sometimes fails to work on functions 40726 compiled with GCC. Specifically, it fails to work on functions 40727 that use `alloca' or variable-size arrays. This is because GCC 40728 doesn't generate HP-UX unwind descriptors for such functions. It 40729 may even be impossible to generate them. 40730 40731 * Debugging (`-g') is not supported on the HP PA machine, unless you 40732 use the preliminary GNU tools. 40733 40734 * Taking the address of a label may generate errors from the HP-UX 40735 PA assembler. GAS for the PA does not have this problem. 40736 40737 * Using floating point parameters for indirect calls to static 40738 functions will not work when using the HP assembler. There simply 40739 is no way for GCC to specify what registers hold arguments for 40740 static functions when using the HP assembler. GAS for the PA does 40741 not have this problem. 40742 40743 * In extremely rare cases involving some very large functions you may 40744 receive errors from the HP linker complaining about an out of 40745 bounds unconditional branch offset. This used to occur more often 40746 in previous versions of GCC, but is now exceptionally rare. If 40747 you should run into it, you can work around by making your 40748 function smaller. 40749 40750 * GCC compiled code sometimes emits warnings from the HP-UX 40751 assembler of the form: 40752 40753 (warning) Use of GR3 when 40754 frame >= 8192 may cause conflict. 40755 40756 These warnings are harmless and can be safely ignored. 40757 40758 * In extremely rare cases involving some very large functions you may 40759 receive errors from the AIX Assembler complaining about a 40760 displacement that is too large. If you should run into it, you 40761 can work around by making your function smaller. 40762 40763 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 40764 semantics which merges global symbols between libraries and 40765 applications, especially necessary for C++ streams functionality. 40766 This is not the default behavior of AIX shared libraries and 40767 dynamic linking. `libstdc++.a' is built on AIX with 40768 "runtime-linking" enabled so that symbol merging can occur. To 40769 utilize this feature, the application linked with `libstdc++.a' 40770 must include the `-Wl,-brtl' flag on the link line. G++ cannot 40771 impose this because this option may interfere with the semantics 40772 of the user program and users may not always use `g++' to link his 40773 or her application. Applications are not required to use the 40774 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 40775 library which is not dependent on the symbol merging semantics 40776 will continue to function correctly. 40777 40778 * An application can interpose its own definition of functions for 40779 functions invoked by `libstdc++.a' with "runtime-linking" enabled 40780 on AIX. To accomplish this the application must be linked with 40781 "runtime-linking" option and the functions explicitly must be 40782 exported by the application (`-Wl,-brtl,-bE:exportfile'). 40783 40784 * AIX on the RS/6000 provides support (NLS) for environments outside 40785 of the United States. Compilers and assemblers use NLS to support 40786 locale-specific representations of various objects including 40787 floating-point numbers (`.' vs `,' for separating decimal 40788 fractions). There have been problems reported where the library 40789 linked with GCC does not produce the same floating-point formats 40790 that the assembler accepts. If you have this problem, set the 40791 `LANG' environment variable to `C' or `En_US'. 40792 40793 * Even if you specify `-fdollars-in-identifiers', you cannot 40794 successfully use `$' in identifiers on the RS/6000 due to a 40795 restriction in the IBM assembler. GAS supports these identifiers. 40796 40797 40798 40799File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 40800 4080111.4 Incompatibilities of GCC 40802============================= 40803 40804There are several noteworthy incompatibilities between GNU C and K&R 40805(non-ISO) versions of C. 40806 40807 * GCC normally makes string constants read-only. If several 40808 identical-looking string constants are used, GCC stores only one 40809 copy of the string. 40810 40811 One consequence is that you cannot call `mktemp' with a string 40812 constant argument. The function `mktemp' always alters the string 40813 its argument points to. 40814 40815 Another consequence is that `sscanf' does not work on some very 40816 old systems when passed a string constant as its format control 40817 string or input. This is because `sscanf' incorrectly tries to 40818 write into the string constant. Likewise `fscanf' and `scanf'. 40819 40820 The solution to these problems is to change the program to use 40821 `char'-array variables with initialization strings for these 40822 purposes instead of string constants. 40823 40824 * `-2147483648' is positive. 40825 40826 This is because 2147483648 cannot fit in the type `int', so 40827 (following the ISO C rules) its data type is `unsigned long int'. 40828 Negating this value yields 2147483648 again. 40829 40830 * GCC does not substitute macro arguments when they appear inside of 40831 string constants. For example, the following macro in GCC 40832 40833 #define foo(a) "a" 40834 40835 will produce output `"a"' regardless of what the argument A is. 40836 40837 * When you use `setjmp' and `longjmp', the only automatic variables 40838 guaranteed to remain valid are those declared `volatile'. This is 40839 a consequence of automatic register allocation. Consider this 40840 function: 40841 40842 jmp_buf j; 40843 40844 foo () 40845 { 40846 int a, b; 40847 40848 a = fun1 (); 40849 if (setjmp (j)) 40850 return a; 40851 40852 a = fun2 (); 40853 /* `longjmp (j)' may occur in `fun3'. */ 40854 return a + fun3 (); 40855 } 40856 40857 Here `a' may or may not be restored to its first value when the 40858 `longjmp' occurs. If `a' is allocated in a register, then its 40859 first value is restored; otherwise, it keeps the last value stored 40860 in it. 40861 40862 If you use the `-W' option with the `-O' option, you will get a 40863 warning when GCC thinks such a problem might be possible. 40864 40865 * Programs that use preprocessing directives in the middle of macro 40866 arguments do not work with GCC. For example, a program like this 40867 will not work: 40868 40869 foobar ( 40870 #define luser 40871 hack) 40872 40873 ISO C does not permit such a construct. 40874 40875 * K&R compilers allow comments to cross over an inclusion boundary 40876 (i.e. started in an include file and ended in the including file). 40877 40878 * Declarations of external variables and functions within a block 40879 apply only to the block containing the declaration. In other 40880 words, they have the same scope as any other declaration in the 40881 same place. 40882 40883 In some other C compilers, an `extern' declaration affects all the 40884 rest of the file even if it happens within a block. 40885 40886 * In traditional C, you can combine `long', etc., with a typedef 40887 name, as shown here: 40888 40889 typedef int foo; 40890 typedef long foo bar; 40891 40892 In ISO C, this is not allowed: `long' and other type modifiers 40893 require an explicit `int'. 40894 40895 * PCC allows typedef names to be used as function parameters. 40896 40897 * Traditional C allows the following erroneous pair of declarations 40898 to appear together in a given scope: 40899 40900 typedef int foo; 40901 typedef foo foo; 40902 40903 * GCC treats all characters of identifiers as significant. 40904 According to K&R-1 (2.2), "No more than the first eight characters 40905 are significant, although more may be used.". Also according to 40906 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 40907 the first character must be a letter. The underscore _ counts as 40908 a letter.", but GCC also allows dollar signs in identifiers. 40909 40910 * PCC allows whitespace in the middle of compound assignment 40911 operators such as `+='. GCC, following the ISO standard, does not 40912 allow this. 40913 40914 * GCC complains about unterminated character constants inside of 40915 preprocessing conditionals that fail. Some programs have English 40916 comments enclosed in conditionals that are guaranteed to fail; if 40917 these comments contain apostrophes, GCC will probably report an 40918 error. For example, this code would produce an error: 40919 40920 #if 0 40921 You can't expect this to work. 40922 #endif 40923 40924 The best solution to such a problem is to put the text into an 40925 actual C comment delimited by `/*...*/'. 40926 40927 * Many user programs contain the declaration `long time ();'. In the 40928 past, the system header files on many systems did not actually 40929 declare `time', so it did not matter what type your program 40930 declared it to return. But in systems with ISO C headers, `time' 40931 is declared to return `time_t', and if that is not the same as 40932 `long', then `long time ();' is erroneous. 40933 40934 The solution is to change your program to use appropriate system 40935 headers (`<time.h>' on systems with ISO C headers) and not to 40936 declare `time' if the system header files declare it, or failing 40937 that to use `time_t' as the return type of `time'. 40938 40939 * When compiling functions that return `float', PCC converts it to a 40940 double. GCC actually returns a `float'. If you are concerned 40941 with PCC compatibility, you should declare your functions to return 40942 `double'; you might as well say what you mean. 40943 40944 * When compiling functions that return structures or unions, GCC 40945 output code normally uses a method different from that used on most 40946 versions of Unix. As a result, code compiled with GCC cannot call 40947 a structure-returning function compiled with PCC, and vice versa. 40948 40949 The method used by GCC is as follows: a structure or union which is 40950 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 40951 union with any other size is stored into an address supplied by 40952 the caller (usually in a special, fixed register, but on some 40953 machines it is passed on the stack). The target hook 40954 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 40955 40956 By contrast, PCC on most target machines returns structures and 40957 unions of any size by copying the data into an area of static 40958 storage, and then returning the address of that storage as if it 40959 were a pointer value. The caller must copy the data from that 40960 memory area to the place where the value is wanted. GCC does not 40961 use this method because it is slower and nonreentrant. 40962 40963 On some newer machines, PCC uses a reentrant convention for all 40964 structure and union returning. GCC on most of these machines uses 40965 a compatible convention when returning structures and unions in 40966 memory, but still returns small structures and unions in registers. 40967 40968 You can tell GCC to use a compatible convention for all structure 40969 and union returning with the option `-fpcc-struct-return'. 40970 40971 * GCC complains about program fragments such as `0x74ae-0x4000' 40972 which appear to be two hexadecimal constants separated by the minus 40973 operator. Actually, this string is a single "preprocessing token". 40974 Each such token must correspond to one token in C. Since this 40975 does not, GCC prints an error message. Although it may appear 40976 obvious that what is meant is an operator and two values, the ISO 40977 C standard specifically requires that this be treated as erroneous. 40978 40979 A "preprocessing token" is a "preprocessing number" if it begins 40980 with a digit and is followed by letters, underscores, digits, 40981 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 40982 character sequences. (In strict C90 mode, the sequences `p+', 40983 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 40984 40985 To make the above program fragment valid, place whitespace in 40986 front of the minus sign. This whitespace will end the 40987 preprocessing number. 40988 40989 40990File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 40991 4099211.5 Fixed Header Files 40993======================= 40994 40995GCC needs to install corrected versions of some system header files. 40996This is because most target systems have some header files that won't 40997work with GCC unless they are changed. Some have bugs, some are 40998incompatible with ISO C, and some depend on special features of other 40999compilers. 41000 41001 Installing GCC automatically creates and installs the fixed header 41002files, by running a program called `fixincludes'. Normally, you don't 41003need to pay attention to this. But there are cases where it doesn't do 41004the right thing automatically. 41005 41006 * If you update the system's header files, such as by installing a 41007 new system version, the fixed header files of GCC are not 41008 automatically updated. They can be updated using the `mkheaders' 41009 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 41010 41011 * On some systems, header file directories contain machine-specific 41012 symbolic links in certain places. This makes it possible to share 41013 most of the header files among hosts running the same version of 41014 the system on different machine models. 41015 41016 The programs that fix the header files do not understand this 41017 special way of using symbolic links; therefore, the directory of 41018 fixed header files is good only for the machine model used to 41019 build it. 41020 41021 It is possible to make separate sets of fixed header files for the 41022 different machine models, and arrange a structure of symbolic 41023 links so as to use the proper set, but you'll have to do this by 41024 hand. 41025 41026 41027File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 41028 4102911.6 Standard Libraries 41030======================= 41031 41032GCC by itself attempts to be a conforming freestanding implementation. 41033*Note Language Standards Supported by GCC: Standards, for details of 41034what this means. Beyond the library facilities required of such an 41035implementation, the rest of the C library is supplied by the vendor of 41036the operating system. If that C library doesn't conform to the C 41037standards, then your programs might get warnings (especially when using 41038`-Wall') that you don't expect. 41039 41040 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 41041while the C standard says that `sprintf' returns an `int'. The 41042`fixincludes' program could make the prototype for this function match 41043the Standard, but that would be wrong, since the function will still 41044return `char *'. 41045 41046 If you need a Standard compliant library, then you need to find one, as 41047GCC does not provide one. The GNU C library (called `glibc') provides 41048ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 41049HURD-based GNU systems; no recent version of it supports other systems, 41050though some very old versions did. Version 2.2 of the GNU C library 41051includes nearly complete C99 support. You could also ask your 41052operating system vendor if newer libraries are available. 41053 41054 41055File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 41056 4105711.7 Disappointments and Misunderstandings 41058========================================== 41059 41060These problems are perhaps regrettable, but we don't know any practical 41061way around them. 41062 41063 * Certain local variables aren't recognized by debuggers when you 41064 compile with optimization. 41065 41066 This occurs because sometimes GCC optimizes the variable out of 41067 existence. There is no way to tell the debugger how to compute the 41068 value such a variable "would have had", and it is not clear that 41069 would be desirable anyway. So GCC simply does not mention the 41070 eliminated variable when it writes debugging information. 41071 41072 You have to expect a certain amount of disagreement between the 41073 executable and your source code, when you use optimization. 41074 41075 * Users often think it is a bug when GCC reports an error for code 41076 like this: 41077 41078 int foo (struct mumble *); 41079 41080 struct mumble { ... }; 41081 41082 int foo (struct mumble *x) 41083 { ... } 41084 41085 This code really is erroneous, because the scope of `struct 41086 mumble' in the prototype is limited to the argument list 41087 containing it. It does not refer to the `struct mumble' defined 41088 with file scope immediately below--they are two unrelated types 41089 with similar names in different scopes. 41090 41091 But in the definition of `foo', the file-scope type is used 41092 because that is available to be inherited. Thus, the definition 41093 and the prototype do not match, and you get an error. 41094 41095 This behavior may seem silly, but it's what the ISO standard 41096 specifies. It is easy enough for you to make your code work by 41097 moving the definition of `struct mumble' above the prototype. 41098 It's not worth being incompatible with ISO C just to avoid an 41099 error for the example shown above. 41100 41101 * Accesses to bit-fields even in volatile objects works by accessing 41102 larger objects, such as a byte or a word. You cannot rely on what 41103 size of object is accessed in order to read or write the 41104 bit-field; it may even vary for a given bit-field according to the 41105 precise usage. 41106 41107 If you care about controlling the amount of memory that is 41108 accessed, use volatile but do not use bit-fields. 41109 41110 * GCC comes with shell scripts to fix certain known problems in 41111 system header files. They install corrected copies of various 41112 header files in a special directory where only GCC will normally 41113 look for them. The scripts adapt to various systems by searching 41114 all the system header files for the problem cases that we know 41115 about. 41116 41117 If new system header files are installed, nothing automatically 41118 arranges to update the corrected header files. They can be 41119 updated using the `mkheaders' script installed in 41120 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 41121 41122 * On 68000 and x86 systems, for instance, you can get paradoxical 41123 results if you test the precise values of floating point numbers. 41124 For example, you can find that a floating point value which is not 41125 a NaN is not equal to itself. This results from the fact that the 41126 floating point registers hold a few more bits of precision than 41127 fit in a `double' in memory. Compiled code moves values between 41128 memory and floating point registers at its convenience, and moving 41129 them into memory truncates them. 41130 41131 You can partially avoid this problem by using the `-ffloat-store' 41132 option (*note Optimize Options::). 41133 41134 * On AIX and other platforms without weak symbol support, templates 41135 need to be instantiated explicitly and symbols for static members 41136 of templates will not be generated. 41137 41138 * On AIX, GCC scans object files and library archives for static 41139 constructors and destructors when linking an application before the 41140 linker prunes unreferenced symbols. This is necessary to prevent 41141 the AIX linker from mistakenly assuming that static constructor or 41142 destructor are unused and removing them before the scanning can 41143 occur. All static constructors and destructors found will be 41144 referenced even though the modules in which they occur may not be 41145 used by the program. This may lead to both increased executable 41146 size and unexpected symbol references. 41147 41148 41149File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble 41150 4115111.8 Common Misunderstandings with GNU C++ 41152========================================== 41153 41154C++ is a complex language and an evolving one, and its standard 41155definition (the ISO C++ standard) was only recently completed. As a 41156result, your C++ compiler may occasionally surprise you, even when its 41157behavior is correct. This section discusses some areas that frequently 41158give rise to questions of this sort. 41159 41160* Menu: 41161 41162* Static Definitions:: Static member declarations are not definitions 41163* Name lookup:: Name lookup, templates, and accessing members of base classes 41164* Temporaries:: Temporaries may vanish before you expect 41165* Copy Assignment:: Copy Assignment operators copy virtual bases twice 41166 41167 41168File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 41169 4117011.8.1 Declare _and_ Define Static Members 41171------------------------------------------ 41172 41173When a class has static data members, it is not enough to _declare_ the 41174static member; you must also _define_ it. For example: 41175 41176 class Foo 41177 { 41178 ... 41179 void method(); 41180 static int bar; 41181 }; 41182 41183 This declaration only establishes that the class `Foo' has an `int' 41184named `Foo::bar', and a member function named `Foo::method'. But you 41185still need to define _both_ `method' and `bar' elsewhere. According to 41186the ISO standard, you must supply an initializer in one (and only one) 41187source file, such as: 41188 41189 int Foo::bar = 0; 41190 41191 Other C++ compilers may not correctly implement the standard behavior. 41192As a result, when you switch to `g++' from one of these compilers, you 41193may discover that a program that appeared to work correctly in fact 41194does not conform to the standard: `g++' reports as undefined symbols 41195any static data members that lack definitions. 41196 41197 41198File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 41199 4120011.8.2 Name lookup, templates, and accessing members of base classes 41201-------------------------------------------------------------------- 41202 41203The C++ standard prescribes that all names that are not dependent on 41204template parameters are bound to their present definitions when parsing 41205a template function or class.(1) Only names that are dependent are 41206looked up at the point of instantiation. For example, consider 41207 41208 void foo(double); 41209 41210 struct A { 41211 template <typename T> 41212 void f () { 41213 foo (1); // 1 41214 int i = N; // 2 41215 T t; 41216 t.bar(); // 3 41217 foo (t); // 4 41218 } 41219 41220 static const int N; 41221 }; 41222 41223 Here, the names `foo' and `N' appear in a context that does not depend 41224on the type of `T'. The compiler will thus require that they are 41225defined in the context of use in the template, not only before the 41226point of instantiation, and will here use `::foo(double)' and `A::N', 41227respectively. In particular, it will convert the integer value to a 41228`double' when passing it to `::foo(double)'. 41229 41230 Conversely, `bar' and the call to `foo' in the fourth marked line are 41231used in contexts that do depend on the type of `T', so they are only 41232looked up at the point of instantiation, and you can provide 41233declarations for them after declaring the template, but before 41234instantiating it. In particular, if you instantiate `A::f<int>', the 41235last line will call an overloaded `::foo(int)' if one was provided, 41236even if after the declaration of `struct A'. 41237 41238 This distinction between lookup of dependent and non-dependent names is 41239called two-stage (or dependent) name lookup. G++ implements it since 41240version 3.4. 41241 41242 Two-stage name lookup sometimes leads to situations with behavior 41243different from non-template codes. The most common is probably this: 41244 41245 template <typename T> struct Base { 41246 int i; 41247 }; 41248 41249 template <typename T> struct Derived : public Base<T> { 41250 int get_i() { return i; } 41251 }; 41252 41253 In `get_i()', `i' is not used in a dependent context, so the compiler 41254will look for a name declared at the enclosing namespace scope (which 41255is the global scope here). It will not look into the base class, since 41256that is dependent and you may declare specializations of `Base' even 41257after declaring `Derived', so the compiler can't really know what `i' 41258would refer to. If there is no global variable `i', then you will get 41259an error message. 41260 41261 In order to make it clear that you want the member of the base class, 41262you need to defer lookup until instantiation time, at which the base 41263class is known. For this, you need to access `i' in a dependent 41264context, by either using `this->i' (remember that `this' is of type 41265`Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 41266Alternatively, `Base<T>::i' might be brought into scope by a 41267`using'-declaration. 41268 41269 Another, similar example involves calling member functions of a base 41270class: 41271 41272 template <typename T> struct Base { 41273 int f(); 41274 }; 41275 41276 template <typename T> struct Derived : Base<T> { 41277 int g() { return f(); }; 41278 }; 41279 41280 Again, the call to `f()' is not dependent on template arguments (there 41281are no arguments that depend on the type `T', and it is also not 41282otherwise specified that the call should be in a dependent context). 41283Thus a global declaration of such a function must be available, since 41284the one in the base class is not visible until instantiation time. The 41285compiler will consequently produce the following error message: 41286 41287 x.cc: In member function `int Derived<T>::g()': 41288 x.cc:6: error: there are no arguments to `f' that depend on a template 41289 parameter, so a declaration of `f' must be available 41290 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 41291 allowing the use of an undeclared name is deprecated) 41292 41293 To make the code valid either use `this->f()', or `Base<T>::f()'. 41294Using the `-fpermissive' flag will also let the compiler accept the 41295code, by marking all function calls for which no declaration is visible 41296at the time of definition of the template for later lookup at 41297instantiation time, as if it were a dependent call. We do not 41298recommend using `-fpermissive' to work around invalid code, and it will 41299also only catch cases where functions in base classes are called, not 41300where variables in base classes are used (as in the example above). 41301 41302 Note that some compilers (including G++ versions prior to 3.4) get 41303these examples wrong and accept above code without an error. Those 41304compilers do not implement two-stage name lookup correctly. 41305 41306 ---------- Footnotes ---------- 41307 41308 (1) The C++ standard just uses the term "dependent" for names that 41309depend on the type or value of template parameters. This shorter term 41310will also be used in the rest of this section. 41311 41312 41313File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 41314 4131511.8.3 Temporaries May Vanish Before You Expect 41316----------------------------------------------- 41317 41318It is dangerous to use pointers or references to _portions_ of a 41319temporary object. The compiler may very well delete the object before 41320you expect it to, leaving a pointer to garbage. The most common place 41321where this problem crops up is in classes like string classes, 41322especially ones that define a conversion function to type `char *' or 41323`const char *'--which is one reason why the standard `string' class 41324requires you to call the `c_str' member function. However, any class 41325that returns a pointer to some internal structure is potentially 41326subject to this problem. 41327 41328 For example, a program may use a function `strfunc' that returns 41329`string' objects, and another function `charfunc' that operates on 41330pointers to `char': 41331 41332 string strfunc (); 41333 void charfunc (const char *); 41334 41335 void 41336 f () 41337 { 41338 const char *p = strfunc().c_str(); 41339 ... 41340 charfunc (p); 41341 ... 41342 charfunc (p); 41343 } 41344 41345In this situation, it may seem reasonable to save a pointer to the C 41346string returned by the `c_str' member function and use that rather than 41347call `c_str' repeatedly. However, the temporary string created by the 41348call to `strfunc' is destroyed after `p' is initialized, at which point 41349`p' is left pointing to freed memory. 41350 41351 Code like this may run successfully under some other compilers, 41352particularly obsolete cfront-based compilers that delete temporaries 41353along with normal local variables. However, the GNU C++ behavior is 41354standard-conforming, so if your program depends on late destruction of 41355temporaries it is not portable. 41356 41357 The safe way to write such code is to give the temporary a name, which 41358forces it to remain until the end of the scope of the name. For 41359example: 41360 41361 const string& tmp = strfunc (); 41362 charfunc (tmp.c_str ()); 41363 41364 41365File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 41366 4136711.8.4 Implicit Copy-Assignment for Virtual Bases 41368------------------------------------------------- 41369 41370When a base class is virtual, only one subobject of the base class 41371belongs to each full object. Also, the constructors and destructors are 41372invoked only once, and called from the most-derived class. However, 41373such objects behave unspecified when being assigned. For example: 41374 41375 struct Base{ 41376 char *name; 41377 Base(char *n) : name(strdup(n)){} 41378 Base& operator= (const Base& other){ 41379 free (name); 41380 name = strdup (other.name); 41381 } 41382 }; 41383 41384 struct A:virtual Base{ 41385 int val; 41386 A():Base("A"){} 41387 }; 41388 41389 struct B:virtual Base{ 41390 int bval; 41391 B():Base("B"){} 41392 }; 41393 41394 struct Derived:public A, public B{ 41395 Derived():Base("Derived"){} 41396 }; 41397 41398 void func(Derived &d1, Derived &d2) 41399 { 41400 d1 = d2; 41401 } 41402 41403 The C++ standard specifies that `Base::Base' is only called once when 41404constructing or copy-constructing a Derived object. It is unspecified 41405whether `Base::operator=' is called more than once when the implicit 41406copy-assignment for Derived objects is invoked (as it is inside `func' 41407in the example). 41408 41409 G++ implements the "intuitive" algorithm for copy-assignment: assign 41410all direct bases, then assign all members. In that algorithm, the 41411virtual base subobject can be encountered more than once. In the 41412example, copying proceeds in the following order: `val', `name' (via 41413`strdup'), `bval', and `name' again. 41414 41415 If application code relies on copy-assignment, a user-defined 41416copy-assignment operator removes any uncertainties. With such an 41417operator, the application can define whether and how the virtual base 41418subobject is assigned. 41419 41420 41421File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble 41422 4142311.9 Certain Changes We Don't Want to Make 41424========================================== 41425 41426This section lists changes that people frequently request, but which we 41427do not make because we think GCC is better without them. 41428 41429 * Checking the number and type of arguments to a function which has 41430 an old-fashioned definition and no prototype. 41431 41432 Such a feature would work only occasionally--only for calls that 41433 appear in the same file as the called function, following the 41434 definition. The only way to check all calls reliably is to add a 41435 prototype for the function. But adding a prototype eliminates the 41436 motivation for this feature. So the feature is not worthwhile. 41437 41438 * Warning about using an expression whose type is signed as a shift 41439 count. 41440 41441 Shift count operands are probably signed more often than unsigned. 41442 Warning about this would cause far more annoyance than good. 41443 41444 * Warning about assigning a signed value to an unsigned variable. 41445 41446 Such assignments must be very common; warning about them would 41447 cause more annoyance than good. 41448 41449 * Warning when a non-void function value is ignored. 41450 41451 C contains many standard functions that return a value that most 41452 programs choose to ignore. One obvious example is `printf'. 41453 Warning about this practice only leads the defensive programmer to 41454 clutter programs with dozens of casts to `void'. Such casts are 41455 required so frequently that they become visual noise. Writing 41456 those casts becomes so automatic that they no longer convey useful 41457 information about the intentions of the programmer. For functions 41458 where the return value should never be ignored, use the 41459 `warn_unused_result' function attribute (*note Function 41460 Attributes::). 41461 41462 * Making `-fshort-enums' the default. 41463 41464 This would cause storage layout to be incompatible with most other 41465 C compilers. And it doesn't seem very important, given that you 41466 can get the same result in other ways. The case where it matters 41467 most is when the enumeration-valued object is inside a structure, 41468 and in that case you can specify a field width explicitly. 41469 41470 * Making bit-fields unsigned by default on particular machines where 41471 "the ABI standard" says to do so. 41472 41473 The ISO C standard leaves it up to the implementation whether a 41474 bit-field declared plain `int' is signed or not. This in effect 41475 creates two alternative dialects of C. 41476 41477 The GNU C compiler supports both dialects; you can specify the 41478 signed dialect with `-fsigned-bitfields' and the unsigned dialect 41479 with `-funsigned-bitfields'. However, this leaves open the 41480 question of which dialect to use by default. 41481 41482 Currently, the preferred dialect makes plain bit-fields signed, 41483 because this is simplest. Since `int' is the same as `signed int' 41484 in every other context, it is cleanest for them to be the same in 41485 bit-fields as well. 41486 41487 Some computer manufacturers have published Application Binary 41488 Interface standards which specify that plain bit-fields should be 41489 unsigned. It is a mistake, however, to say anything about this 41490 issue in an ABI. This is because the handling of plain bit-fields 41491 distinguishes two dialects of C. Both dialects are meaningful on 41492 every type of machine. Whether a particular object file was 41493 compiled using signed bit-fields or unsigned is of no concern to 41494 other object files, even if they access the same bit-fields in the 41495 same data structures. 41496 41497 A given program is written in one or the other of these two 41498 dialects. The program stands a chance to work on most any machine 41499 if it is compiled with the proper dialect. It is unlikely to work 41500 at all if compiled with the wrong dialect. 41501 41502 Many users appreciate the GNU C compiler because it provides an 41503 environment that is uniform across machines. These users would be 41504 inconvenienced if the compiler treated plain bit-fields 41505 differently on certain machines. 41506 41507 Occasionally users write programs intended only for a particular 41508 machine type. On these occasions, the users would benefit if the 41509 GNU C compiler were to support by default the same dialect as the 41510 other compilers on that machine. But such applications are rare. 41511 And users writing a program to run on more than one type of 41512 machine cannot possibly benefit from this kind of compatibility. 41513 41514 This is why GCC does and will treat plain bit-fields in the same 41515 fashion on all types of machines (by default). 41516 41517 There are some arguments for making bit-fields unsigned by default 41518 on all machines. If, for example, this becomes a universal de 41519 facto standard, it would make sense for GCC to go along with it. 41520 This is something to be considered in the future. 41521 41522 (Of course, users strongly concerned about portability should 41523 indicate explicitly in each bit-field whether it is signed or not. 41524 In this way, they write programs which have the same meaning in 41525 both C dialects.) 41526 41527 * Undefining `__STDC__' when `-ansi' is not used. 41528 41529 Currently, GCC defines `__STDC__' unconditionally. This provides 41530 good results in practice. 41531 41532 Programmers normally use conditionals on `__STDC__' to ask whether 41533 it is safe to use certain features of ISO C, such as function 41534 prototypes or ISO token concatenation. Since plain `gcc' supports 41535 all the features of ISO C, the correct answer to these questions is 41536 "yes". 41537 41538 Some users try to use `__STDC__' to check for the availability of 41539 certain library facilities. This is actually incorrect usage in 41540 an ISO C program, because the ISO C standard says that a conforming 41541 freestanding implementation should define `__STDC__' even though it 41542 does not have the library facilities. `gcc -ansi -pedantic' is a 41543 conforming freestanding implementation, and it is therefore 41544 required to define `__STDC__', even though it does not come with 41545 an ISO C library. 41546 41547 Sometimes people say that defining `__STDC__' in a compiler that 41548 does not completely conform to the ISO C standard somehow violates 41549 the standard. This is illogical. The standard is a standard for 41550 compilers that claim to support ISO C, such as `gcc -ansi'--not 41551 for other compilers such as plain `gcc'. Whatever the ISO C 41552 standard says is relevant to the design of plain `gcc' without 41553 `-ansi' only for pragmatic reasons, not as a requirement. 41554 41555 GCC normally defines `__STDC__' to be 1, and in addition defines 41556 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 41557 option for strict conformance to some version of ISO C. On some 41558 hosts, system include files use a different convention, where 41559 `__STDC__' is normally 0, but is 1 if the user specifies strict 41560 conformance to the C Standard. GCC follows the host convention 41561 when processing system include files, but when processing user 41562 files it follows the usual GNU C convention. 41563 41564 * Undefining `__STDC__' in C++. 41565 41566 Programs written to compile with C++-to-C translators get the 41567 value of `__STDC__' that goes with the C compiler that is 41568 subsequently used. These programs must test `__STDC__' to 41569 determine what kind of C preprocessor that compiler uses: whether 41570 they should concatenate tokens in the ISO C fashion or in the 41571 traditional fashion. 41572 41573 These programs work properly with GNU C++ if `__STDC__' is defined. 41574 They would not work otherwise. 41575 41576 In addition, many header files are written to provide prototypes 41577 in ISO C but not in traditional C. Many of these header files can 41578 work without change in C++ provided `__STDC__' is defined. If 41579 `__STDC__' is not defined, they will all fail, and will all need 41580 to be changed to test explicitly for C++ as well. 41581 41582 * Deleting "empty" loops. 41583 41584 Historically, GCC has not deleted "empty" loops under the 41585 assumption that the most likely reason you would put one in a 41586 program is to have a delay, so deleting them will not make real 41587 programs run any faster. 41588 41589 However, the rationale here is that optimization of a nonempty loop 41590 cannot produce an empty one. This held for carefully written C 41591 compiled with less powerful optimizers but is not always the case 41592 for carefully written C++ or with more powerful optimizers. Thus 41593 GCC will remove operations from loops whenever it can determine 41594 those operations are not externally visible (apart from the time 41595 taken to execute them, of course). In case the loop can be proved 41596 to be finite, GCC will also remove the loop itself. 41597 41598 Be aware of this when performing timing tests, for instance the 41599 following loop can be completely removed, provided 41600 `some_expression' can provably not change any global state. 41601 41602 { 41603 int sum = 0; 41604 int ix; 41605 41606 for (ix = 0; ix != 10000; ix++) 41607 sum += some_expression; 41608 } 41609 41610 Even though `sum' is accumulated in the loop, no use is made of 41611 that summation, so the accumulation can be removed. 41612 41613 * Making side effects happen in the same order as in some other 41614 compiler. 41615 41616 It is never safe to depend on the order of evaluation of side 41617 effects. For example, a function call like this may very well 41618 behave differently from one compiler to another: 41619 41620 void func (int, int); 41621 41622 int i = 2; 41623 func (i++, i++); 41624 41625 There is no guarantee (in either the C or the C++ standard language 41626 definitions) that the increments will be evaluated in any 41627 particular order. Either increment might happen first. `func' 41628 might get the arguments `2, 3', or it might get `3, 2', or even 41629 `2, 2'. 41630 41631 * Making certain warnings into errors by default. 41632 41633 Some ISO C testsuites report failure when the compiler does not 41634 produce an error message for a certain program. 41635 41636 ISO C requires a "diagnostic" message for certain kinds of invalid 41637 programs, but a warning is defined by GCC to count as a 41638 diagnostic. If GCC produces a warning but not an error, that is 41639 correct ISO C support. If testsuites call this "failure", they 41640 should be run with the GCC option `-pedantic-errors', which will 41641 turn these warnings into errors. 41642 41643 41644 41645File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 41646 4164711.10 Warning Messages and Error Messages 41648========================================= 41649 41650The GNU compiler can produce two kinds of diagnostics: errors and 41651warnings. Each kind has a different purpose: 41652 41653 "Errors" report problems that make it impossible to compile your 41654 program. GCC reports errors with the source file name and line 41655 number where the problem is apparent. 41656 41657 "Warnings" report other unusual conditions in your code that _may_ 41658 indicate a problem, although compilation can (and does) proceed. 41659 Warning messages also report the source file name and line number, 41660 but include the text `warning:' to distinguish them from error 41661 messages. 41662 41663 Warnings may indicate danger points where you should check to make sure 41664that your program really does what you intend; or the use of obsolete 41665features; or the use of nonstandard features of GNU C or C++. Many 41666warnings are issued only if you ask for them, with one of the `-W' 41667options (for instance, `-Wall' requests a variety of useful warnings). 41668 41669 GCC always tries to compile your program if possible; it never 41670gratuitously rejects a program whose meaning is clear merely because 41671(for instance) it fails to conform to a standard. In some cases, 41672however, the C and C++ standards specify that certain extensions are 41673forbidden, and a diagnostic _must_ be issued by a conforming compiler. 41674The `-pedantic' option tells GCC to issue warnings in such cases; 41675`-pedantic-errors' says to make them errors instead. This does not 41676mean that _all_ non-ISO constructs get warnings or errors. 41677 41678 *Note Options to Request or Suppress Warnings: Warning Options, for 41679more detail on these and related command-line options. 41680 41681 41682File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 41683 4168412 Reporting Bugs 41685***************** 41686 41687Your bug reports play an essential role in making GCC reliable. 41688 41689 When you encounter a problem, the first thing to do is to see if it is 41690already known. *Note Trouble::. If it isn't known, then you should 41691report the problem. 41692 41693* Menu: 41694 41695* Criteria: Bug Criteria. Have you really found a bug? 41696* Reporting: Bug Reporting. How to report a bug effectively. 41697* Known: Trouble. Known problems. 41698* Help: Service. Where to ask for help. 41699 41700 41701File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 41702 4170312.1 Have You Found a Bug? 41704========================== 41705 41706If you are not sure whether you have found a bug, here are some 41707guidelines: 41708 41709 * If the compiler gets a fatal signal, for any input whatever, that 41710 is a compiler bug. Reliable compilers never crash. 41711 41712 * If the compiler produces invalid assembly code, for any input 41713 whatever (except an `asm' statement), that is a compiler bug, 41714 unless the compiler reports errors (not just warnings) which would 41715 ordinarily prevent the assembler from being run. 41716 41717 * If the compiler produces valid assembly code that does not 41718 correctly execute the input source code, that is a compiler bug. 41719 41720 However, you must double-check to make sure, because you may have a 41721 program whose behavior is undefined, which happened by chance to 41722 give the desired results with another C or C++ compiler. 41723 41724 For example, in many nonoptimizing compilers, you can write `x;' 41725 at the end of a function instead of `return x;', with the same 41726 results. But the value of the function is undefined if `return' 41727 is omitted; it is not a bug when GCC produces different results. 41728 41729 Problems often result from expressions with two increment 41730 operators, as in `f (*p++, *p++)'. Your previous compiler might 41731 have interpreted that expression the way you intended; GCC might 41732 interpret it another way. Neither compiler is wrong. The bug is 41733 in your code. 41734 41735 After you have localized the error to a single source line, it 41736 should be easy to check for these things. If your program is 41737 correct and well defined, you have found a compiler bug. 41738 41739 * If the compiler produces an error message for valid input, that is 41740 a compiler bug. 41741 41742 * If the compiler does not produce an error message for invalid 41743 input, that is a compiler bug. However, you should note that your 41744 idea of "invalid input" might be someone else's idea of "an 41745 extension" or "support for traditional practice". 41746 41747 * If you are an experienced user of one of the languages GCC 41748 supports, your suggestions for improvement of GCC are welcome in 41749 any case. 41750 41751 41752File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 41753 4175412.2 How and where to Report Bugs 41755================================= 41756 41757Bugs should be reported to the bug database at 41758`https://support.codesourcery.com/GNUToolchain/'. 41759 41760 41761File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 41762 4176313 How To Get Help with GCC 41764*************************** 41765 41766If you need help installing, using or changing GCC, there are two ways 41767to find it: 41768 41769 * Send a message to a suitable network mailing list. First try 41770 <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if 41771 that brings no response, try <gcc@gcc.gnu.org>. For help changing 41772 GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in 41773 GCC, please report it following the instructions at *note Bug 41774 Reporting::. 41775 41776 * Look in the service directory for someone who might help you for a 41777 fee. The service directory is found at 41778 `http://www.fsf.org/resources/service'. 41779 41780 For further information, see `http://gcc.gnu.org/faq.html#support'. 41781 41782 41783File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 41784 4178514 Contributing to GCC Development 41786********************************** 41787 41788If you would like to help pretest GCC releases to assure they work well, 41789current development sources are available by SVN (see 41790`http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 41791available for FTP; see `http://gcc.gnu.org/snapshots.html'. 41792 41793 If you would like to work on improvements to GCC, please read the 41794advice at these URLs: 41795 41796 `http://gcc.gnu.org/contribute.html' 41797 `http://gcc.gnu.org/contributewhy.html' 41798 41799for information on how to make useful contributions and avoid 41800duplication of effort. Suggested projects are listed at 41801`http://gcc.gnu.org/projects/'. 41802 41803 41804File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 41805 41806Funding Free Software 41807********************* 41808 41809If you want to have more free software a few years from now, it makes 41810sense for you to help encourage people to contribute funds for its 41811development. The most effective approach known is to encourage 41812commercial redistributors to donate. 41813 41814 Users of free software systems can boost the pace of development by 41815encouraging for-a-fee distributors to donate part of their selling price 41816to free software developers--the Free Software Foundation, and others. 41817 41818 The way to convince distributors to do this is to demand it and expect 41819it from them. So when you compare distributors, judge them partly by 41820how much they give to free software development. Show distributors 41821they must compete to be the one who gives the most. 41822 41823 To make this approach work, you must insist on numbers that you can 41824compare, such as, "We will donate ten dollars to the Frobnitz project 41825for each disk sold." Don't be satisfied with a vague promise, such as 41826"A portion of the profits are donated," since it doesn't give a basis 41827for comparison. 41828 41829 Even a precise fraction "of the profits from this disk" is not very 41830meaningful, since creative accounting and unrelated business decisions 41831can greatly alter what fraction of the sales price counts as profit. 41832If the price you pay is $50, ten percent of the profit is probably less 41833than a dollar; it might be a few cents, or nothing at all. 41834 41835 Some redistributors do development work themselves. This is useful 41836too; but to keep everyone honest, you need to inquire how much they do, 41837and what kind. Some kinds of development make much more long-term 41838difference than others. For example, maintaining a separate version of 41839a program contributes very little; maintaining the standard version of a 41840program for the whole community contributes much. Easy new ports 41841contribute little, since someone else would surely do them; difficult 41842ports such as adding a new CPU to the GNU Compiler Collection 41843contribute more; major new features or packages contribute the most. 41844 41845 By establishing the idea that supporting further development is "the 41846proper thing to do" when distributing free software for a fee, we can 41847assure a steady flow of resources into making more free software. 41848 41849 Copyright (C) 1994 Free Software Foundation, Inc. 41850 Verbatim copying and redistribution of this section is permitted 41851 without royalty; alteration is not permitted. 41852 41853 41854File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 41855 41856The GNU Project and GNU/Linux 41857***************************** 41858 41859The GNU Project was launched in 1984 to develop a complete Unix-like 41860operating system which is free software: the GNU system. (GNU is a 41861recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 41862Variants of the GNU operating system, which use the kernel Linux, are 41863now widely used; though these systems are often referred to as "Linux", 41864they are more accurately called GNU/Linux systems. 41865 41866 For more information, see: 41867 `http://www.gnu.org/' 41868 `http://www.gnu.org/gnu/linux-and-gnu.html' 41869 41870 41871File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 41872 41873GNU General Public License 41874************************** 41875 41876 Version 3, 29 June 2007 41877 41878 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 41879 41880 Everyone is permitted to copy and distribute verbatim copies of this 41881 license document, but changing it is not allowed. 41882 41883Preamble 41884======== 41885 41886The GNU General Public License is a free, copyleft license for software 41887and other kinds of works. 41888 41889 The licenses for most software and other practical works are designed 41890to take away your freedom to share and change the works. By contrast, 41891the GNU General Public License is intended to guarantee your freedom to 41892share and change all versions of a program-to make sure it remains free 41893software for all its users. We, the Free Software Foundation, use the 41894GNU General Public License for most of our software; it applies also to 41895any other work released this way by its authors. You can apply it to 41896your programs, too. 41897 41898 When we speak of free software, we are referring to freedom, not 41899price. Our General Public Licenses are designed to make sure that you 41900have the freedom to distribute copies of free software (and charge for 41901them if you wish), that you receive source code or can get it if you 41902want it, that you can change the software or use pieces of it in new 41903free programs, and that you know you can do these things. 41904 41905 To protect your rights, we need to prevent others from denying you 41906these rights or asking you to surrender the rights. Therefore, you 41907have certain responsibilities if you distribute copies of the software, 41908or if you modify it: responsibilities to respect the freedom of others. 41909 41910 For example, if you distribute copies of such a program, whether 41911gratis or for a fee, you must pass on to the recipients the same 41912freedoms that you received. You must make sure that they, too, receive 41913or can get the source code. And you must show them these terms so they 41914know their rights. 41915 41916 Developers that use the GNU GPL protect your rights with two steps: 41917(1) assert copyright on the software, and (2) offer you this License 41918giving you legal permission to copy, distribute and/or modify it. 41919 41920 For the developers' and authors' protection, the GPL clearly explains 41921that there is no warranty for this free software. For both users' and 41922authors' sake, the GPL requires that modified versions be marked as 41923changed, so that their problems will not be attributed erroneously to 41924authors of previous versions. 41925 41926 Some devices are designed to deny users access to install or run 41927modified versions of the software inside them, although the 41928manufacturer can do so. This is fundamentally incompatible with the 41929aim of protecting users' freedom to change the software. The 41930systematic pattern of such abuse occurs in the area of products for 41931individuals to use, which is precisely where it is most unacceptable. 41932Therefore, we have designed this version of the GPL to prohibit the 41933practice for those products. If such problems arise substantially in 41934other domains, we stand ready to extend this provision to those domains 41935in future versions of the GPL, as needed to protect the freedom of 41936users. 41937 41938 Finally, every program is threatened constantly by software patents. 41939States should not allow patents to restrict development and use of 41940software on general-purpose computers, but in those that do, we wish to 41941avoid the special danger that patents applied to a free program could 41942make it effectively proprietary. To prevent this, the GPL assures that 41943patents cannot be used to render the program non-free. 41944 41945 The precise terms and conditions for copying, distribution and 41946modification follow. 41947 41948TERMS AND CONDITIONS 41949==================== 41950 41951 0. Definitions. 41952 41953 "This License" refers to version 3 of the GNU General Public 41954 License. 41955 41956 "Copyright" also means copyright-like laws that apply to other 41957 kinds of works, such as semiconductor masks. 41958 41959 "The Program" refers to any copyrightable work licensed under this 41960 License. Each licensee is addressed as "you". "Licensees" and 41961 "recipients" may be individuals or organizations. 41962 41963 To "modify" a work means to copy from or adapt all or part of the 41964 work in a fashion requiring copyright permission, other than the 41965 making of an exact copy. The resulting work is called a "modified 41966 version" of the earlier work or a work "based on" the earlier work. 41967 41968 A "covered work" means either the unmodified Program or a work 41969 based on the Program. 41970 41971 To "propagate" a work means to do anything with it that, without 41972 permission, would make you directly or secondarily liable for 41973 infringement under applicable copyright law, except executing it 41974 on a computer or modifying a private copy. Propagation includes 41975 copying, distribution (with or without modification), making 41976 available to the public, and in some countries other activities as 41977 well. 41978 41979 To "convey" a work means any kind of propagation that enables other 41980 parties to make or receive copies. Mere interaction with a user 41981 through a computer network, with no transfer of a copy, is not 41982 conveying. 41983 41984 An interactive user interface displays "Appropriate Legal Notices" 41985 to the extent that it includes a convenient and prominently visible 41986 feature that (1) displays an appropriate copyright notice, and (2) 41987 tells the user that there is no warranty for the work (except to 41988 the extent that warranties are provided), that licensees may 41989 convey the work under this License, and how to view a copy of this 41990 License. If the interface presents a list of user commands or 41991 options, such as a menu, a prominent item in the list meets this 41992 criterion. 41993 41994 1. Source Code. 41995 41996 The "source code" for a work means the preferred form of the work 41997 for making modifications to it. "Object code" means any 41998 non-source form of a work. 41999 42000 A "Standard Interface" means an interface that either is an 42001 official standard defined by a recognized standards body, or, in 42002 the case of interfaces specified for a particular programming 42003 language, one that is widely used among developers working in that 42004 language. 42005 42006 The "System Libraries" of an executable work include anything, 42007 other than the work as a whole, that (a) is included in the normal 42008 form of packaging a Major Component, but which is not part of that 42009 Major Component, and (b) serves only to enable use of the work 42010 with that Major Component, or to implement a Standard Interface 42011 for which an implementation is available to the public in source 42012 code form. A "Major Component", in this context, means a major 42013 essential component (kernel, window system, and so on) of the 42014 specific operating system (if any) on which the executable work 42015 runs, or a compiler used to produce the work, or an object code 42016 interpreter used to run it. 42017 42018 The "Corresponding Source" for a work in object code form means all 42019 the source code needed to generate, install, and (for an executable 42020 work) run the object code and to modify the work, including 42021 scripts to control those activities. However, it does not include 42022 the work's System Libraries, or general-purpose tools or generally 42023 available free programs which are used unmodified in performing 42024 those activities but which are not part of the work. For example, 42025 Corresponding Source includes interface definition files 42026 associated with source files for the work, and the source code for 42027 shared libraries and dynamically linked subprograms that the work 42028 is specifically designed to require, such as by intimate data 42029 communication or control flow between those subprograms and other 42030 parts of the work. 42031 42032 The Corresponding Source need not include anything that users can 42033 regenerate automatically from other parts of the Corresponding 42034 Source. 42035 42036 The Corresponding Source for a work in source code form is that 42037 same work. 42038 42039 2. Basic Permissions. 42040 42041 All rights granted under this License are granted for the term of 42042 copyright on the Program, and are irrevocable provided the stated 42043 conditions are met. This License explicitly affirms your unlimited 42044 permission to run the unmodified Program. The output from running 42045 a covered work is covered by this License only if the output, 42046 given its content, constitutes a covered work. This License 42047 acknowledges your rights of fair use or other equivalent, as 42048 provided by copyright law. 42049 42050 You may make, run and propagate covered works that you do not 42051 convey, without conditions so long as your license otherwise 42052 remains in force. You may convey covered works to others for the 42053 sole purpose of having them make modifications exclusively for 42054 you, or provide you with facilities for running those works, 42055 provided that you comply with the terms of this License in 42056 conveying all material for which you do not control copyright. 42057 Those thus making or running the covered works for you must do so 42058 exclusively on your behalf, under your direction and control, on 42059 terms that prohibit them from making any copies of your 42060 copyrighted material outside their relationship with you. 42061 42062 Conveying under any other circumstances is permitted solely under 42063 the conditions stated below. Sublicensing is not allowed; section 42064 10 makes it unnecessary. 42065 42066 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 42067 42068 No covered work shall be deemed part of an effective technological 42069 measure under any applicable law fulfilling obligations under 42070 article 11 of the WIPO copyright treaty adopted on 20 December 42071 1996, or similar laws prohibiting or restricting circumvention of 42072 such measures. 42073 42074 When you convey a covered work, you waive any legal power to forbid 42075 circumvention of technological measures to the extent such 42076 circumvention is effected by exercising rights under this License 42077 with respect to the covered work, and you disclaim any intention 42078 to limit operation or modification of the work as a means of 42079 enforcing, against the work's users, your or third parties' legal 42080 rights to forbid circumvention of technological measures. 42081 42082 4. Conveying Verbatim Copies. 42083 42084 You may convey verbatim copies of the Program's source code as you 42085 receive it, in any medium, provided that you conspicuously and 42086 appropriately publish on each copy an appropriate copyright notice; 42087 keep intact all notices stating that this License and any 42088 non-permissive terms added in accord with section 7 apply to the 42089 code; keep intact all notices of the absence of any warranty; and 42090 give all recipients a copy of this License along with the Program. 42091 42092 You may charge any price or no price for each copy that you convey, 42093 and you may offer support or warranty protection for a fee. 42094 42095 5. Conveying Modified Source Versions. 42096 42097 You may convey a work based on the Program, or the modifications to 42098 produce it from the Program, in the form of source code under the 42099 terms of section 4, provided that you also meet all of these 42100 conditions: 42101 42102 a. The work must carry prominent notices stating that you 42103 modified it, and giving a relevant date. 42104 42105 b. The work must carry prominent notices stating that it is 42106 released under this License and any conditions added under 42107 section 7. This requirement modifies the requirement in 42108 section 4 to "keep intact all notices". 42109 42110 c. You must license the entire work, as a whole, under this 42111 License to anyone who comes into possession of a copy. This 42112 License will therefore apply, along with any applicable 42113 section 7 additional terms, to the whole of the work, and all 42114 its parts, regardless of how they are packaged. This License 42115 gives no permission to license the work in any other way, but 42116 it does not invalidate such permission if you have separately 42117 received it. 42118 42119 d. If the work has interactive user interfaces, each must display 42120 Appropriate Legal Notices; however, if the Program has 42121 interactive interfaces that do not display Appropriate Legal 42122 Notices, your work need not make them do so. 42123 42124 A compilation of a covered work with other separate and independent 42125 works, which are not by their nature extensions of the covered 42126 work, and which are not combined with it such as to form a larger 42127 program, in or on a volume of a storage or distribution medium, is 42128 called an "aggregate" if the compilation and its resulting 42129 copyright are not used to limit the access or legal rights of the 42130 compilation's users beyond what the individual works permit. 42131 Inclusion of a covered work in an aggregate does not cause this 42132 License to apply to the other parts of the aggregate. 42133 42134 6. Conveying Non-Source Forms. 42135 42136 You may convey a covered work in object code form under the terms 42137 of sections 4 and 5, provided that you also convey the 42138 machine-readable Corresponding Source under the terms of this 42139 License, in one of these ways: 42140 42141 a. Convey the object code in, or embodied in, a physical product 42142 (including a physical distribution medium), accompanied by the 42143 Corresponding Source fixed on a durable physical medium 42144 customarily used for software interchange. 42145 42146 b. Convey the object code in, or embodied in, a physical product 42147 (including a physical distribution medium), accompanied by a 42148 written offer, valid for at least three years and valid for 42149 as long as you offer spare parts or customer support for that 42150 product model, to give anyone who possesses the object code 42151 either (1) a copy of the Corresponding Source for all the 42152 software in the product that is covered by this License, on a 42153 durable physical medium customarily used for software 42154 interchange, for a price no more than your reasonable cost of 42155 physically performing this conveying of source, or (2) access 42156 to copy the Corresponding Source from a network server at no 42157 charge. 42158 42159 c. Convey individual copies of the object code with a copy of 42160 the written offer to provide the Corresponding Source. This 42161 alternative is allowed only occasionally and noncommercially, 42162 and only if you received the object code with such an offer, 42163 in accord with subsection 6b. 42164 42165 d. Convey the object code by offering access from a designated 42166 place (gratis or for a charge), and offer equivalent access 42167 to the Corresponding Source in the same way through the same 42168 place at no further charge. You need not require recipients 42169 to copy the Corresponding Source along with the object code. 42170 If the place to copy the object code is a network server, the 42171 Corresponding Source may be on a different server (operated 42172 by you or a third party) that supports equivalent copying 42173 facilities, provided you maintain clear directions next to 42174 the object code saying where to find the Corresponding Source. 42175 Regardless of what server hosts the Corresponding Source, you 42176 remain obligated to ensure that it is available for as long 42177 as needed to satisfy these requirements. 42178 42179 e. Convey the object code using peer-to-peer transmission, 42180 provided you inform other peers where the object code and 42181 Corresponding Source of the work are being offered to the 42182 general public at no charge under subsection 6d. 42183 42184 42185 A separable portion of the object code, whose source code is 42186 excluded from the Corresponding Source as a System Library, need 42187 not be included in conveying the object code work. 42188 42189 A "User Product" is either (1) a "consumer product", which means 42190 any tangible personal property which is normally used for personal, 42191 family, or household purposes, or (2) anything designed or sold for 42192 incorporation into a dwelling. In determining whether a product 42193 is a consumer product, doubtful cases shall be resolved in favor of 42194 coverage. For a particular product received by a particular user, 42195 "normally used" refers to a typical or common use of that class of 42196 product, regardless of the status of the particular user or of the 42197 way in which the particular user actually uses, or expects or is 42198 expected to use, the product. A product is a consumer product 42199 regardless of whether the product has substantial commercial, 42200 industrial or non-consumer uses, unless such uses represent the 42201 only significant mode of use of the product. 42202 42203 "Installation Information" for a User Product means any methods, 42204 procedures, authorization keys, or other information required to 42205 install and execute modified versions of a covered work in that 42206 User Product from a modified version of its Corresponding Source. 42207 The information must suffice to ensure that the continued 42208 functioning of the modified object code is in no case prevented or 42209 interfered with solely because modification has been made. 42210 42211 If you convey an object code work under this section in, or with, 42212 or specifically for use in, a User Product, and the conveying 42213 occurs as part of a transaction in which the right of possession 42214 and use of the User Product is transferred to the recipient in 42215 perpetuity or for a fixed term (regardless of how the transaction 42216 is characterized), the Corresponding Source conveyed under this 42217 section must be accompanied by the Installation Information. But 42218 this requirement does not apply if neither you nor any third party 42219 retains the ability to install modified object code on the User 42220 Product (for example, the work has been installed in ROM). 42221 42222 The requirement to provide Installation Information does not 42223 include a requirement to continue to provide support service, 42224 warranty, or updates for a work that has been modified or 42225 installed by the recipient, or for the User Product in which it 42226 has been modified or installed. Access to a network may be denied 42227 when the modification itself materially and adversely affects the 42228 operation of the network or violates the rules and protocols for 42229 communication across the network. 42230 42231 Corresponding Source conveyed, and Installation Information 42232 provided, in accord with this section must be in a format that is 42233 publicly documented (and with an implementation available to the 42234 public in source code form), and must require no special password 42235 or key for unpacking, reading or copying. 42236 42237 7. Additional Terms. 42238 42239 "Additional permissions" are terms that supplement the terms of 42240 this License by making exceptions from one or more of its 42241 conditions. Additional permissions that are applicable to the 42242 entire Program shall be treated as though they were included in 42243 this License, to the extent that they are valid under applicable 42244 law. If additional permissions apply only to part of the Program, 42245 that part may be used separately under those permissions, but the 42246 entire Program remains governed by this License without regard to 42247 the additional permissions. 42248 42249 When you convey a copy of a covered work, you may at your option 42250 remove any additional permissions from that copy, or from any part 42251 of it. (Additional permissions may be written to require their own 42252 removal in certain cases when you modify the work.) You may place 42253 additional permissions on material, added by you to a covered work, 42254 for which you have or can give appropriate copyright permission. 42255 42256 Notwithstanding any other provision of this License, for material 42257 you add to a covered work, you may (if authorized by the copyright 42258 holders of that material) supplement the terms of this License 42259 with terms: 42260 42261 a. Disclaiming warranty or limiting liability differently from 42262 the terms of sections 15 and 16 of this License; or 42263 42264 b. Requiring preservation of specified reasonable legal notices 42265 or author attributions in that material or in the Appropriate 42266 Legal Notices displayed by works containing it; or 42267 42268 c. Prohibiting misrepresentation of the origin of that material, 42269 or requiring that modified versions of such material be 42270 marked in reasonable ways as different from the original 42271 version; or 42272 42273 d. Limiting the use for publicity purposes of names of licensors 42274 or authors of the material; or 42275 42276 e. Declining to grant rights under trademark law for use of some 42277 trade names, trademarks, or service marks; or 42278 42279 f. Requiring indemnification of licensors and authors of that 42280 material by anyone who conveys the material (or modified 42281 versions of it) with contractual assumptions of liability to 42282 the recipient, for any liability that these contractual 42283 assumptions directly impose on those licensors and authors. 42284 42285 All other non-permissive additional terms are considered "further 42286 restrictions" within the meaning of section 10. If the Program as 42287 you received it, or any part of it, contains a notice stating that 42288 it is governed by this License along with a term that is a further 42289 restriction, you may remove that term. If a license document 42290 contains a further restriction but permits relicensing or 42291 conveying under this License, you may add to a covered work 42292 material governed by the terms of that license document, provided 42293 that the further restriction does not survive such relicensing or 42294 conveying. 42295 42296 If you add terms to a covered work in accord with this section, you 42297 must place, in the relevant source files, a statement of the 42298 additional terms that apply to those files, or a notice indicating 42299 where to find the applicable terms. 42300 42301 Additional terms, permissive or non-permissive, may be stated in 42302 the form of a separately written license, or stated as exceptions; 42303 the above requirements apply either way. 42304 42305 8. Termination. 42306 42307 You may not propagate or modify a covered work except as expressly 42308 provided under this License. Any attempt otherwise to propagate or 42309 modify it is void, and will automatically terminate your rights 42310 under this License (including any patent licenses granted under 42311 the third paragraph of section 11). 42312 42313 However, if you cease all violation of this License, then your 42314 license from a particular copyright holder is reinstated (a) 42315 provisionally, unless and until the copyright holder explicitly 42316 and finally terminates your license, and (b) permanently, if the 42317 copyright holder fails to notify you of the violation by some 42318 reasonable means prior to 60 days after the cessation. 42319 42320 Moreover, your license from a particular copyright holder is 42321 reinstated permanently if the copyright holder notifies you of the 42322 violation by some reasonable means, this is the first time you have 42323 received notice of violation of this License (for any work) from 42324 that copyright holder, and you cure the violation prior to 30 days 42325 after your receipt of the notice. 42326 42327 Termination of your rights under this section does not terminate 42328 the licenses of parties who have received copies or rights from 42329 you under this License. If your rights have been terminated and 42330 not permanently reinstated, you do not qualify to receive new 42331 licenses for the same material under section 10. 42332 42333 9. Acceptance Not Required for Having Copies. 42334 42335 You are not required to accept this License in order to receive or 42336 run a copy of the Program. Ancillary propagation of a covered work 42337 occurring solely as a consequence of using peer-to-peer 42338 transmission to receive a copy likewise does not require 42339 acceptance. However, nothing other than this License grants you 42340 permission to propagate or modify any covered work. These actions 42341 infringe copyright if you do not accept this License. Therefore, 42342 by modifying or propagating a covered work, you indicate your 42343 acceptance of this License to do so. 42344 42345 10. Automatic Licensing of Downstream Recipients. 42346 42347 Each time you convey a covered work, the recipient automatically 42348 receives a license from the original licensors, to run, modify and 42349 propagate that work, subject to this License. You are not 42350 responsible for enforcing compliance by third parties with this 42351 License. 42352 42353 An "entity transaction" is a transaction transferring control of an 42354 organization, or substantially all assets of one, or subdividing an 42355 organization, or merging organizations. If propagation of a 42356 covered work results from an entity transaction, each party to that 42357 transaction who receives a copy of the work also receives whatever 42358 licenses to the work the party's predecessor in interest had or 42359 could give under the previous paragraph, plus a right to 42360 possession of the Corresponding Source of the work from the 42361 predecessor in interest, if the predecessor has it or can get it 42362 with reasonable efforts. 42363 42364 You may not impose any further restrictions on the exercise of the 42365 rights granted or affirmed under this License. For example, you 42366 may not impose a license fee, royalty, or other charge for 42367 exercise of rights granted under this License, and you may not 42368 initiate litigation (including a cross-claim or counterclaim in a 42369 lawsuit) alleging that any patent claim is infringed by making, 42370 using, selling, offering for sale, or importing the Program or any 42371 portion of it. 42372 42373 11. Patents. 42374 42375 A "contributor" is a copyright holder who authorizes use under this 42376 License of the Program or a work on which the Program is based. 42377 The work thus licensed is called the contributor's "contributor 42378 version". 42379 42380 A contributor's "essential patent claims" are all patent claims 42381 owned or controlled by the contributor, whether already acquired or 42382 hereafter acquired, that would be infringed by some manner, 42383 permitted by this License, of making, using, or selling its 42384 contributor version, but do not include claims that would be 42385 infringed only as a consequence of further modification of the 42386 contributor version. For purposes of this definition, "control" 42387 includes the right to grant patent sublicenses in a manner 42388 consistent with the requirements of this License. 42389 42390 Each contributor grants you a non-exclusive, worldwide, 42391 royalty-free patent license under the contributor's essential 42392 patent claims, to make, use, sell, offer for sale, import and 42393 otherwise run, modify and propagate the contents of its 42394 contributor version. 42395 42396 In the following three paragraphs, a "patent license" is any 42397 express agreement or commitment, however denominated, not to 42398 enforce a patent (such as an express permission to practice a 42399 patent or covenant not to sue for patent infringement). To 42400 "grant" such a patent license to a party means to make such an 42401 agreement or commitment not to enforce a patent against the party. 42402 42403 If you convey a covered work, knowingly relying on a patent 42404 license, and the Corresponding Source of the work is not available 42405 for anyone to copy, free of charge and under the terms of this 42406 License, through a publicly available network server or other 42407 readily accessible means, then you must either (1) cause the 42408 Corresponding Source to be so available, or (2) arrange to deprive 42409 yourself of the benefit of the patent license for this particular 42410 work, or (3) arrange, in a manner consistent with the requirements 42411 of this License, to extend the patent license to downstream 42412 recipients. "Knowingly relying" means you have actual knowledge 42413 that, but for the patent license, your conveying the covered work 42414 in a country, or your recipient's use of the covered work in a 42415 country, would infringe one or more identifiable patents in that 42416 country that you have reason to believe are valid. 42417 42418 If, pursuant to or in connection with a single transaction or 42419 arrangement, you convey, or propagate by procuring conveyance of, a 42420 covered work, and grant a patent license to some of the parties 42421 receiving the covered work authorizing them to use, propagate, 42422 modify or convey a specific copy of the covered work, then the 42423 patent license you grant is automatically extended to all 42424 recipients of the covered work and works based on it. 42425 42426 A patent license is "discriminatory" if it does not include within 42427 the scope of its coverage, prohibits the exercise of, or is 42428 conditioned on the non-exercise of one or more of the rights that 42429 are specifically granted under this License. You may not convey a 42430 covered work if you are a party to an arrangement with a third 42431 party that is in the business of distributing software, under 42432 which you make payment to the third party based on the extent of 42433 your activity of conveying the work, and under which the third 42434 party grants, to any of the parties who would receive the covered 42435 work from you, a discriminatory patent license (a) in connection 42436 with copies of the covered work conveyed by you (or copies made 42437 from those copies), or (b) primarily for and in connection with 42438 specific products or compilations that contain the covered work, 42439 unless you entered into that arrangement, or that patent license 42440 was granted, prior to 28 March 2007. 42441 42442 Nothing in this License shall be construed as excluding or limiting 42443 any implied license or other defenses to infringement that may 42444 otherwise be available to you under applicable patent law. 42445 42446 12. No Surrender of Others' Freedom. 42447 42448 If conditions are imposed on you (whether by court order, 42449 agreement or otherwise) that contradict the conditions of this 42450 License, they do not excuse you from the conditions of this 42451 License. If you cannot convey a covered work so as to satisfy 42452 simultaneously your obligations under this License and any other 42453 pertinent obligations, then as a consequence you may not convey it 42454 at all. For example, if you agree to terms that obligate you to 42455 collect a royalty for further conveying from those to whom you 42456 convey the Program, the only way you could satisfy both those 42457 terms and this License would be to refrain entirely from conveying 42458 the Program. 42459 42460 13. Use with the GNU Affero General Public License. 42461 42462 Notwithstanding any other provision of this License, you have 42463 permission to link or combine any covered work with a work licensed 42464 under version 3 of the GNU Affero General Public License into a 42465 single combined work, and to convey the resulting work. The terms 42466 of this License will continue to apply to the part which is the 42467 covered work, but the special requirements of the GNU Affero 42468 General Public License, section 13, concerning interaction through 42469 a network will apply to the combination as such. 42470 42471 14. Revised Versions of this License. 42472 42473 The Free Software Foundation may publish revised and/or new 42474 versions of the GNU General Public License from time to time. 42475 Such new versions will be similar in spirit to the present 42476 version, but may differ in detail to address new problems or 42477 concerns. 42478 42479 Each version is given a distinguishing version number. If the 42480 Program specifies that a certain numbered version of the GNU 42481 General Public License "or any later version" applies to it, you 42482 have the option of following the terms and conditions either of 42483 that numbered version or of any later version published by the 42484 Free Software Foundation. If the Program does not specify a 42485 version number of the GNU General Public License, you may choose 42486 any version ever published by the Free Software Foundation. 42487 42488 If the Program specifies that a proxy can decide which future 42489 versions of the GNU General Public License can be used, that 42490 proxy's public statement of acceptance of a version permanently 42491 authorizes you to choose that version for the Program. 42492 42493 Later license versions may give you additional or different 42494 permissions. However, no additional obligations are imposed on any 42495 author or copyright holder as a result of your choosing to follow a 42496 later version. 42497 42498 15. Disclaimer of Warranty. 42499 42500 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 42501 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 42502 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 42503 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 42504 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 42505 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 42506 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 42507 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 42508 NECESSARY SERVICING, REPAIR OR CORRECTION. 42509 42510 16. Limitation of Liability. 42511 42512 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 42513 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 42514 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 42515 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 42516 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 42517 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 42518 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 42519 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 42520 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 42521 THE POSSIBILITY OF SUCH DAMAGES. 42522 42523 17. Interpretation of Sections 15 and 16. 42524 42525 If the disclaimer of warranty and limitation of liability provided 42526 above cannot be given local legal effect according to their terms, 42527 reviewing courts shall apply local law that most closely 42528 approximates an absolute waiver of all civil liability in 42529 connection with the Program, unless a warranty or assumption of 42530 liability accompanies a copy of the Program in return for a fee. 42531 42532 42533END OF TERMS AND CONDITIONS 42534=========================== 42535 42536How to Apply These Terms to Your New Programs 42537============================================= 42538 42539If you develop a new program, and you want it to be of the greatest 42540possible use to the public, the best way to achieve this is to make it 42541free software which everyone can redistribute and change under these 42542terms. 42543 42544 To do so, attach the following notices to the program. It is safest 42545to attach them to the start of each source file to most effectively 42546state the exclusion of warranty; and each file should have at least the 42547"copyright" line and a pointer to where the full notice is found. 42548 42549 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 42550 Copyright (C) YEAR NAME OF AUTHOR 42551 42552 This program is free software: you can redistribute it and/or modify 42553 it under the terms of the GNU General Public License as published by 42554 the Free Software Foundation, either version 3 of the License, or (at 42555 your option) any later version. 42556 42557 This program is distributed in the hope that it will be useful, but 42558 WITHOUT ANY WARRANTY; without even the implied warranty of 42559 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 42560 General Public License for more details. 42561 42562 You should have received a copy of the GNU General Public License 42563 along with this program. If not, see `http://www.gnu.org/licenses/'. 42564 42565 Also add information on how to contact you by electronic and paper 42566mail. 42567 42568 If the program does terminal interaction, make it output a short 42569notice like this when it starts in an interactive mode: 42570 42571 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 42572 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 42573 This is free software, and you are welcome to redistribute it 42574 under certain conditions; type `show c' for details. 42575 42576 The hypothetical commands `show w' and `show c' should show the 42577appropriate parts of the General Public License. Of course, your 42578program's commands might be different; for a GUI interface, you would 42579use an "about box". 42580 42581 You should also get your employer (if you work as a programmer) or 42582school, if any, to sign a "copyright disclaimer" for the program, if 42583necessary. For more information on this, and how to apply and follow 42584the GNU GPL, see `http://www.gnu.org/licenses/'. 42585 42586 The GNU General Public License does not permit incorporating your 42587program into proprietary programs. If your program is a subroutine 42588library, you may consider it more useful to permit linking proprietary 42589applications with the library. If this is what you want to do, use the 42590GNU Lesser General Public License instead of this License. But first, 42591please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 42592 42593 42594File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 42595 42596GNU Free Documentation License 42597****************************** 42598 42599 Version 1.3, 3 November 2008 42600 42601 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 42602 `http://fsf.org/' 42603 42604 Everyone is permitted to copy and distribute verbatim copies 42605 of this license document, but changing it is not allowed. 42606 42607 0. PREAMBLE 42608 42609 The purpose of this License is to make a manual, textbook, or other 42610 functional and useful document "free" in the sense of freedom: to 42611 assure everyone the effective freedom to copy and redistribute it, 42612 with or without modifying it, either commercially or 42613 noncommercially. Secondarily, this License preserves for the 42614 author and publisher a way to get credit for their work, while not 42615 being considered responsible for modifications made by others. 42616 42617 This License is a kind of "copyleft", which means that derivative 42618 works of the document must themselves be free in the same sense. 42619 It complements the GNU General Public License, which is a copyleft 42620 license designed for free software. 42621 42622 We have designed this License in order to use it for manuals for 42623 free software, because free software needs free documentation: a 42624 free program should come with manuals providing the same freedoms 42625 that the software does. But this License is not limited to 42626 software manuals; it can be used for any textual work, regardless 42627 of subject matter or whether it is published as a printed book. 42628 We recommend this License principally for works whose purpose is 42629 instruction or reference. 42630 42631 1. APPLICABILITY AND DEFINITIONS 42632 42633 This License applies to any manual or other work, in any medium, 42634 that contains a notice placed by the copyright holder saying it 42635 can be distributed under the terms of this License. Such a notice 42636 grants a world-wide, royalty-free license, unlimited in duration, 42637 to use that work under the conditions stated herein. The 42638 "Document", below, refers to any such manual or work. Any member 42639 of the public is a licensee, and is addressed as "you". You 42640 accept the license if you copy, modify or distribute the work in a 42641 way requiring permission under copyright law. 42642 42643 A "Modified Version" of the Document means any work containing the 42644 Document or a portion of it, either copied verbatim, or with 42645 modifications and/or translated into another language. 42646 42647 A "Secondary Section" is a named appendix or a front-matter section 42648 of the Document that deals exclusively with the relationship of the 42649 publishers or authors of the Document to the Document's overall 42650 subject (or to related matters) and contains nothing that could 42651 fall directly within that overall subject. (Thus, if the Document 42652 is in part a textbook of mathematics, a Secondary Section may not 42653 explain any mathematics.) The relationship could be a matter of 42654 historical connection with the subject or with related matters, or 42655 of legal, commercial, philosophical, ethical or political position 42656 regarding them. 42657 42658 The "Invariant Sections" are certain Secondary Sections whose 42659 titles are designated, as being those of Invariant Sections, in 42660 the notice that says that the Document is released under this 42661 License. If a section does not fit the above definition of 42662 Secondary then it is not allowed to be designated as Invariant. 42663 The Document may contain zero Invariant Sections. If the Document 42664 does not identify any Invariant Sections then there are none. 42665 42666 The "Cover Texts" are certain short passages of text that are 42667 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 42668 that says that the Document is released under this License. A 42669 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 42670 be at most 25 words. 42671 42672 A "Transparent" copy of the Document means a machine-readable copy, 42673 represented in a format whose specification is available to the 42674 general public, that is suitable for revising the document 42675 straightforwardly with generic text editors or (for images 42676 composed of pixels) generic paint programs or (for drawings) some 42677 widely available drawing editor, and that is suitable for input to 42678 text formatters or for automatic translation to a variety of 42679 formats suitable for input to text formatters. A copy made in an 42680 otherwise Transparent file format whose markup, or absence of 42681 markup, has been arranged to thwart or discourage subsequent 42682 modification by readers is not Transparent. An image format is 42683 not Transparent if used for any substantial amount of text. A 42684 copy that is not "Transparent" is called "Opaque". 42685 42686 Examples of suitable formats for Transparent copies include plain 42687 ASCII without markup, Texinfo input format, LaTeX input format, 42688 SGML or XML using a publicly available DTD, and 42689 standard-conforming simple HTML, PostScript or PDF designed for 42690 human modification. Examples of transparent image formats include 42691 PNG, XCF and JPG. Opaque formats include proprietary formats that 42692 can be read and edited only by proprietary word processors, SGML or 42693 XML for which the DTD and/or processing tools are not generally 42694 available, and the machine-generated HTML, PostScript or PDF 42695 produced by some word processors for output purposes only. 42696 42697 The "Title Page" means, for a printed book, the title page itself, 42698 plus such following pages as are needed to hold, legibly, the 42699 material this License requires to appear in the title page. For 42700 works in formats which do not have any title page as such, "Title 42701 Page" means the text near the most prominent appearance of the 42702 work's title, preceding the beginning of the body of the text. 42703 42704 The "publisher" means any person or entity that distributes copies 42705 of the Document to the public. 42706 42707 A section "Entitled XYZ" means a named subunit of the Document 42708 whose title either is precisely XYZ or contains XYZ in parentheses 42709 following text that translates XYZ in another language. (Here XYZ 42710 stands for a specific section name mentioned below, such as 42711 "Acknowledgements", "Dedications", "Endorsements", or "History".) 42712 To "Preserve the Title" of such a section when you modify the 42713 Document means that it remains a section "Entitled XYZ" according 42714 to this definition. 42715 42716 The Document may include Warranty Disclaimers next to the notice 42717 which states that this License applies to the Document. These 42718 Warranty Disclaimers are considered to be included by reference in 42719 this License, but only as regards disclaiming warranties: any other 42720 implication that these Warranty Disclaimers may have is void and 42721 has no effect on the meaning of this License. 42722 42723 2. VERBATIM COPYING 42724 42725 You may copy and distribute the Document in any medium, either 42726 commercially or noncommercially, provided that this License, the 42727 copyright notices, and the license notice saying this License 42728 applies to the Document are reproduced in all copies, and that you 42729 add no other conditions whatsoever to those of this License. You 42730 may not use technical measures to obstruct or control the reading 42731 or further copying of the copies you make or distribute. However, 42732 you may accept compensation in exchange for copies. If you 42733 distribute a large enough number of copies you must also follow 42734 the conditions in section 3. 42735 42736 You may also lend copies, under the same conditions stated above, 42737 and you may publicly display copies. 42738 42739 3. COPYING IN QUANTITY 42740 42741 If you publish printed copies (or copies in media that commonly 42742 have printed covers) of the Document, numbering more than 100, and 42743 the Document's license notice requires Cover Texts, you must 42744 enclose the copies in covers that carry, clearly and legibly, all 42745 these Cover Texts: Front-Cover Texts on the front cover, and 42746 Back-Cover Texts on the back cover. Both covers must also clearly 42747 and legibly identify you as the publisher of these copies. The 42748 front cover must present the full title with all words of the 42749 title equally prominent and visible. You may add other material 42750 on the covers in addition. Copying with changes limited to the 42751 covers, as long as they preserve the title of the Document and 42752 satisfy these conditions, can be treated as verbatim copying in 42753 other respects. 42754 42755 If the required texts for either cover are too voluminous to fit 42756 legibly, you should put the first ones listed (as many as fit 42757 reasonably) on the actual cover, and continue the rest onto 42758 adjacent pages. 42759 42760 If you publish or distribute Opaque copies of the Document 42761 numbering more than 100, you must either include a 42762 machine-readable Transparent copy along with each Opaque copy, or 42763 state in or with each Opaque copy a computer-network location from 42764 which the general network-using public has access to download 42765 using public-standard network protocols a complete Transparent 42766 copy of the Document, free of added material. If you use the 42767 latter option, you must take reasonably prudent steps, when you 42768 begin distribution of Opaque copies in quantity, to ensure that 42769 this Transparent copy will remain thus accessible at the stated 42770 location until at least one year after the last time you 42771 distribute an Opaque copy (directly or through your agents or 42772 retailers) of that edition to the public. 42773 42774 It is requested, but not required, that you contact the authors of 42775 the Document well before redistributing any large number of 42776 copies, to give them a chance to provide you with an updated 42777 version of the Document. 42778 42779 4. MODIFICATIONS 42780 42781 You may copy and distribute a Modified Version of the Document 42782 under the conditions of sections 2 and 3 above, provided that you 42783 release the Modified Version under precisely this License, with 42784 the Modified Version filling the role of the Document, thus 42785 licensing distribution and modification of the Modified Version to 42786 whoever possesses a copy of it. In addition, you must do these 42787 things in the Modified Version: 42788 42789 A. Use in the Title Page (and on the covers, if any) a title 42790 distinct from that of the Document, and from those of 42791 previous versions (which should, if there were any, be listed 42792 in the History section of the Document). You may use the 42793 same title as a previous version if the original publisher of 42794 that version gives permission. 42795 42796 B. List on the Title Page, as authors, one or more persons or 42797 entities responsible for authorship of the modifications in 42798 the Modified Version, together with at least five of the 42799 principal authors of the Document (all of its principal 42800 authors, if it has fewer than five), unless they release you 42801 from this requirement. 42802 42803 C. State on the Title page the name of the publisher of the 42804 Modified Version, as the publisher. 42805 42806 D. Preserve all the copyright notices of the Document. 42807 42808 E. Add an appropriate copyright notice for your modifications 42809 adjacent to the other copyright notices. 42810 42811 F. Include, immediately after the copyright notices, a license 42812 notice giving the public permission to use the Modified 42813 Version under the terms of this License, in the form shown in 42814 the Addendum below. 42815 42816 G. Preserve in that license notice the full lists of Invariant 42817 Sections and required Cover Texts given in the Document's 42818 license notice. 42819 42820 H. Include an unaltered copy of this License. 42821 42822 I. Preserve the section Entitled "History", Preserve its Title, 42823 and add to it an item stating at least the title, year, new 42824 authors, and publisher of the Modified Version as given on 42825 the Title Page. If there is no section Entitled "History" in 42826 the Document, create one stating the title, year, authors, 42827 and publisher of the Document as given on its Title Page, 42828 then add an item describing the Modified Version as stated in 42829 the previous sentence. 42830 42831 J. Preserve the network location, if any, given in the Document 42832 for public access to a Transparent copy of the Document, and 42833 likewise the network locations given in the Document for 42834 previous versions it was based on. These may be placed in 42835 the "History" section. You may omit a network location for a 42836 work that was published at least four years before the 42837 Document itself, or if the original publisher of the version 42838 it refers to gives permission. 42839 42840 K. For any section Entitled "Acknowledgements" or "Dedications", 42841 Preserve the Title of the section, and preserve in the 42842 section all the substance and tone of each of the contributor 42843 acknowledgements and/or dedications given therein. 42844 42845 L. Preserve all the Invariant Sections of the Document, 42846 unaltered in their text and in their titles. Section numbers 42847 or the equivalent are not considered part of the section 42848 titles. 42849 42850 M. Delete any section Entitled "Endorsements". Such a section 42851 may not be included in the Modified Version. 42852 42853 N. Do not retitle any existing section to be Entitled 42854 "Endorsements" or to conflict in title with any Invariant 42855 Section. 42856 42857 O. Preserve any Warranty Disclaimers. 42858 42859 If the Modified Version includes new front-matter sections or 42860 appendices that qualify as Secondary Sections and contain no 42861 material copied from the Document, you may at your option 42862 designate some or all of these sections as invariant. To do this, 42863 add their titles to the list of Invariant Sections in the Modified 42864 Version's license notice. These titles must be distinct from any 42865 other section titles. 42866 42867 You may add a section Entitled "Endorsements", provided it contains 42868 nothing but endorsements of your Modified Version by various 42869 parties--for example, statements of peer review or that the text 42870 has been approved by an organization as the authoritative 42871 definition of a standard. 42872 42873 You may add a passage of up to five words as a Front-Cover Text, 42874 and a passage of up to 25 words as a Back-Cover Text, to the end 42875 of the list of Cover Texts in the Modified Version. Only one 42876 passage of Front-Cover Text and one of Back-Cover Text may be 42877 added by (or through arrangements made by) any one entity. If the 42878 Document already includes a cover text for the same cover, 42879 previously added by you or by arrangement made by the same entity 42880 you are acting on behalf of, you may not add another; but you may 42881 replace the old one, on explicit permission from the previous 42882 publisher that added the old one. 42883 42884 The author(s) and publisher(s) of the Document do not by this 42885 License give permission to use their names for publicity for or to 42886 assert or imply endorsement of any Modified Version. 42887 42888 5. COMBINING DOCUMENTS 42889 42890 You may combine the Document with other documents released under 42891 this License, under the terms defined in section 4 above for 42892 modified versions, provided that you include in the combination 42893 all of the Invariant Sections of all of the original documents, 42894 unmodified, and list them all as Invariant Sections of your 42895 combined work in its license notice, and that you preserve all 42896 their Warranty Disclaimers. 42897 42898 The combined work need only contain one copy of this License, and 42899 multiple identical Invariant Sections may be replaced with a single 42900 copy. If there are multiple Invariant Sections with the same name 42901 but different contents, make the title of each such section unique 42902 by adding at the end of it, in parentheses, the name of the 42903 original author or publisher of that section if known, or else a 42904 unique number. Make the same adjustment to the section titles in 42905 the list of Invariant Sections in the license notice of the 42906 combined work. 42907 42908 In the combination, you must combine any sections Entitled 42909 "History" in the various original documents, forming one section 42910 Entitled "History"; likewise combine any sections Entitled 42911 "Acknowledgements", and any sections Entitled "Dedications". You 42912 must delete all sections Entitled "Endorsements." 42913 42914 6. COLLECTIONS OF DOCUMENTS 42915 42916 You may make a collection consisting of the Document and other 42917 documents released under this License, and replace the individual 42918 copies of this License in the various documents with a single copy 42919 that is included in the collection, provided that you follow the 42920 rules of this License for verbatim copying of each of the 42921 documents in all other respects. 42922 42923 You may extract a single document from such a collection, and 42924 distribute it individually under this License, provided you insert 42925 a copy of this License into the extracted document, and follow 42926 this License in all other respects regarding verbatim copying of 42927 that document. 42928 42929 7. AGGREGATION WITH INDEPENDENT WORKS 42930 42931 A compilation of the Document or its derivatives with other 42932 separate and independent documents or works, in or on a volume of 42933 a storage or distribution medium, is called an "aggregate" if the 42934 copyright resulting from the compilation is not used to limit the 42935 legal rights of the compilation's users beyond what the individual 42936 works permit. When the Document is included in an aggregate, this 42937 License does not apply to the other works in the aggregate which 42938 are not themselves derivative works of the Document. 42939 42940 If the Cover Text requirement of section 3 is applicable to these 42941 copies of the Document, then if the Document is less than one half 42942 of the entire aggregate, the Document's Cover Texts may be placed 42943 on covers that bracket the Document within the aggregate, or the 42944 electronic equivalent of covers if the Document is in electronic 42945 form. Otherwise they must appear on printed covers that bracket 42946 the whole aggregate. 42947 42948 8. TRANSLATION 42949 42950 Translation is considered a kind of modification, so you may 42951 distribute translations of the Document under the terms of section 42952 4. Replacing Invariant Sections with translations requires special 42953 permission from their copyright holders, but you may include 42954 translations of some or all Invariant Sections in addition to the 42955 original versions of these Invariant Sections. You may include a 42956 translation of this License, and all the license notices in the 42957 Document, and any Warranty Disclaimers, provided that you also 42958 include the original English version of this License and the 42959 original versions of those notices and disclaimers. In case of a 42960 disagreement between the translation and the original version of 42961 this License or a notice or disclaimer, the original version will 42962 prevail. 42963 42964 If a section in the Document is Entitled "Acknowledgements", 42965 "Dedications", or "History", the requirement (section 4) to 42966 Preserve its Title (section 1) will typically require changing the 42967 actual title. 42968 42969 9. TERMINATION 42970 42971 You may not copy, modify, sublicense, or distribute the Document 42972 except as expressly provided under this License. Any attempt 42973 otherwise to copy, modify, sublicense, or distribute it is void, 42974 and will automatically terminate your rights under this License. 42975 42976 However, if you cease all violation of this License, then your 42977 license from a particular copyright holder is reinstated (a) 42978 provisionally, unless and until the copyright holder explicitly 42979 and finally terminates your license, and (b) permanently, if the 42980 copyright holder fails to notify you of the violation by some 42981 reasonable means prior to 60 days after the cessation. 42982 42983 Moreover, your license from a particular copyright holder is 42984 reinstated permanently if the copyright holder notifies you of the 42985 violation by some reasonable means, this is the first time you have 42986 received notice of violation of this License (for any work) from 42987 that copyright holder, and you cure the violation prior to 30 days 42988 after your receipt of the notice. 42989 42990 Termination of your rights under this section does not terminate 42991 the licenses of parties who have received copies or rights from 42992 you under this License. If your rights have been terminated and 42993 not permanently reinstated, receipt of a copy of some or all of 42994 the same material does not give you any rights to use it. 42995 42996 10. FUTURE REVISIONS OF THIS LICENSE 42997 42998 The Free Software Foundation may publish new, revised versions of 42999 the GNU Free Documentation License from time to time. Such new 43000 versions will be similar in spirit to the present version, but may 43001 differ in detail to address new problems or concerns. See 43002 `http://www.gnu.org/copyleft/'. 43003 43004 Each version of the License is given a distinguishing version 43005 number. If the Document specifies that a particular numbered 43006 version of this License "or any later version" applies to it, you 43007 have the option of following the terms and conditions either of 43008 that specified version or of any later version that has been 43009 published (not as a draft) by the Free Software Foundation. If 43010 the Document does not specify a version number of this License, 43011 you may choose any version ever published (not as a draft) by the 43012 Free Software Foundation. If the Document specifies that a proxy 43013 can decide which future versions of this License can be used, that 43014 proxy's public statement of acceptance of a version permanently 43015 authorizes you to choose that version for the Document. 43016 43017 11. RELICENSING 43018 43019 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 43020 World Wide Web server that publishes copyrightable works and also 43021 provides prominent facilities for anybody to edit those works. A 43022 public wiki that anybody can edit is an example of such a server. 43023 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 43024 site means any set of copyrightable works thus published on the MMC 43025 site. 43026 43027 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 43028 license published by Creative Commons Corporation, a not-for-profit 43029 corporation with a principal place of business in San Francisco, 43030 California, as well as future copyleft versions of that license 43031 published by that same organization. 43032 43033 "Incorporate" means to publish or republish a Document, in whole or 43034 in part, as part of another Document. 43035 43036 An MMC is "eligible for relicensing" if it is licensed under this 43037 License, and if all works that were first published under this 43038 License somewhere other than this MMC, and subsequently 43039 incorporated in whole or in part into the MMC, (1) had no cover 43040 texts or invariant sections, and (2) were thus incorporated prior 43041 to November 1, 2008. 43042 43043 The operator of an MMC Site may republish an MMC contained in the 43044 site under CC-BY-SA on the same site at any time before August 1, 43045 2009, provided the MMC is eligible for relicensing. 43046 43047 43048ADDENDUM: How to use this License for your documents 43049==================================================== 43050 43051To use this License in a document you have written, include a copy of 43052the License in the document and put the following copyright and license 43053notices just after the title page: 43054 43055 Copyright (C) YEAR YOUR NAME. 43056 Permission is granted to copy, distribute and/or modify this document 43057 under the terms of the GNU Free Documentation License, Version 1.3 43058 or any later version published by the Free Software Foundation; 43059 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 43060 Texts. A copy of the license is included in the section entitled ``GNU 43061 Free Documentation License''. 43062 43063 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 43064replace the "with...Texts." line with this: 43065 43066 with the Invariant Sections being LIST THEIR TITLES, with 43067 the Front-Cover Texts being LIST, and with the Back-Cover Texts 43068 being LIST. 43069 43070 If you have Invariant Sections without Cover Texts, or some other 43071combination of the three, merge those two alternatives to suit the 43072situation. 43073 43074 If your document contains nontrivial examples of program code, we 43075recommend releasing these examples in parallel under your choice of 43076free software license, such as the GNU General Public License, to 43077permit their use in free software. 43078 43079 43080File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 43081 43082Contributors to GCC 43083******************* 43084 43085The GCC project would like to thank its many contributors. Without 43086them the project would not have been nearly as successful as it has 43087been. Any omissions in this list are accidental. Feel free to contact 43088<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 43089some of your contributions are not listed. Please keep this list in 43090alphabetical order. 43091 43092 * Analog Devices helped implement the support for complex data types 43093 and iterators. 43094 43095 * John David Anglin for threading-related fixes and improvements to 43096 libstdc++-v3, and the HP-UX port. 43097 43098 * James van Artsdalen wrote the code that makes efficient use of the 43099 Intel 80387 register stack. 43100 43101 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 43102 Series port. 43103 43104 * Alasdair Baird for various bug fixes. 43105 43106 * Giovanni Bajo for analyzing lots of complicated C++ problem 43107 reports. 43108 43109 * Peter Barada for his work to improve code generation for new 43110 ColdFire cores. 43111 43112 * Gerald Baumgartner added the signature extension to the C++ front 43113 end. 43114 43115 * Godmar Back for his Java improvements and encouragement. 43116 43117 * Scott Bambrough for help porting the Java compiler. 43118 43119 * Wolfgang Bangerth for processing tons of bug reports. 43120 43121 * Jon Beniston for his Microsoft Windows port of Java and port to 43122 Lattice Mico32. 43123 43124 * Daniel Berlin for better DWARF2 support, faster/better 43125 optimizations, improved alias analysis, plus migrating GCC to 43126 Bugzilla. 43127 43128 * Geoff Berry for his Java object serialization work and various 43129 patches. 43130 43131 * Uros Bizjak for the implementation of x87 math built-in functions 43132 and for various middle end and i386 back end improvements and bug 43133 fixes. 43134 43135 * Eric Blake for helping to make GCJ and libgcj conform to the 43136 specifications. 43137 43138 * Janne Blomqvist for contributions to GNU Fortran. 43139 43140 * Segher Boessenkool for various fixes. 43141 43142 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 43143 other Java work. 43144 43145 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 43146 miscellaneous clean-ups. 43147 43148 * Steven Bosscher for integrating the GNU Fortran front end into GCC 43149 and for contributing to the tree-ssa branch. 43150 43151 * Eric Botcazou for fixing middle- and backend bugs left and right. 43152 43153 * Per Bothner for his direction via the steering committee and 43154 various improvements to the infrastructure for supporting new 43155 languages. Chill front end implementation. Initial 43156 implementations of cpplib, fix-header, config.guess, libio, and 43157 past C++ library (libg++) maintainer. Dreaming up, designing and 43158 implementing much of GCJ. 43159 43160 * Devon Bowen helped port GCC to the Tahoe. 43161 43162 * Don Bowman for mips-vxworks contributions. 43163 43164 * Dave Brolley for work on cpplib and Chill. 43165 43166 * Paul Brook for work on the ARM architecture and maintaining GNU 43167 Fortran. 43168 43169 * Robert Brown implemented the support for Encore 32000 systems. 43170 43171 * Christian Bruel for improvements to local store elimination. 43172 43173 * Herman A.J. ten Brugge for various fixes. 43174 43175 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 43176 FAQ. 43177 43178 * Joe Buck for his direction via the steering committee. 43179 43180 * Craig Burley for leadership of the G77 Fortran effort. 43181 43182 * Stephan Buys for contributing Doxygen notes for libstdc++. 43183 43184 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 43185 to the C++ strings, streambufs and formatted I/O, hard detective 43186 work on the frustrating localization issues, and keeping up with 43187 the problem reports. 43188 43189 * John Carr for his alias work, SPARC hacking, infrastructure 43190 improvements, previous contributions to the steering committee, 43191 loop optimizations, etc. 43192 43193 * Stephane Carrez for 68HC11 and 68HC12 ports. 43194 43195 * Steve Chamberlain for support for the Renesas SH and H8 processors 43196 and the PicoJava processor, and for GCJ config fixes. 43197 43198 * Glenn Chambers for help with the GCJ FAQ. 43199 43200 * John-Marc Chandonia for various libgcj patches. 43201 43202 * Denis Chertykov for contributing and maintaining the AVR port, the 43203 first GCC port for an 8-bit architecture. 43204 43205 * Scott Christley for his Objective-C contributions. 43206 43207 * Eric Christopher for his Java porting help and clean-ups. 43208 43209 * Branko Cibej for more warning contributions. 43210 43211 * The GNU Classpath project for all of their merged runtime code. 43212 43213 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help', 43214 and other random hacking. 43215 43216 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 43217 43218 * R. Kelley Cook for making GCC buildable from a read-only directory 43219 as well as other miscellaneous build process and documentation 43220 clean-ups. 43221 43222 * Ralf Corsepius for SH testing and minor bug fixing. 43223 43224 * Stan Cox for care and feeding of the x86 port and lots of behind 43225 the scenes hacking. 43226 43227 * Alex Crain provided changes for the 3b1. 43228 43229 * Ian Dall for major improvements to the NS32k port. 43230 43231 * Paul Dale for his work to add uClinux platform support to the m68k 43232 backend. 43233 43234 * Dario Dariol contributed the four varieties of sample programs 43235 that print a copy of their source. 43236 43237 * Russell Davidson for fstream and stringstream fixes in libstdc++. 43238 43239 * Bud Davis for work on the G77 and GNU Fortran compilers. 43240 43241 * Mo DeJong for GCJ and libgcj bug fixes. 43242 43243 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 43244 various bug fixes, and the M32C and MeP ports. 43245 43246 * Arnaud Desitter for helping to debug GNU Fortran. 43247 43248 * Gabriel Dos Reis for contributions to G++, contributions and 43249 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 43250 including `valarray<>', `complex<>', maintaining the numerics 43251 library (including that pesky `<limits>' :-) and keeping 43252 up-to-date anything to do with numbers. 43253 43254 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 43255 ISO C99 support, CFG dumping support, etc., plus support of the 43256 C++ runtime libraries including for all kinds of C interface 43257 issues, contributing and maintaining `complex<>', sanity checking 43258 and disbursement, configuration architecture, libio maintenance, 43259 and early math work. 43260 43261 * Zdenek Dvorak for a new loop unroller and various fixes. 43262 43263 * Michael Eager for his work on the Xilinx MicroBlaze port. 43264 43265 * Richard Earnshaw for his ongoing work with the ARM. 43266 43267 * David Edelsohn for his direction via the steering committee, 43268 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 43269 loop changes, doing the entire AIX port of libstdc++ with his bare 43270 hands, and for ensuring GCC properly keeps working on AIX. 43271 43272 * Kevin Ediger for the floating point formatting of num_put::do_put 43273 in libstdc++. 43274 43275 * Phil Edwards for libstdc++ work including configuration hackery, 43276 documentation maintainer, chief breaker of the web pages, the 43277 occasional iostream bug fix, and work on shared library symbol 43278 versioning. 43279 43280 * Paul Eggert for random hacking all over GCC. 43281 43282 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 43283 configuration support for locales and fstream-related fixes. 43284 43285 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 43286 iostreams. 43287 43288 * Christian Ehrhardt for dealing with bug reports. 43289 43290 * Ben Elliston for his work to move the Objective-C runtime into its 43291 own subdirectory and for his work on autoconf. 43292 43293 * Revital Eres for work on the PowerPC 750CL port. 43294 43295 * Marc Espie for OpenBSD support. 43296 43297 * Doug Evans for much of the global optimization framework, arc, 43298 m32r, and SPARC work. 43299 43300 * Christopher Faylor for his work on the Cygwin port and for caring 43301 and feeding the gcc.gnu.org box and saving its users tons of spam. 43302 43303 * Fred Fish for BeOS support and Ada fixes. 43304 43305 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 43306 43307 * Peter Gerwinski for various bug fixes and the Pascal front end. 43308 43309 * Kaveh R. Ghazi for his direction via the steering committee, 43310 amazing work to make `-W -Wall -W* -Werror' useful, and 43311 continuously testing GCC on a plethora of platforms. Kaveh 43312 extends his gratitude to the CAIP Center at Rutgers University for 43313 providing him with computing resources to work on Free Software 43314 since the late 1980s. 43315 43316 * John Gilmore for a donation to the FSF earmarked improving GNU 43317 Java. 43318 43319 * Judy Goldberg for c++ contributions. 43320 43321 * Torbjorn Granlund for various fixes and the c-torture testsuite, 43322 multiply- and divide-by-constant optimization, improved long long 43323 support, improved leaf function register allocation, and his 43324 direction via the steering committee. 43325 43326 * Anthony Green for his `-Os' contributions, the moxie port, and 43327 Java front end work. 43328 43329 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 43330 Java code. 43331 43332 * Michael K. Gschwind contributed the port to the PDP-11. 43333 43334 * Richard Guenther for his ongoing middle-end contributions and bug 43335 fixes and for release management. 43336 43337 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 43338 the support for Dwarf symbolic debugging information, and much of 43339 the support for System V Release 4. He has also worked heavily on 43340 the Intel 386 and 860 support. 43341 43342 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 43343 GCSE. 43344 43345 * Bruno Haible for improvements in the runtime overhead for EH, new 43346 warnings and assorted bug fixes. 43347 43348 * Andrew Haley for his amazing Java compiler and library efforts. 43349 43350 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 43351 series 300. 43352 43353 * Michael Hayes for various thankless work he's done trying to get 43354 the c30/c40 ports functional. Lots of loop and unroll 43355 improvements and fixes. 43356 43357 * Dara Hazeghi for wading through myriads of target-specific bug 43358 reports. 43359 43360 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 43361 43362 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 43363 work, loop opts, and generally fixing lots of old problems we've 43364 ignored for years, flow rewrite and lots of further stuff, 43365 including reviewing tons of patches. 43366 43367 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 43368 various fixes. 43369 43370 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 43371 contributed the support for the Sony NEWS machine. 43372 43373 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 43374 various fixes. 43375 43376 * Katherine Holcomb for work on GNU Fortran. 43377 43378 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 43379 of testing and bug fixing, particularly of GCC configury code. 43380 43381 * Steve Holmgren for MachTen patches. 43382 43383 * Jan Hubicka for his x86 port improvements. 43384 43385 * Falk Hueffner for working on C and optimization bug reports. 43386 43387 * Bernardo Innocenti for his m68k work, including merging of 43388 ColdFire improvements and uClinux support. 43389 43390 * Christian Iseli for various bug fixes. 43391 43392 * Kamil Iskra for general m68k hacking. 43393 43394 * Lee Iverson for random fixes and MIPS testing. 43395 43396 * Andreas Jaeger for testing and benchmarking of GCC and various bug 43397 fixes. 43398 43399 * Jakub Jelinek for his SPARC work and sibling call optimizations as 43400 well as lots of bug fixes and test cases, and for improving the 43401 Java build system. 43402 43403 * Janis Johnson for ia64 testing and fixes, her quality improvement 43404 sidetracks, and web page maintenance. 43405 43406 * Kean Johnston for SCO OpenServer support and various fixes. 43407 43408 * Tim Josling for the sample language treelang based originally on 43409 Richard Kenner's "toy" language. 43410 43411 * Nicolai Josuttis for additional libstdc++ documentation. 43412 43413 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 43414 target. 43415 43416 * Steven G. Kargl for work on GNU Fortran. 43417 43418 * David Kashtan of SRI adapted GCC to VMS. 43419 43420 * Ryszard Kabatek for many, many libstdc++ bug fixes and 43421 optimizations of strings, especially member functions, and for 43422 auto_ptr fixes. 43423 43424 * Geoffrey Keating for his ongoing work to make the PPC work for 43425 GNU/Linux and his automatic regression tester. 43426 43427 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 43428 work in just about every part of libstdc++. 43429 43430 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 43431 MIL-STD-1750A. 43432 43433 * Richard Kenner of the New York University Ultracomputer Research 43434 Laboratory wrote the machine descriptions for the AMD 29000, the 43435 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 43436 support for instruction attributes. He also made changes to 43437 better support RISC processors including changes to common 43438 subexpression elimination, strength reduction, function calling 43439 sequence handling, and condition code support, in addition to 43440 generalizing the code for frame pointer elimination and delay slot 43441 scheduling. Richard Kenner was also the head maintainer of GCC 43442 for several years. 43443 43444 * Mumit Khan for various contributions to the Cygwin and Mingw32 43445 ports and maintaining binary releases for Microsoft Windows hosts, 43446 and for massive libstdc++ porting work to Cygwin/Mingw32. 43447 43448 * Robin Kirkham for cpu32 support. 43449 43450 * Mark Klein for PA improvements. 43451 43452 * Thomas Koenig for various bug fixes. 43453 43454 * Bruce Korb for the new and improved fixincludes code. 43455 43456 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 43457 effort. 43458 43459 * Charles LaBrec contributed the support for the Integrated Solutions 43460 68020 system. 43461 43462 * Asher Langton and Mike Kumbera for contributing Cray pointer 43463 support to GNU Fortran, and for other GNU Fortran improvements. 43464 43465 * Jeff Law for his direction via the steering committee, 43466 coordinating the entire egcs project and GCC 2.95, rolling out 43467 snapshots and releases, handling merges from GCC2, reviewing tons 43468 of patches that might have fallen through the cracks else, and 43469 random but extensive hacking. 43470 43471 * Marc Lehmann for his direction via the steering committee and 43472 helping with analysis and improvements of x86 performance. 43473 43474 * Victor Leikehman for work on GNU Fortran. 43475 43476 * Ted Lemon wrote parts of the RTL reader and printer. 43477 43478 * Kriang Lerdsuwanakij for C++ improvements including template as 43479 template parameter support, and many C++ fixes. 43480 43481 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 43482 and random work on the Java front end. 43483 43484 * Alain Lichnewsky ported GCC to the MIPS CPU. 43485 43486 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 43487 and patches. 43488 43489 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 43490 43491 * Chen Liqin for various S+core related fixes/improvement, and for 43492 maintaining the S+core port. 43493 43494 * Weiwen Liu for testing and various bug fixes. 43495 43496 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 43497 diagnostics fixes and improvements. 43498 43499 * Dave Love for his ongoing work with the Fortran front end and 43500 runtime libraries. 43501 43502 * Martin von Lo"wis for internal consistency checking infrastructure, 43503 various C++ improvements including namespace support, and tons of 43504 assistance with libstdc++/compiler merges. 43505 43506 * H.J. Lu for his previous contributions to the steering committee, 43507 many x86 bug reports, prototype patches, and keeping the GNU/Linux 43508 ports working. 43509 43510 * Greg McGary for random fixes and (someday) bounded pointers. 43511 43512 * Andrew MacLeod for his ongoing work in building a real EH system, 43513 various code generation improvements, work on the global 43514 optimizer, etc. 43515 43516 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 43517 hacking improvements to compile-time performance, overall 43518 knowledge and direction in the area of instruction scheduling, and 43519 design and implementation of the automaton based instruction 43520 scheduler. 43521 43522 * Bob Manson for his behind the scenes work on dejagnu. 43523 43524 * Philip Martin for lots of libstdc++ string and vector iterator 43525 fixes and improvements, and string clean up and testsuites. 43526 43527 * All of the Mauve project contributors, for Java test code. 43528 43529 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 43530 43531 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 43532 43533 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 43534 powerpc, haifa, ECOFF debug support, and other assorted hacking. 43535 43536 * Jason Merrill for his direction via the steering committee and 43537 leading the G++ effort. 43538 43539 * Martin Michlmayr for testing GCC on several architectures using the 43540 entire Debian archive. 43541 43542 * David Miller for his direction via the steering committee, lots of 43543 SPARC work, improvements in jump.c and interfacing with the Linux 43544 kernel developers. 43545 43546 * Gary Miller ported GCC to Charles River Data Systems machines. 43547 43548 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 43549 the entire libstdc++ testsuite namespace-compatible. 43550 43551 * Mark Mitchell for his direction via the steering committee, 43552 mountains of C++ work, load/store hoisting out of loops, alias 43553 analysis improvements, ISO C `restrict' support, and serving as 43554 release manager for GCC 3.x. 43555 43556 * Alan Modra for various GNU/Linux bits and testing. 43557 43558 * Toon Moene for his direction via the steering committee, Fortran 43559 maintenance, and his ongoing work to make us make Fortran run fast. 43560 43561 * Jason Molenda for major help in the care and feeding of all the 43562 services on the gcc.gnu.org (formerly egcs.cygnus.com) 43563 machine--mail, web services, ftp services, etc etc. Doing all 43564 this work on scrap paper and the backs of envelopes would have 43565 been... difficult. 43566 43567 * Catherine Moore for fixing various ugly problems we have sent her 43568 way, including the haifa bug which was killing the Alpha & PowerPC 43569 Linux kernels. 43570 43571 * Mike Moreton for his various Java patches. 43572 43573 * David Mosberger-Tang for various Alpha improvements, and for the 43574 initial IA-64 port. 43575 43576 * Stephen Moshier contributed the floating point emulator that 43577 assists in cross-compilation and permits support for floating 43578 point numbers wider than 64 bits and for ISO C99 support. 43579 43580 * Bill Moyer for his behind the scenes work on various issues. 43581 43582 * Philippe De Muyter for his work on the m68k port. 43583 43584 * Joseph S. Myers for his work on the PDP-11 port, format checking 43585 and ISO C99 support, and continuous emphasis on (and contributions 43586 to) documentation. 43587 43588 * Nathan Myers for his work on libstdc++-v3: architecture and 43589 authorship through the first three snapshots, including 43590 implementation of locale infrastructure, string, shadow C headers, 43591 and the initial project documentation (DESIGN, CHECKLIST, and so 43592 forth). Later, more work on MT-safe string and shadow headers. 43593 43594 * Felix Natter for documentation on porting libstdc++. 43595 43596 * Nathanael Nerode for cleaning up the configuration/build process. 43597 43598 * NeXT, Inc. donated the front end that supports the Objective-C 43599 language. 43600 43601 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 43602 the search engine setup, various documentation fixes and other 43603 small fixes. 43604 43605 * Geoff Noer for his work on getting cygwin native builds working. 43606 43607 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 43608 tracking web pages, GIMPLE tuples, and assorted fixes. 43609 43610 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 43611 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 43612 related infrastructure improvements. 43613 43614 * Alexandre Oliva for various build infrastructure improvements, 43615 scripts and amazing testing work, including keeping libtool issues 43616 sane and happy. 43617 43618 * Stefan Olsson for work on mt_alloc. 43619 43620 * Melissa O'Neill for various NeXT fixes. 43621 43622 * Rainer Orth for random MIPS work, including improvements to GCC's 43623 o32 ABI support, improvements to dejagnu's MIPS support, Java 43624 configuration clean-ups and porting work, and maintaining the 43625 IRIX, Solaris 2, and Tru64 UNIX ports. 43626 43627 * Hartmut Penner for work on the s390 port. 43628 43629 * Paul Petersen wrote the machine description for the Alliant FX/8. 43630 43631 * Alexandre Petit-Bianco for implementing much of the Java compiler 43632 and continued Java maintainership. 43633 43634 * Matthias Pfaller for major improvements to the NS32k port. 43635 43636 * Gerald Pfeifer for his direction via the steering committee, 43637 pointing out lots of problems we need to solve, maintenance of the 43638 web pages, and taking care of documentation maintenance in general. 43639 43640 * Andrew Pinski for processing bug reports by the dozen. 43641 43642 * Ovidiu Predescu for his work on the Objective-C front end and 43643 runtime libraries. 43644 43645 * Jerry Quinn for major performance improvements in C++ formatted 43646 I/O. 43647 43648 * Ken Raeburn for various improvements to checker, MIPS ports and 43649 various cleanups in the compiler. 43650 43651 * Rolf W. Rasmussen for hacking on AWT. 43652 43653 * David Reese of Sun Microsystems contributed to the Solaris on 43654 PowerPC port. 43655 43656 * Volker Reichelt for keeping up with the problem reports. 43657 43658 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 43659 hacking. 43660 43661 * Loren J. Rittle for improvements to libstdc++-v3 including the 43662 FreeBSD port, threading fixes, thread-related configury changes, 43663 critical threading documentation, and solutions to really tricky 43664 I/O problems, as well as keeping GCC properly working on FreeBSD 43665 and continuous testing. 43666 43667 * Craig Rodrigues for processing tons of bug reports. 43668 43669 * Ola Ro"nnerup for work on mt_alloc. 43670 43671 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 43672 43673 * David Ronis inspired and encouraged Craig to rewrite the G77 43674 documentation in texinfo format by contributing a first pass at a 43675 translation of the old `g77-0.5.16/f/DOC' file. 43676 43677 * Ken Rose for fixes to GCC's delay slot filling code. 43678 43679 * Paul Rubin wrote most of the preprocessor. 43680 43681 * Pe'tur Runo'lfsson for major performance improvements in C++ 43682 formatted I/O and large file support in C++ filebuf. 43683 43684 * Chip Salzenberg for libstdc++ patches and improvements to locales, 43685 traits, Makefiles, libio, libtool hackery, and "long long" support. 43686 43687 * Juha Sarlin for improvements to the H8 code generator. 43688 43689 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 43690 300. 43691 43692 * Roger Sayle for improvements to constant folding and GCC's RTL 43693 optimizers as well as for fixing numerous bugs. 43694 43695 * Bradley Schatz for his work on the GCJ FAQ. 43696 43697 * Peter Schauer wrote the code to allow debugging to work on the 43698 Alpha. 43699 43700 * William Schelter did most of the work on the Intel 80386 support. 43701 43702 * Tobias Schlu"ter for work on GNU Fortran. 43703 43704 * Bernd Schmidt for various code generation improvements and major 43705 work in the reload pass as well a serving as release manager for 43706 GCC 2.95.3. 43707 43708 * Peter Schmid for constant testing of libstdc++--especially 43709 application testing, going above and beyond what was requested for 43710 the release criteria--and libstdc++ header file tweaks. 43711 43712 * Jason Schroeder for jcf-dump patches. 43713 43714 * Andreas Schwab for his work on the m68k port. 43715 43716 * Lars Segerlund for work on GNU Fortran. 43717 43718 * Dodji Seketeli for numerous C++ bug fixes and debug info 43719 improvements. 43720 43721 * Joel Sherrill for his direction via the steering committee, RTEMS 43722 contributions and RTEMS testing. 43723 43724 * Nathan Sidwell for many C++ fixes/improvements. 43725 43726 * Jeffrey Siegal for helping RMS with the original design of GCC, 43727 some code which handles the parse tree and RTL data structures, 43728 constant folding and help with the original VAX & m68k ports. 43729 43730 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 43731 from the LWG (thereby keeping GCC in line with updates from the 43732 ISO). 43733 43734 * Franz Sirl for his ongoing work with making the PPC port stable 43735 for GNU/Linux. 43736 43737 * Andrey Slepuhin for assorted AIX hacking. 43738 43739 * Trevor Smigiel for contributing the SPU port. 43740 43741 * Christopher Smith did the port for Convex machines. 43742 43743 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 43744 43745 * Randy Smith finished the Sun FPA support. 43746 43747 * Scott Snyder for queue, iterator, istream, and string fixes and 43748 libstdc++ testsuite entries. Also for providing the patch to G77 43749 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 43750 `LOGICAL*1'. 43751 43752 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 43753 43754 * Richard Stallman, for writing the original GCC and launching the 43755 GNU project. 43756 43757 * Jan Stein of the Chalmers Computer Society provided support for 43758 Genix, as well as part of the 32000 machine description. 43759 43760 * Nigel Stephens for various mips16 related fixes/improvements. 43761 43762 * Jonathan Stone wrote the machine description for the Pyramid 43763 computer. 43764 43765 * Graham Stott for various infrastructure improvements. 43766 43767 * John Stracke for his Java HTTP protocol fixes. 43768 43769 * Mike Stump for his Elxsi port, G++ contributions over the years 43770 and more recently his vxworks contributions 43771 43772 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 43773 43774 * Shigeya Suzuki for this fixes for the bsdi platforms. 43775 43776 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 43777 support, general configury hacking, fixincludes, etc. 43778 43779 * Holger Teutsch provided the support for the Clipper CPU. 43780 43781 * Gary Thomas for his ongoing work to make the PPC work for 43782 GNU/Linux. 43783 43784 * Philipp Thomas for random bug fixes throughout the compiler 43785 43786 * Jason Thorpe for thread support in libstdc++ on NetBSD. 43787 43788 * Kresten Krab Thorup wrote the run time support for the Objective-C 43789 language and the fantastic Java bytecode interpreter. 43790 43791 * Michael Tiemann for random bug fixes, the first instruction 43792 scheduler, initial C++ support, function integration, NS32k, SPARC 43793 and M88k machine description work, delay slot scheduling. 43794 43795 * Andreas Tobler for his work porting libgcj to Darwin. 43796 43797 * Teemu Torma for thread safe exception handling support. 43798 43799 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 43800 definitions, and of the VAX machine description. 43801 43802 * Daniel Towner and Hariharan Sandanagobalane contributed and 43803 maintain the picoChip port. 43804 43805 * Tom Tromey for internationalization support and for his many Java 43806 contributions and libgcj maintainership. 43807 43808 * Lassi Tuura for improvements to config.guess to determine HP 43809 processor types. 43810 43811 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 43812 43813 * Andy Vaught for the design and initial implementation of the GNU 43814 Fortran front end. 43815 43816 * Brent Verner for work with the libstdc++ cshadow files and their 43817 associated configure steps. 43818 43819 * Todd Vierling for contributions for NetBSD ports. 43820 43821 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 43822 guidance. 43823 43824 * Dean Wakerley for converting the install documentation from HTML 43825 to texinfo in time for GCC 3.0. 43826 43827 * Krister Walfridsson for random bug fixes. 43828 43829 * Feng Wang for contributions to GNU Fortran. 43830 43831 * Stephen M. Webb for time and effort on making libstdc++ shadow 43832 files work with the tricky Solaris 8+ headers, and for pushing the 43833 build-time header tree. 43834 43835 * John Wehle for various improvements for the x86 code generator, 43836 related infrastructure improvements to help x86 code generation, 43837 value range propagation and other work, WE32k port. 43838 43839 * Ulrich Weigand for work on the s390 port. 43840 43841 * Zack Weinberg for major work on cpplib and various other bug fixes. 43842 43843 * Matt Welsh for help with Linux Threads support in GCJ. 43844 43845 * Urban Widmark for help fixing java.io. 43846 43847 * Mark Wielaard for new Java library code and his work integrating 43848 with Classpath. 43849 43850 * Dale Wiles helped port GCC to the Tahoe. 43851 43852 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 43853 43854 * Jim Wilson for his direction via the steering committee, tackling 43855 hard problems in various places that nobody else wanted to work 43856 on, strength reduction and other loop optimizations. 43857 43858 * Paul Woegerer and Tal Agmon for the CRX port. 43859 43860 * Carlo Wood for various fixes. 43861 43862 * Tom Wood for work on the m88k port. 43863 43864 * Canqun Yang for work on GNU Fortran. 43865 43866 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 43867 description for the Tron architecture (specifically, the Gmicro). 43868 43869 * Kevin Zachmann helped port GCC to the Tahoe. 43870 43871 * Ayal Zaks for Swing Modulo Scheduling (SMS). 43872 43873 * Xiaoqiang Zhang for work on GNU Fortran. 43874 43875 * Gilles Zunino for help porting Java to Irix. 43876 43877 43878 The following people are recognized for their contributions to GNAT, 43879the Ada front end of GCC: 43880 * Bernard Banner 43881 43882 * Romain Berrendonner 43883 43884 * Geert Bosch 43885 43886 * Emmanuel Briot 43887 43888 * Joel Brobecker 43889 43890 * Ben Brosgol 43891 43892 * Vincent Celier 43893 43894 * Arnaud Charlet 43895 43896 * Chien Chieng 43897 43898 * Cyrille Comar 43899 43900 * Cyrille Crozes 43901 43902 * Robert Dewar 43903 43904 * Gary Dismukes 43905 43906 * Robert Duff 43907 43908 * Ed Falis 43909 43910 * Ramon Fernandez 43911 43912 * Sam Figueroa 43913 43914 * Vasiliy Fofanov 43915 43916 * Michael Friess 43917 43918 * Franco Gasperoni 43919 43920 * Ted Giering 43921 43922 * Matthew Gingell 43923 43924 * Laurent Guerby 43925 43926 * Jerome Guitton 43927 43928 * Olivier Hainque 43929 43930 * Jerome Hugues 43931 43932 * Hristian Kirtchev 43933 43934 * Jerome Lambourg 43935 43936 * Bruno Leclerc 43937 43938 * Albert Lee 43939 43940 * Sean McNeil 43941 43942 * Javier Miranda 43943 43944 * Laurent Nana 43945 43946 * Pascal Obry 43947 43948 * Dong-Ik Oh 43949 43950 * Laurent Pautet 43951 43952 * Brett Porter 43953 43954 * Thomas Quinot 43955 43956 * Nicolas Roche 43957 43958 * Pat Rogers 43959 43960 * Jose Ruiz 43961 43962 * Douglas Rupp 43963 43964 * Sergey Rybin 43965 43966 * Gail Schenker 43967 43968 * Ed Schonberg 43969 43970 * Nicolas Setton 43971 43972 * Samuel Tardieu 43973 43974 43975 The following people are recognized for their contributions of new 43976features, bug reports, testing and integration of classpath/libgcj for 43977GCC version 4.1: 43978 * Lillian Angel for `JTree' implementation and lots Free Swing 43979 additions and bug fixes. 43980 43981 * Wolfgang Baer for `GapContent' bug fixes. 43982 43983 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 43984 event fixes, lots of Free Swing work including `JTable' editing. 43985 43986 * Stuart Ballard for RMI constant fixes. 43987 43988 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 43989 43990 * Gary Benson for `MessageFormat' fixes. 43991 43992 * Daniel Bonniot for `Serialization' fixes. 43993 43994 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 43995 and `DOM xml:id' support. 43996 43997 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 43998 43999 * Archie Cobbs for build fixes, VM interface updates, 44000 `URLClassLoader' updates. 44001 44002 * Kelley Cook for build fixes. 44003 44004 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 44005 44006 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 44007 and improvements. 44008 44009 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 44010 2D support. Lots of imageio framework additions, lots of AWT and 44011 Free Swing bug fixes. 44012 44013 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 44014 fixes, better `Proxy' support, bug fixes and IKVM integration. 44015 44016 * Santiago Gala for `AccessControlContext' fixes. 44017 44018 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 44019 improvements. 44020 44021 * David Gilbert for `basic' and `metal' icon and plaf support and 44022 lots of documenting, Lots of Free Swing and metal theme additions. 44023 `MetalIconFactory' implementation. 44024 44025 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 44026 44027 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 44028 build speedups. 44029 44030 * Kim Ho for `JFileChooser' implementation. 44031 44032 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 44033 updates, `Serialization' fixes, `Properties' XML support and 44034 generic branch work, VMIntegration guide update. 44035 44036 * Bastiaan Huisman for `TimeZone' bug fixing. 44037 44038 * Andreas Jaeger for mprec updates. 44039 44040 * Paul Jenner for better `-Werror' support. 44041 44042 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 44043 44044 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 44045 bug fixes all over. Lots of Free Swing work including styled text. 44046 44047 * Simon Kitching for `String' cleanups and optimization suggestions. 44048 44049 * Michael Koch for configuration fixes, `Locale' updates, bug and 44050 build fixes. 44051 44052 * Guilhem Lavaux for configuration, thread and channel fixes and 44053 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 44054 44055 * David Lichteblau for JCL support library global/local reference 44056 cleanups. 44057 44058 * Aaron Luchko for JDWP updates and documentation fixes. 44059 44060 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 44061 features. 44062 44063 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 44064 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 44065 and implementing the Qt4 peers. 44066 44067 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 44068 `SystemLogger' and `FileHandler' rotate implementations, NIO 44069 `FileChannel.map' support, security and policy updates. 44070 44071 * Bryce McKinlay for RMI work. 44072 44073 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 44074 testing and documenting. 44075 44076 * Kalle Olavi Niemitalo for build fixes. 44077 44078 * Rainer Orth for build fixes. 44079 44080 * Andrew Overholt for `File' locking fixes. 44081 44082 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 44083 44084 * Olga Rodimina for `MenuSelectionManager' implementation. 44085 44086 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 44087 44088 * Julian Scheid for documentation updates and gjdoc support. 44089 44090 * Christian Schlichtherle for zip fixes and cleanups. 44091 44092 * Robert Schuster for documentation updates and beans fixes, 44093 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 44094 and URL, AWT and Free Swing bug fixes. 44095 44096 * Keith Seitz for lots of JDWP work. 44097 44098 * Christian Thalinger for 64-bit cleanups, Configuration and VM 44099 interface fixes and `CACAO' integration, `fdlibm' updates. 44100 44101 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 44102 44103 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 44104 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 44105 44106 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 44107 integration. `Qt4' build infrastructure, `SHA1PRNG' and 44108 `GdkPixbugDecoder' updates. 44109 44110 * Tom Tromey for Eclipse integration, generics work, lots of bug 44111 fixes and gcj integration including coordinating The Big Merge. 44112 44113 * Mark Wielaard for bug fixes, packaging and release management, 44114 `Clipboard' implementation, system call interrupts and network 44115 timeouts and `GdkPixpufDecoder' fixes. 44116 44117 44118 In addition to the above, all of which also contributed time and 44119energy in testing GCC, we would like to thank the following for their 44120contributions to testing: 44121 44122 * Michael Abd-El-Malek 44123 44124 * Thomas Arend 44125 44126 * Bonzo Armstrong 44127 44128 * Steven Ashe 44129 44130 * Chris Baldwin 44131 44132 * David Billinghurst 44133 44134 * Jim Blandy 44135 44136 * Stephane Bortzmeyer 44137 44138 * Horst von Brand 44139 44140 * Frank Braun 44141 44142 * Rodney Brown 44143 44144 * Sidney Cadot 44145 44146 * Bradford Castalia 44147 44148 * Robert Clark 44149 44150 * Jonathan Corbet 44151 44152 * Ralph Doncaster 44153 44154 * Richard Emberson 44155 44156 * Levente Farkas 44157 44158 * Graham Fawcett 44159 44160 * Mark Fernyhough 44161 44162 * Robert A. French 44163 44164 * Jo"rgen Freyh 44165 44166 * Mark K. Gardner 44167 44168 * Charles-Antoine Gauthier 44169 44170 * Yung Shing Gene 44171 44172 * David Gilbert 44173 44174 * Simon Gornall 44175 44176 * Fred Gray 44177 44178 * John Griffin 44179 44180 * Patrik Hagglund 44181 44182 * Phil Hargett 44183 44184 * Amancio Hasty 44185 44186 * Takafumi Hayashi 44187 44188 * Bryan W. Headley 44189 44190 * Kevin B. Hendricks 44191 44192 * Joep Jansen 44193 44194 * Christian Joensson 44195 44196 * Michel Kern 44197 44198 * David Kidd 44199 44200 * Tobias Kuipers 44201 44202 * Anand Krishnaswamy 44203 44204 * A. O. V. Le Blanc 44205 44206 * llewelly 44207 44208 * Damon Love 44209 44210 * Brad Lucier 44211 44212 * Matthias Klose 44213 44214 * Martin Knoblauch 44215 44216 * Rick Lutowski 44217 44218 * Jesse Macnish 44219 44220 * Stefan Morrell 44221 44222 * Anon A. Mous 44223 44224 * Matthias Mueller 44225 44226 * Pekka Nikander 44227 44228 * Rick Niles 44229 44230 * Jon Olson 44231 44232 * Magnus Persson 44233 44234 * Chris Pollard 44235 44236 * Richard Polton 44237 44238 * Derk Reefman 44239 44240 * David Rees 44241 44242 * Paul Reilly 44243 44244 * Tom Reilly 44245 44246 * Torsten Rueger 44247 44248 * Danny Sadinoff 44249 44250 * Marc Schifer 44251 44252 * Erik Schnetter 44253 44254 * Wayne K. Schroll 44255 44256 * David Schuler 44257 44258 * Vin Shelton 44259 44260 * Tim Souder 44261 44262 * Adam Sulmicki 44263 44264 * Bill Thorson 44265 44266 * George Talbot 44267 44268 * Pedro A. M. Vazquez 44269 44270 * Gregory Warnes 44271 44272 * Ian Watson 44273 44274 * David E. Young 44275 44276 * And many others 44277 44278 And finally we'd like to thank everyone who uses the compiler, provides 44279feedback and generally reminds us why we're doing this work in the first 44280place. 44281 44282 44283File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 44284 44285Option Index 44286************ 44287 44288GCC's command line options are indexed here without any initial `-' or 44289`--'. Where an option has both positive and negative forms (such as 44290`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 44291indexed under the most appropriate form; it may sometimes be useful to 44292look up both forms. 44293 44294[index] 44295* Menu: 44296 44297* ###: Overall Options. (line 209) 44298* -fno-keep-inline-dllexport: Optimize Options. (line 306) 44299* -mcpu: RX Options. (line 30) 44300* 8bit-idiv: i386 and x86-64 Options. 44301 (line 675) 44302* A: Preprocessor Options. 44303 (line 551) 44304* all_load: Darwin Options. (line 112) 44305* allowable_client: Darwin Options. (line 199) 44306* ansi <1>: Non-bugs. (line 107) 44307* ansi <2>: Other Builtins. (line 22) 44308* ansi <3>: Preprocessor Options. 44309 (line 326) 44310* ansi <4>: C Dialect Options. (line 11) 44311* ansi: Standards. (line 16) 44312* arch_errors_fatal: Darwin Options. (line 116) 44313* aux-info: C Dialect Options. (line 154) 44314* B: Directory Options. (line 46) 44315* Bdynamic: VxWorks Options. (line 22) 44316* bind_at_load: Darwin Options. (line 120) 44317* Bstatic: VxWorks Options. (line 22) 44318* bundle: Darwin Options. (line 125) 44319* bundle_loader: Darwin Options. (line 129) 44320* c: Link Options. (line 20) 44321* C: Preprocessor Options. 44322 (line 609) 44323* c: Overall Options. (line 164) 44324* client_name: Darwin Options. (line 199) 44325* compatibility_version: Darwin Options. (line 199) 44326* coverage: Debugging Options. (line 367) 44327* current_version: Darwin Options. (line 199) 44328* D: Preprocessor Options. 44329 (line 34) 44330* d: Debugging Options. (line 431) 44331* dA: Debugging Options. (line 638) 44332* dD <1>: Preprocessor Options. 44333 (line 583) 44334* dD: Debugging Options. (line 642) 44335* dead_strip: Darwin Options. (line 199) 44336* dependency-file: Darwin Options. (line 199) 44337* dH: Debugging Options. (line 646) 44338* dI: Preprocessor Options. 44339 (line 592) 44340* dM: Preprocessor Options. 44341 (line 567) 44342* dm: Debugging Options. (line 649) 44343* dN: Preprocessor Options. 44344 (line 589) 44345* dP: Debugging Options. (line 658) 44346* dp: Debugging Options. (line 653) 44347* dU: Preprocessor Options. 44348 (line 596) 44349* dumpmachine: Debugging Options. (line 1133) 44350* dumpspecs: Debugging Options. (line 1141) 44351* dumpversion: Debugging Options. (line 1137) 44352* dv: Debugging Options. (line 662) 44353* dx: Debugging Options. (line 667) 44354* dylib_file: Darwin Options. (line 199) 44355* dylinker_install_name: Darwin Options. (line 199) 44356* dynamic: Darwin Options. (line 199) 44357* dynamiclib: Darwin Options. (line 133) 44358* E <1>: Link Options. (line 20) 44359* E: Overall Options. (line 185) 44360* EB <1>: MIPS Options. (line 7) 44361* EB: ARC Options. (line 12) 44362* EL <1>: MIPS Options. (line 10) 44363* EL: ARC Options. (line 9) 44364* exported_symbols_list: Darwin Options. (line 199) 44365* F: Darwin Options. (line 32) 44366* fabi-version: C++ Dialect Options. 44367 (line 20) 44368* falign-arrays: Optimize Options. (line 1402) 44369* falign-functions: Optimize Options. (line 1411) 44370* falign-jumps: Optimize Options. (line 1461) 44371* falign-labels: Optimize Options. (line 1429) 44372* falign-loops: Optimize Options. (line 1447) 44373* fassociative-math: Optimize Options. (line 1892) 44374* fasynchronous-unwind-tables: Code Gen Options. (line 64) 44375* fauto-inc-dec: Optimize Options. (line 511) 44376* fbounds-check: Code Gen Options. (line 15) 44377* fbranch-probabilities: Optimize Options. (line 2020) 44378* fbranch-target-load-optimize: Optimize Options. (line 2127) 44379* fbranch-target-load-optimize2: Optimize Options. (line 2133) 44380* fbtr-bb-exclusive: Optimize Options. (line 2137) 44381* fcall-saved: Code Gen Options. (line 262) 44382* fcall-used: Code Gen Options. (line 248) 44383* fcaller-saves: Optimize Options. (line 784) 44384* fcheck-data-deps: Optimize Options. (line 1061) 44385* fcheck-new: C++ Dialect Options. 44386 (line 45) 44387* fcombine-stack-adjustments: Optimize Options. (line 797) 44388* fcommon: Variable Attributes. 44389 (line 105) 44390* fcompare-debug: Debugging Options. (line 156) 44391* fcompare-debug-second: Debugging Options. (line 182) 44392* fcompare-elim: Optimize Options. (line 1738) 44393* fcond-mismatch: C Dialect Options. (line 290) 44394* fconserve-space: C++ Dialect Options. 44395 (line 55) 44396* fconserve-stack: Optimize Options. (line 803) 44397* fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 44398 (line 30) 44399* fconstexpr-depth: C++ Dialect Options. 44400 (line 67) 44401* fcprop-registers: Optimize Options. (line 1750) 44402* fcrossjumping: Optimize Options. (line 504) 44403* fcse-follow-jumps: Optimize Options. (line 432) 44404* fcse-skip-blocks: Optimize Options. (line 441) 44405* fcx-fortran-rules: Optimize Options. (line 2006) 44406* fcx-limited-range: Optimize Options. (line 1994) 44407* fdata-sections: Optimize Options. (line 2108) 44408* fdbg-cnt: Debugging Options. (line 420) 44409* fdbg-cnt-list: Debugging Options. (line 417) 44410* fdce: Optimize Options. (line 517) 44411* fdebug-prefix-map: Debugging Options. (line 283) 44412* fdelayed-branch: Optimize Options. (line 629) 44413* fdelete-null-pointer-checks: Optimize Options. (line 540) 44414* fdevirtualize: Optimize Options. (line 558) 44415* fdiagnostics-show-location: Language Independent Options. 44416 (line 21) 44417* fdiagnostics-show-option: Language Independent Options. 44418 (line 36) 44419* fdirectives-only: Preprocessor Options. 44420 (line 459) 44421* fdollars-in-identifiers <1>: Interoperation. (line 146) 44422* fdollars-in-identifiers: Preprocessor Options. 44423 (line 481) 44424* fdse: Optimize Options. (line 521) 44425* fdump-class-hierarchy: Debugging Options. (line 698) 44426* fdump-final-insns: Debugging Options. (line 150) 44427* fdump-ipa: Debugging Options. (line 706) 44428* fdump-noaddr: Debugging Options. (line 671) 44429* fdump-rtl-alignments: Debugging Options. (line 450) 44430* fdump-rtl-all: Debugging Options. (line 635) 44431* fdump-rtl-asmcons: Debugging Options. (line 453) 44432* fdump-rtl-auto_inc_dec: Debugging Options. (line 457) 44433* fdump-rtl-barriers: Debugging Options. (line 461) 44434* fdump-rtl-bbpart: Debugging Options. (line 464) 44435* fdump-rtl-bbro: Debugging Options. (line 467) 44436* fdump-rtl-btl2: Debugging Options. (line 471) 44437* fdump-rtl-bypass: Debugging Options. (line 475) 44438* fdump-rtl-ce1: Debugging Options. (line 486) 44439* fdump-rtl-ce2: Debugging Options. (line 486) 44440* fdump-rtl-ce3: Debugging Options. (line 486) 44441* fdump-rtl-combine: Debugging Options. (line 478) 44442* fdump-rtl-compgotos: Debugging Options. (line 481) 44443* fdump-rtl-cprop_hardreg: Debugging Options. (line 490) 44444* fdump-rtl-csa: Debugging Options. (line 493) 44445* fdump-rtl-cse1: Debugging Options. (line 497) 44446* fdump-rtl-cse2: Debugging Options. (line 497) 44447* fdump-rtl-dbr: Debugging Options. (line 504) 44448* fdump-rtl-dce: Debugging Options. (line 501) 44449* fdump-rtl-dce1: Debugging Options. (line 508) 44450* fdump-rtl-dce2: Debugging Options. (line 508) 44451* fdump-rtl-dfinish: Debugging Options. (line 632) 44452* fdump-rtl-dfinit: Debugging Options. (line 632) 44453* fdump-rtl-eh: Debugging Options. (line 512) 44454* fdump-rtl-eh_ranges: Debugging Options. (line 515) 44455* fdump-rtl-expand: Debugging Options. (line 518) 44456* fdump-rtl-fwprop1: Debugging Options. (line 522) 44457* fdump-rtl-fwprop2: Debugging Options. (line 522) 44458* fdump-rtl-gcse1: Debugging Options. (line 527) 44459* fdump-rtl-gcse2: Debugging Options. (line 527) 44460* fdump-rtl-init-regs: Debugging Options. (line 531) 44461* fdump-rtl-initvals: Debugging Options. (line 534) 44462* fdump-rtl-into_cfglayout: Debugging Options. (line 537) 44463* fdump-rtl-ira: Debugging Options. (line 540) 44464* fdump-rtl-jump: Debugging Options. (line 543) 44465* fdump-rtl-loop2: Debugging Options. (line 546) 44466* fdump-rtl-mach: Debugging Options. (line 550) 44467* fdump-rtl-mode_sw: Debugging Options. (line 554) 44468* fdump-rtl-outof_cfglayout: Debugging Options. (line 560) 44469* fdump-rtl-peephole2: Debugging Options. (line 563) 44470* fdump-rtl-postreload: Debugging Options. (line 566) 44471* fdump-rtl-pro_and_epilogue: Debugging Options. (line 569) 44472* fdump-rtl-regclass: Debugging Options. (line 632) 44473* fdump-rtl-regmove: Debugging Options. (line 572) 44474* fdump-rtl-rnreg: Debugging Options. (line 557) 44475* fdump-rtl-sched1: Debugging Options. (line 576) 44476* fdump-rtl-sched2: Debugging Options. (line 576) 44477* fdump-rtl-see: Debugging Options. (line 580) 44478* fdump-rtl-seqabstr: Debugging Options. (line 583) 44479* fdump-rtl-shorten: Debugging Options. (line 586) 44480* fdump-rtl-sibling: Debugging Options. (line 589) 44481* fdump-rtl-sms: Debugging Options. (line 602) 44482* fdump-rtl-split1: Debugging Options. (line 596) 44483* fdump-rtl-split2: Debugging Options. (line 596) 44484* fdump-rtl-split3: Debugging Options. (line 596) 44485* fdump-rtl-split4: Debugging Options. (line 596) 44486* fdump-rtl-split5: Debugging Options. (line 596) 44487* fdump-rtl-stack: Debugging Options. (line 606) 44488* fdump-rtl-subreg1: Debugging Options. (line 612) 44489* fdump-rtl-subreg2: Debugging Options. (line 612) 44490* fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 632) 44491* fdump-rtl-subregs_of_mode_init: Debugging Options. (line 632) 44492* fdump-rtl-unshare: Debugging Options. (line 616) 44493* fdump-rtl-vartrack: Debugging Options. (line 619) 44494* fdump-rtl-vregs: Debugging Options. (line 622) 44495* fdump-rtl-web: Debugging Options. (line 625) 44496* fdump-statistics: Debugging Options. (line 724) 44497* fdump-translation-unit: Debugging Options. (line 689) 44498* fdump-tree: Debugging Options. (line 735) 44499* fdump-tree-alias: Debugging Options. (line 829) 44500* fdump-tree-all: Debugging Options. (line 919) 44501* fdump-tree-ccp: Debugging Options. (line 833) 44502* fdump-tree-cfg: Debugging Options. (line 809) 44503* fdump-tree-ch: Debugging Options. (line 821) 44504* fdump-tree-copyprop: Debugging Options. (line 849) 44505* fdump-tree-copyrename: Debugging Options. (line 895) 44506* fdump-tree-dce: Debugging Options. (line 857) 44507* fdump-tree-dom: Debugging Options. (line 875) 44508* fdump-tree-dse: Debugging Options. (line 880) 44509* fdump-tree-forwprop: Debugging Options. (line 890) 44510* fdump-tree-fre: Debugging Options. (line 845) 44511* fdump-tree-gimple: Debugging Options. (line 804) 44512* fdump-tree-mudflap: Debugging Options. (line 861) 44513* fdump-tree-nrv: Debugging Options. (line 900) 44514* fdump-tree-optimized: Debugging Options. (line 801) 44515* fdump-tree-original: Debugging Options. (line 798) 44516* fdump-tree-phiopt: Debugging Options. (line 885) 44517* fdump-tree-pre: Debugging Options. (line 841) 44518* fdump-tree-sink: Debugging Options. (line 871) 44519* fdump-tree-slp: Debugging Options. (line 910) 44520* fdump-tree-sra: Debugging Options. (line 866) 44521* fdump-tree-ssa: Debugging Options. (line 825) 44522* fdump-tree-store_copyprop: Debugging Options. (line 853) 44523* fdump-tree-storeccp: Debugging Options. (line 837) 44524* fdump-tree-vcg: Debugging Options. (line 813) 44525* fdump-tree-vect: Debugging Options. (line 905) 44526* fdump-tree-vrp: Debugging Options. (line 915) 44527* fdump-unnumbered: Debugging Options. (line 677) 44528* fdump-unnumbered-links: Debugging Options. (line 683) 44529* fdwarf2-cfi-asm: Debugging Options. (line 287) 44530* fearly-inlining: Optimize Options. (line 263) 44531* feliminate-dwarf2-dups: Debugging Options. (line 195) 44532* feliminate-unused-debug-symbols: Debugging Options. (line 52) 44533* feliminate-unused-debug-types: Debugging Options. (line 1145) 44534* fenable-icf-debug: Debugging Options. (line 270) 44535* fexceptions: Code Gen Options. (line 34) 44536* fexcess-precision: Optimize Options. (line 1820) 44537* fexec-charset: Preprocessor Options. 44538 (line 508) 44539* fexpensive-optimizations: Optimize Options. (line 565) 44540* fextended-identifiers: Preprocessor Options. 44541 (line 484) 44542* ffast-math: Optimize Options. (line 1843) 44543* ffinite-math-only: Optimize Options. (line 1918) 44544* ffix-and-continue: Darwin Options. (line 106) 44545* ffixed: Code Gen Options. (line 236) 44546* ffloat-store <1>: Disappointments. (line 77) 44547* ffloat-store: Optimize Options. (line 1806) 44548* ffor-scope: C++ Dialect Options. 44549 (line 121) 44550* fforward-propagate: Optimize Options. (line 175) 44551* ffp-contract: Optimize Options. (line 184) 44552* ffreestanding <1>: Function Attributes. 44553 (line 459) 44554* ffreestanding <2>: Warning Options. (line 238) 44555* ffreestanding <3>: C Dialect Options. (line 225) 44556* ffreestanding: Standards. (line 88) 44557* ffriend-injection: C++ Dialect Options. 44558 (line 91) 44559* ffunction-sections: Optimize Options. (line 2108) 44560* fgcse: Optimize Options. (line 455) 44561* fgcse-after-reload: Optimize Options. (line 491) 44562* fgcse-las: Optimize Options. (line 484) 44563* fgcse-lm: Optimize Options. (line 466) 44564* fgcse-sm: Optimize Options. (line 475) 44565* fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 44566 (line 39) 44567* fgnu89-inline: C Dialect Options. (line 133) 44568* fgraphite-identity: Optimize Options. (line 1042) 44569* fhosted: C Dialect Options. (line 218) 44570* fif-conversion: Optimize Options. (line 525) 44571* fif-conversion2: Optimize Options. (line 534) 44572* filelist: Darwin Options. (line 199) 44573* findirect-data: Darwin Options. (line 106) 44574* findirect-inlining: Optimize Options. (line 236) 44575* finhibit-size-directive: Code Gen Options. (line 158) 44576* finline-functions: Optimize Options. (line 244) 44577* finline-functions-called-once: Optimize Options. (line 255) 44578* finline-limit: Optimize Options. (line 280) 44579* finline-small-functions: Optimize Options. (line 228) 44580* finput-charset: Preprocessor Options. 44581 (line 521) 44582* finstrument-function-calls: Code Gen Options. (line 361) 44583* finstrument-functions <1>: Function Attributes. 44584 (line 899) 44585* finstrument-functions: Code Gen Options. (line 292) 44586* finstrument-functions-exclude-file-list: Code Gen Options. (line 329) 44587* finstrument-functions-exclude-function-list: Code Gen Options. 44588 (line 349) 44589* fipa-cp: Optimize Options. (line 873) 44590* fipa-cp-clone: Optimize Options. (line 881) 44591* fipa-matrix-reorg: Optimize Options. (line 891) 44592* fipa-profile: Optimize Options. (line 865) 44593* fipa-pta: Optimize Options. (line 859) 44594* fipa-pure-const: Optimize Options. (line 837) 44595* fipa-reference: Optimize Options. (line 841) 44596* fipa-sra: Optimize Options. (line 273) 44597* fipa-struct-reorg: Optimize Options. (line 845) 44598* fira-loop-pressure: Optimize Options. (line 604) 44599* fira-verbose: Optimize Options. (line 624) 44600* fivopts: Optimize Options. (line 1137) 44601* fkeep-inline-functions <1>: Inline. (line 51) 44602* fkeep-inline-functions: Optimize Options. (line 312) 44603* fkeep-static-consts: Optimize Options. (line 319) 44604* flat_namespace: Darwin Options. (line 199) 44605* flax-vector-conversions: C Dialect Options. (line 295) 44606* fleading-underscore: Code Gen Options. (line 455) 44607* floop-block: Optimize Options. (line 1013) 44608* floop-flatten: Optimize Options. (line 1050) 44609* floop-interchange: Optimize Options. (line 966) 44610* floop-parallelize-all: Optimize Options. (line 1055) 44611* floop-strip-mine: Optimize Options. (line 991) 44612* flto: Optimize Options. (line 1525) 44613* flto-partition: Optimize Options. (line 1696) 44614* fmax-errors: Warning Options. (line 18) 44615* fmem-report: Debugging Options. (line 311) 44616* fmerge-all-constants: Optimize Options. (line 338) 44617* fmerge-constants: Optimize Options. (line 328) 44618* fmerge-debug-strings: Debugging Options. (line 275) 44619* fmessage-length: Language Independent Options. 44620 (line 15) 44621* fmodulo-sched: Optimize Options. (line 349) 44622* fmodulo-sched-allow-regmoves: Optimize Options. (line 354) 44623* fmove-loop-invariants: Optimize Options. (line 2098) 44624* fms-extensions <1>: Unnamed Fields. (line 36) 44625* fms-extensions <2>: C++ Dialect Options. 44626 (line 156) 44627* fms-extensions: C Dialect Options. (line 243) 44628* fmudflap: Optimize Options. (line 394) 44629* fmudflapir: Optimize Options. (line 394) 44630* fmudflapth: Optimize Options. (line 394) 44631* fnext-runtime: Objective-C and Objective-C++ Dialect Options. 44632 (line 43) 44633* fno-access-control: C++ Dialect Options. 44634 (line 41) 44635* fno-asm: C Dialect Options. (line 170) 44636* fno-branch-count-reg: Optimize Options. (line 361) 44637* fno-builtin <1>: Other Builtins. (line 14) 44638* fno-builtin <2>: Function Attributes. 44639 (line 459) 44640* fno-builtin <3>: Warning Options. (line 238) 44641* fno-builtin: C Dialect Options. (line 184) 44642* fno-common <1>: Variable Attributes. 44643 (line 105) 44644* fno-common: Code Gen Options. (line 135) 44645* fno-compare-debug: Debugging Options. (line 156) 44646* fno-deduce-init-list: C++ Dialect Options. 44647 (line 73) 44648* fno-default-inline <1>: Inline. (line 71) 44649* fno-default-inline <2>: Optimize Options. (line 160) 44650* fno-default-inline: C++ Dialect Options. 44651 (line 330) 44652* fno-defer-pop: Optimize Options. (line 167) 44653* fno-diagnostics-show-option: Language Independent Options. 44654 (line 36) 44655* fno-dwarf2-cfi-asm: Debugging Options. (line 287) 44656* fno-elide-constructors: C++ Dialect Options. 44657 (line 104) 44658* fno-enforce-eh-specs: C++ Dialect Options. 44659 (line 110) 44660* fno-for-scope: C++ Dialect Options. 44661 (line 121) 44662* fno-function-cse: Optimize Options. (line 371) 44663* fno-gnu-keywords: C++ Dialect Options. 44664 (line 133) 44665* fno-guess-branch-probability: Optimize Options. (line 1275) 44666* fno-ident: Code Gen Options. (line 155) 44667* fno-implement-inlines <1>: C++ Interface. (line 75) 44668* fno-implement-inlines: C++ Dialect Options. 44669 (line 150) 44670* fno-implicit-inline-templates: C++ Dialect Options. 44671 (line 144) 44672* fno-implicit-templates <1>: Template Instantiation. 44673 (line 87) 44674* fno-implicit-templates: C++ Dialect Options. 44675 (line 138) 44676* fno-inline: Optimize Options. (line 222) 44677* fno-ira-share-save-slots: Optimize Options. (line 612) 44678* fno-ira-share-spill-slots: Optimize Options. (line 618) 44679* fno-jump-tables: Code Gen Options. (line 228) 44680* fno-math-errno: Optimize Options. (line 1857) 44681* fno-merge-debug-strings: Debugging Options. (line 275) 44682* fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 44683 (line 49) 44684* fno-nonansi-builtins: C++ Dialect Options. 44685 (line 161) 44686* fno-operator-names: C++ Dialect Options. 44687 (line 177) 44688* fno-optional-diags: C++ Dialect Options. 44689 (line 181) 44690* fno-peephole: Optimize Options. (line 1266) 44691* fno-peephole2: Optimize Options. (line 1266) 44692* fno-pretty-templates: C++ Dialect Options. 44693 (line 191) 44694* fno-rtti: C++ Dialect Options. 44695 (line 209) 44696* fno-sched-interblock: Optimize Options. (line 655) 44697* fno-sched-spec: Optimize Options. (line 660) 44698* fno-set-stack-executable: i386 and x86-64 Windows Options. 44699 (line 46) 44700* fno-show-column: Preprocessor Options. 44701 (line 546) 44702* fno-signed-bitfields: C Dialect Options. (line 328) 44703* fno-signed-zeros: Optimize Options. (line 1930) 44704* fno-stack-limit: Code Gen Options. (line 423) 44705* fno-threadsafe-statics: C++ Dialect Options. 44706 (line 240) 44707* fno-toplevel-reorder: Optimize Options. (line 1481) 44708* fno-trapping-math: Optimize Options. (line 1940) 44709* fno-unsigned-bitfields: C Dialect Options. (line 328) 44710* fno-use-cxa-get-exception-ptr: C++ Dialect Options. 44711 (line 253) 44712* fno-var-tracking-assignments: Debugging Options. (line 1056) 44713* fno-var-tracking-assignments-toggle: Debugging Options. (line 1066) 44714* fno-weak: C++ Dialect Options. 44715 (line 315) 44716* fno-working-directory: Preprocessor Options. 44717 (line 531) 44718* fno-zero-initialized-in-bss: Optimize Options. (line 382) 44719* fnon-call-exceptions: Code Gen Options. (line 48) 44720* fnothrow-opt: C++ Dialect Options. 44721 (line 166) 44722* fobjc-abi-version: Objective-C and Objective-C++ Dialect Options. 44723 (line 56) 44724* fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 44725 (line 67) 44726* fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 44727 (line 92) 44728* fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 44729 (line 96) 44730* fobjc-gc: Objective-C and Objective-C++ Dialect Options. 44731 (line 105) 44732* fobjc-nilcheck: Objective-C and Objective-C++ Dialect Options. 44733 (line 111) 44734* fobjc-std: Objective-C and Objective-C++ Dialect Options. 44735 (line 120) 44736* fomit-frame-pointer: Optimize Options. (line 195) 44737* fopenmp: C Dialect Options. (line 235) 44738* foptimize-register-move: Optimize Options. (line 572) 44739* foptimize-sibling-calls: Optimize Options. (line 217) 44740* force_cpusubtype_ALL: Darwin Options. (line 138) 44741* force_flat_namespace: Darwin Options. (line 199) 44742* fpack-struct: Code Gen Options. (line 279) 44743* fpartial-inlining: Optimize Options. (line 1241) 44744* fpcc-struct-return <1>: Incompatibilities. (line 170) 44745* fpcc-struct-return: Code Gen Options. (line 70) 44746* fpch-deps: Preprocessor Options. 44747 (line 282) 44748* fpch-preprocess: Preprocessor Options. 44749 (line 290) 44750* fpeel-loops: Optimize Options. (line 2090) 44751* fpermissive: C++ Dialect Options. 44752 (line 186) 44753* fPIC: Code Gen Options. (line 205) 44754* fpic: Code Gen Options. (line 184) 44755* fPIE: Code Gen Options. (line 218) 44756* fpie: Code Gen Options. (line 218) 44757* fplan9-extensions: Unnamed Fields. (line 44) 44758* fpost-ipa-mem-report: Debugging Options. (line 317) 44759* fpre-ipa-mem-report: Debugging Options. (line 315) 44760* fpredictive-commoning: Optimize Options. (line 1248) 44761* fprefetch-loop-arrays: Optimize Options. (line 1255) 44762* fpreprocessed: Preprocessor Options. 44763 (line 489) 44764* fprofile-arcs <1>: Other Builtins. (line 247) 44765* fprofile-arcs: Debugging Options. (line 352) 44766* fprofile-correction: Optimize Options. (line 1757) 44767* fprofile-dir: Optimize Options. (line 1764) 44768* fprofile-generate: Optimize Options. (line 1774) 44769* fprofile-use: Optimize Options. (line 1787) 44770* fprofile-values: Optimize Options. (line 2039) 44771* fpromote-loop-indices: Optimize Options. (line 2183) 44772* fpu: RX Options. (line 17) 44773* frandom-seed: Debugging Options. (line 950) 44774* freciprocal-math: Optimize Options. (line 1909) 44775* frecord-gcc-switches: Code Gen Options. (line 174) 44776* freg-struct-return: Code Gen Options. (line 88) 44777* fregmove: Optimize Options. (line 572) 44778* fremove-local-statics: Optimize Options. (line 2177) 44779* frename-registers: Optimize Options. (line 2057) 44780* freorder-blocks: Optimize Options. (line 1292) 44781* freorder-blocks-and-partition: Optimize Options. (line 1298) 44782* freorder-functions: Optimize Options. (line 1309) 44783* freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 44784 (line 131) 44785* frepo <1>: Template Instantiation. 44786 (line 62) 44787* frepo: C++ Dialect Options. 44788 (line 204) 44789* frerun-cse-after-loop: Optimize Options. (line 449) 44790* freschedule-modulo-scheduled-loops: Optimize Options. (line 756) 44791* frounding-math: Optimize Options. (line 1955) 44792* fsched-critical-path-heuristic: Optimize Options. (line 722) 44793* fsched-dep-count-heuristic: Optimize Options. (line 749) 44794* fsched-group-heuristic: Optimize Options. (line 716) 44795* fsched-last-insn-heuristic: Optimize Options. (line 742) 44796* fsched-pressure: Optimize Options. (line 665) 44797* fsched-rank-heuristic: Optimize Options. (line 735) 44798* fsched-spec-insn-heuristic: Optimize Options. (line 728) 44799* fsched-spec-load: Optimize Options. (line 674) 44800* fsched-spec-load-dangerous: Optimize Options. (line 679) 44801* fsched-stalled-insns: Optimize Options. (line 685) 44802* fsched-stalled-insns-dep: Optimize Options. (line 695) 44803* fsched-verbose: Debugging Options. (line 960) 44804* fsched2-use-superblocks: Optimize Options. (line 705) 44805* fschedule-insns: Optimize Options. (line 636) 44806* fschedule-insns2: Optimize Options. (line 646) 44807* fsection-anchors: Optimize Options. (line 2153) 44808* fsel-sched-pipelining: Optimize Options. (line 770) 44809* fsel-sched-pipelining-outer-loops: Optimize Options. (line 775) 44810* fselective-scheduling: Optimize Options. (line 762) 44811* fselective-scheduling2: Optimize Options. (line 766) 44812* fshort-double: Code Gen Options. (line 117) 44813* fshort-enums <1>: Non-bugs. (line 42) 44814* fshort-enums <2>: Type Attributes. (line 113) 44815* fshort-enums <3>: Structures unions enumerations and bit-fields implementation. 44816 (line 43) 44817* fshort-enums: Code Gen Options. (line 106) 44818* fshort-wchar: Code Gen Options. (line 125) 44819* fshrink-wrap: Optimize Options. (line 780) 44820* fsignaling-nans: Optimize Options. (line 1975) 44821* fsigned-bitfields <1>: Non-bugs. (line 57) 44822* fsigned-bitfields: C Dialect Options. (line 328) 44823* fsigned-char <1>: Characters implementation. 44824 (line 31) 44825* fsigned-char: C Dialect Options. (line 318) 44826* fsingle-precision-constant: Optimize Options. (line 1990) 44827* fsplit-ivs-in-unroller: Optimize Options. (line 1222) 44828* fsplit-stack <1>: Function Attributes. 44829 (line 904) 44830* fsplit-stack: Code Gen Options. (line 437) 44831* fsplit-wide-types: Optimize Options. (line 424) 44832* fstack-check: Code Gen Options. (line 384) 44833* fstack-limit-register: Code Gen Options. (line 423) 44834* fstack-limit-symbol: Code Gen Options. (line 423) 44835* fstack-protector: Optimize Options. (line 2141) 44836* fstack-protector-all: Optimize Options. (line 2150) 44837* fstack-usage: Debugging Options. (line 321) 44838* fstats: C++ Dialect Options. 44839 (line 219) 44840* fstrict-aliasing: Optimize Options. (line 1322) 44841* fstrict-enums: C++ Dialect Options. 44842 (line 224) 44843* fstrict-overflow: Optimize Options. (line 1368) 44844* fstrict-volatile-bitfields: Code Gen Options. (line 540) 44845* fsyntax-only: Warning Options. (line 14) 44846* ftabstop: Preprocessor Options. 44847 (line 502) 44848* ftemplate-depth: C++ Dialect Options. 44849 (line 233) 44850* ftest-coverage: Debugging Options. (line 408) 44851* fthread-jumps: Optimize Options. (line 415) 44852* ftime-report: Debugging Options. (line 307) 44853* ftls-model: Code Gen Options. (line 466) 44854* ftracer: Optimize Options. (line 1205) 44855* ftrapv: Code Gen Options. (line 22) 44856* ftree-bit-ccp: Optimize Options. (line 905) 44857* ftree-builtin-call-dce: Optimize Options. (line 929) 44858* ftree-ccp: Optimize Options. (line 911) 44859* ftree-ch: Optimize Options. (line 949) 44860* ftree-copy-prop: Optimize Options. (line 832) 44861* ftree-copyrename: Optimize Options. (line 1161) 44862* ftree-dce: Optimize Options. (line 925) 44863* ftree-dominator-opts: Optimize Options. (line 935) 44864* ftree-dse: Optimize Options. (line 942) 44865* ftree-forwprop: Optimize Options. (line 817) 44866* ftree-fre: Optimize Options. (line 821) 44867* ftree-loop-im: Optimize Options. (line 1122) 44868* ftree-loop-ivcanon: Optimize Options. (line 1131) 44869* ftree-loop-linear: Optimize Options. (line 960) 44870* ftree-loop-optimize: Optimize Options. (line 956) 44871* ftree-parallelize-loops: Optimize Options. (line 1142) 44872* ftree-phiprop: Optimize Options. (line 828) 44873* ftree-pre: Optimize Options. (line 813) 44874* ftree-pta: Optimize Options. (line 1151) 44875* ftree-reassoc: Optimize Options. (line 809) 44876* ftree-sink: Optimize Options. (line 901) 44877* ftree-slp-vectorize: Optimize Options. (line 1180) 44878* ftree-sra: Optimize Options. (line 1155) 44879* ftree-ter: Optimize Options. (line 1168) 44880* ftree-vect-loop-version: Optimize Options. (line 1184) 44881* ftree-vectorize: Optimize Options. (line 1176) 44882* ftree-vectorizer-verbose: Debugging Options. (line 923) 44883* ftree-vrp: Optimize Options. (line 1196) 44884* funit-at-a-time: Optimize Options. (line 1474) 44885* funroll-all-loops: Optimize Options. (line 1216) 44886* funroll-loops: Optimize Options. (line 1210) 44887* funsafe-loop-optimizations: Optimize Options. (line 496) 44888* funsafe-math-optimizations: Optimize Options. (line 1875) 44889* funsigned-bitfields <1>: Non-bugs. (line 57) 44890* funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 44891 (line 17) 44892* funsigned-bitfields: C Dialect Options. (line 328) 44893* funsigned-char <1>: Characters implementation. 44894 (line 31) 44895* funsigned-char: C Dialect Options. (line 300) 44896* funswitch-loops: Optimize Options. (line 2102) 44897* funwind-tables: Code Gen Options. (line 57) 44898* fuse-cxa-atexit: C++ Dialect Options. 44899 (line 246) 44900* fvar-tracking: Debugging Options. (line 1046) 44901* fvar-tracking-assignments: Debugging Options. (line 1056) 44902* fvar-tracking-assignments-toggle: Debugging Options. (line 1066) 44903* fvariable-expansion-in-unroller: Optimize Options. (line 1236) 44904* fvect-cost-model: Optimize Options. (line 1193) 44905* fverbose-asm: Code Gen Options. (line 165) 44906* fvisibility: Code Gen Options. (line 474) 44907* fvisibility-inlines-hidden: C++ Dialect Options. 44908 (line 258) 44909* fvisibility-ms-compat: C++ Dialect Options. 44910 (line 286) 44911* fvpt: Optimize Options. (line 2048) 44912* fweb: Optimize Options. (line 1493) 44913* fwhole-program: Optimize Options. (line 1504) 44914* fwide-exec-charset: Preprocessor Options. 44915 (line 513) 44916* fworking-directory: Preprocessor Options. 44917 (line 531) 44918* fwrapv: Code Gen Options. (line 26) 44919* fzero-link: Objective-C and Objective-C++ Dialect Options. 44920 (line 141) 44921* G <1>: System V Options. (line 10) 44922* G <2>: RS/6000 and PowerPC Options. 44923 (line 701) 44924* G <3>: MIPS Options. (line 317) 44925* G: M32R/D Options. (line 57) 44926* g: Debugging Options. (line 10) 44927* gcoff: Debugging Options. (line 70) 44928* gdwarf-VERSION: Debugging Options. (line 88) 44929* gen-decls: Objective-C and Objective-C++ Dialect Options. 44930 (line 153) 44931* gfull: Darwin Options. (line 71) 44932* ggdb: Debugging Options. (line 38) 44933* gno-strict-dwarf: Debugging Options. (line 105) 44934* gstabs: Debugging Options. (line 44) 44935* gstabs+: Debugging Options. (line 64) 44936* gstrict-dwarf: Debugging Options. (line 99) 44937* gtoggle: Debugging Options. (line 142) 44938* gused: Darwin Options. (line 66) 44939* gvms: Debugging Options. (line 109) 44940* gxcoff: Debugging Options. (line 75) 44941* gxcoff+: Debugging Options. (line 80) 44942* H: Preprocessor Options. 44943 (line 664) 44944* headerpad_max_install_names: Darwin Options. (line 199) 44945* help <1>: Preprocessor Options. 44946 (line 656) 44947* help: Overall Options. (line 221) 44948* I <1>: Directory Options. (line 10) 44949* I: Preprocessor Options. 44950 (line 65) 44951* I- <1>: Directory Options. (line 112) 44952* I-: Preprocessor Options. 44953 (line 373) 44954* idirafter: Preprocessor Options. 44955 (line 415) 44956* iframework: Darwin Options. (line 59) 44957* imacros: Preprocessor Options. 44958 (line 406) 44959* image_base: Darwin Options. (line 199) 44960* imultilib: Preprocessor Options. 44961 (line 440) 44962* include: Preprocessor Options. 44963 (line 395) 44964* init: Darwin Options. (line 199) 44965* install_name: Darwin Options. (line 199) 44966* iprefix: Preprocessor Options. 44967 (line 422) 44968* iquote <1>: Directory Options. (line 36) 44969* iquote: Preprocessor Options. 44970 (line 452) 44971* isysroot: Preprocessor Options. 44972 (line 434) 44973* isystem: Preprocessor Options. 44974 (line 444) 44975* iwithprefix: Preprocessor Options. 44976 (line 428) 44977* iwithprefixbefore: Preprocessor Options. 44978 (line 428) 44979* keep_private_externs: Darwin Options. (line 199) 44980* L: Directory Options. (line 42) 44981* l: Link Options. (line 26) 44982* lobjc: Link Options. (line 53) 44983* m: RS/6000 and PowerPC Options. 44984 (line 552) 44985* M: Preprocessor Options. 44986 (line 173) 44987* m1: SH Options. (line 9) 44988* m10: PDP-11 Options. (line 29) 44989* m128bit-long-double: i386 and x86-64 Options. 44990 (line 278) 44991* m16-bit: CRIS Options. (line 64) 44992* m2: SH Options. (line 12) 44993* m210: MCore Options. (line 43) 44994* m2a: SH Options. (line 30) 44995* m2a-nofpu: SH Options. (line 18) 44996* m2a-single: SH Options. (line 26) 44997* m2a-single-only: SH Options. (line 22) 44998* m3: SH Options. (line 34) 44999* m31: S/390 and zSeries Options. 45000 (line 87) 45001* m32 <1>: SPARC Options. (line 177) 45002* m32 <2>: RS/6000 and PowerPC Options. 45003 (line 266) 45004* m32: i386 and x86-64 Options. 45005 (line 687) 45006* m32-bit: CRIS Options. (line 64) 45007* m32bit-doubles: RX Options. (line 10) 45008* m32r: M32R/D Options. (line 15) 45009* m32r2: M32R/D Options. (line 9) 45010* m32rx: M32R/D Options. (line 12) 45011* m340: MCore Options. (line 43) 45012* m3dnow: i386 and x86-64 Options. 45013 (line 472) 45014* m3e: SH Options. (line 37) 45015* m4: SH Options. (line 51) 45016* m4-nofpu: SH Options. (line 40) 45017* m4-single: SH Options. (line 47) 45018* m4-single-only: SH Options. (line 43) 45019* m40: PDP-11 Options. (line 23) 45020* m45: PDP-11 Options. (line 26) 45021* m4a: SH Options. (line 66) 45022* m4a-nofpu: SH Options. (line 54) 45023* m4a-single: SH Options. (line 62) 45024* m4a-single-only: SH Options. (line 58) 45025* m4al: SH Options. (line 69) 45026* m4byte-functions: MCore Options. (line 27) 45027* m5200: M680x0 Options. (line 147) 45028* m5206e: M680x0 Options. (line 156) 45029* m528x: M680x0 Options. (line 160) 45030* m5307: M680x0 Options. (line 164) 45031* m5407: M680x0 Options. (line 168) 45032* m64 <1>: SPARC Options. (line 177) 45033* m64 <2>: S/390 and zSeries Options. 45034 (line 87) 45035* m64 <3>: RS/6000 and PowerPC Options. 45036 (line 266) 45037* m64: i386 and x86-64 Options. 45038 (line 687) 45039* m64bit-doubles: RX Options. (line 10) 45040* m68000: M680x0 Options. (line 95) 45041* m68010: M680x0 Options. (line 103) 45042* m68020: M680x0 Options. (line 109) 45043* m68020-40: M680x0 Options. (line 178) 45044* m68020-60: M680x0 Options. (line 187) 45045* m68030: M680x0 Options. (line 114) 45046* m68040: M680x0 Options. (line 119) 45047* m68060: M680x0 Options. (line 128) 45048* m6811: M68hc1x Options. (line 13) 45049* m6812: M68hc1x Options. (line 18) 45050* m68881: M680x0 Options. (line 197) 45051* m68hc11: M68hc1x Options. (line 13) 45052* m68hc12: M68hc1x Options. (line 18) 45053* m68hcs12: M68hc1x Options. (line 23) 45054* m68S12: M68hc1x Options. (line 23) 45055* m8-bit: CRIS Options. (line 64) 45056* m96bit-long-double: i386 and x86-64 Options. 45057 (line 278) 45058* mabi <1>: RS/6000 and PowerPC Options. 45059 (line 583) 45060* mabi <2>: i386 and x86-64 Options. 45061 (line 587) 45062* mabi: ARM Options. (line 10) 45063* mabi=32: MIPS Options. (line 132) 45064* mabi=64: MIPS Options. (line 132) 45065* mabi=eabi: MIPS Options. (line 132) 45066* mabi=gnu: MMIX Options. (line 20) 45067* mabi=ibmlongdouble: RS/6000 and PowerPC Options. 45068 (line 596) 45069* mabi=ieeelongdouble: RS/6000 and PowerPC Options. 45070 (line 600) 45071* mabi=mmixware: MMIX Options. (line 20) 45072* mabi=n32: MIPS Options. (line 132) 45073* mabi=no-spe: RS/6000 and PowerPC Options. 45074 (line 593) 45075* mabi=o64: MIPS Options. (line 132) 45076* mabi=spe: RS/6000 and PowerPC Options. 45077 (line 588) 45078* mabicalls: MIPS Options. (line 156) 45079* mabort-on-noreturn: ARM Options. (line 162) 45080* mabsdiff: MeP Options. (line 7) 45081* mabshi: PDP-11 Options. (line 55) 45082* mac0: PDP-11 Options. (line 16) 45083* macc-4: FRV Options. (line 113) 45084* macc-8: FRV Options. (line 116) 45085* maccumulate-outgoing-args <1>: SH Options. (line 199) 45086* maccumulate-outgoing-args: i386 and x86-64 Options. 45087 (line 604) 45088* maddress-space-conversion: SPU Options. (line 63) 45089* madjust-unroll: SH Options. (line 219) 45090* mads: RS/6000 and PowerPC Options. 45091 (line 626) 45092* maix-struct-return: RS/6000 and PowerPC Options. 45093 (line 576) 45094* maix32: RS/6000 and PowerPC Options. 45095 (line 304) 45096* maix64: RS/6000 and PowerPC Options. 45097 (line 304) 45098* malign-300: H8/300 Options. (line 31) 45099* malign-double: i386 and x86-64 Options. 45100 (line 262) 45101* malign-int: M680x0 Options. (line 267) 45102* malign-labels: FRV Options. (line 104) 45103* malign-loops: M32R/D Options. (line 73) 45104* malign-natural: RS/6000 and PowerPC Options. 45105 (line 343) 45106* malign-power: RS/6000 and PowerPC Options. 45107 (line 343) 45108* mall-opts: MeP Options. (line 11) 45109* malloc-cc: FRV Options. (line 25) 45110* malpha-as: DEC Alpha Options. (line 159) 45111* maltivec: RS/6000 and PowerPC Options. 45112 (line 191) 45113* mam33: MN10300 Options. (line 17) 45114* mam33-2: MN10300 Options. (line 24) 45115* mam34: MN10300 Options. (line 28) 45116* mandroid: GNU/Linux Options. (line 21) 45117* mapcs: ARM Options. (line 22) 45118* mapcs-frame: ARM Options. (line 14) 45119* mapp-regs <1>: V850 Options. (line 57) 45120* mapp-regs: SPARC Options. (line 10) 45121* march <1>: S/390 and zSeries Options. 45122 (line 116) 45123* march <2>: MIPS Options. (line 14) 45124* march <3>: M680x0 Options. (line 12) 45125* march <4>: i386 and x86-64 Options. 45126 (line 161) 45127* march <5>: HPPA Options. (line 9) 45128* march <6>: CRIS Options. (line 10) 45129* march: ARM Options. (line 108) 45130* mas100-syntax: RX Options. (line 75) 45131* masm=DIALECT: i386 and x86-64 Options. 45132 (line 218) 45133* matomic-updates: SPU Options. (line 78) 45134* mauto-incdec: M68hc1x Options. (line 26) 45135* mauto-pic: IA-64 Options. (line 50) 45136* maverage: MeP Options. (line 16) 45137* mavoid-indexed-addresses: RS/6000 and PowerPC Options. 45138 (line 412) 45139* mb: SH Options. (line 74) 45140* mbackchain: S/390 and zSeries Options. 45141 (line 35) 45142* mbarrel-shift-enabled: LM32 Options. (line 9) 45143* mbase-addresses: MMIX Options. (line 54) 45144* mbased=: MeP Options. (line 20) 45145* mbcopy: PDP-11 Options. (line 36) 45146* mbcopy-builtin: PDP-11 Options. (line 32) 45147* mbig: RS/6000 and PowerPC Options. 45148 (line 493) 45149* mbig-endian <1>: RS/6000 and PowerPC Options. 45150 (line 493) 45151* mbig-endian <2>: MCore Options. (line 39) 45152* mbig-endian <3>: IA-64 Options. (line 9) 45153* mbig-endian: ARM Options. (line 67) 45154* mbig-endian-data: RX Options. (line 42) 45155* mbig-switch <1>: V850 Options. (line 52) 45156* mbig-switch: HPPA Options. (line 23) 45157* mbigtable: SH Options. (line 90) 45158* mbionic: GNU/Linux Options. (line 17) 45159* mbit-align: RS/6000 and PowerPC Options. 45160 (line 444) 45161* mbitfield: M680x0 Options. (line 235) 45162* mbitops <1>: SH Options. (line 94) 45163* mbitops: MeP Options. (line 26) 45164* mblock-move-inline-limit: RS/6000 and PowerPC Options. 45165 (line 695) 45166* mbranch-cheap: PDP-11 Options. (line 65) 45167* mbranch-cost: MIPS Options. (line 622) 45168* mbranch-cost=NUMBER: M32R/D Options. (line 82) 45169* mbranch-expensive: PDP-11 Options. (line 61) 45170* mbranch-hints: SPU Options. (line 27) 45171* mbranch-likely: MIPS Options. (line 629) 45172* mbranch-predict: MMIX Options. (line 49) 45173* mbss-plt: RS/6000 and PowerPC Options. 45174 (line 214) 45175* mbuild-constants: DEC Alpha Options. (line 142) 45176* mbwx: DEC Alpha Options. (line 171) 45177* mc68000: M680x0 Options. (line 95) 45178* mc68020: M680x0 Options. (line 109) 45179* mc=: MeP Options. (line 31) 45180* mcache-size: SPU Options. (line 70) 45181* mcall-eabi: RS/6000 and PowerPC Options. 45182 (line 546) 45183* mcall-freebsd: RS/6000 and PowerPC Options. 45184 (line 564) 45185* mcall-gnu: RS/6000 and PowerPC Options. 45186 (line 560) 45187* mcall-linux: RS/6000 and PowerPC Options. 45188 (line 556) 45189* mcall-netbsd: RS/6000 and PowerPC Options. 45190 (line 568) 45191* mcall-prologues: AVR Options. (line 36) 45192* mcall-sysv: RS/6000 and PowerPC Options. 45193 (line 538) 45194* mcall-sysv-eabi: RS/6000 and PowerPC Options. 45195 (line 546) 45196* mcall-sysv-noeabi: RS/6000 and PowerPC Options. 45197 (line 549) 45198* mcallee-super-interworking: ARM Options. (line 255) 45199* mcaller-super-interworking: ARM Options. (line 262) 45200* mcallgraph-data: MCore Options. (line 31) 45201* mcc-init: CRIS Options. (line 41) 45202* mcfv4e: M680x0 Options. (line 172) 45203* mcheck-zero-division: MIPS Options. (line 428) 45204* mcirrus-fix-invalid-insns: ARM Options. (line 202) 45205* mcix: DEC Alpha Options. (line 171) 45206* mcld: i386 and x86-64 Options. 45207 (line 501) 45208* mclip: MeP Options. (line 35) 45209* mcmodel=embmedany: SPARC Options. (line 199) 45210* mcmodel=kernel: i386 and x86-64 Options. 45211 (line 709) 45212* mcmodel=large <1>: RS/6000 and PowerPC Options. 45213 (line 185) 45214* mcmodel=large: i386 and x86-64 Options. 45215 (line 721) 45216* mcmodel=medany: SPARC Options. (line 193) 45217* mcmodel=medium <1>: RS/6000 and PowerPC Options. 45218 (line 181) 45219* mcmodel=medium: i386 and x86-64 Options. 45220 (line 714) 45221* mcmodel=medlow: SPARC Options. (line 182) 45222* mcmodel=medmid: SPARC Options. (line 187) 45223* mcmodel=small <1>: RS/6000 and PowerPC Options. 45224 (line 177) 45225* mcmodel=small: i386 and x86-64 Options. 45226 (line 703) 45227* mcmpb: RS/6000 and PowerPC Options. 45228 (line 33) 45229* mcode-readable: MIPS Options. (line 388) 45230* mcond-exec: FRV Options. (line 152) 45231* mcond-move: FRV Options. (line 128) 45232* mconfig=: MeP Options. (line 39) 45233* mconsole: i386 and x86-64 Windows Options. 45234 (line 9) 45235* mconst-align: CRIS Options. (line 55) 45236* mconst16: Xtensa Options. (line 10) 45237* mconstant-gp: IA-64 Options. (line 46) 45238* mcop: MeP Options. (line 48) 45239* mcop32: MeP Options. (line 53) 45240* mcop64: MeP Options. (line 56) 45241* mcorea: Blackfin Options. (line 150) 45242* mcoreb: Blackfin Options. (line 156) 45243* mcpu <1>: SPARC Options. (line 81) 45244* mcpu <2>: RS/6000 and PowerPC Options. 45245 (line 119) 45246* mcpu <3>: picoChip Options. (line 9) 45247* mcpu <4>: M680x0 Options. (line 28) 45248* mcpu <5>: i386 and x86-64 Options. 45249 (line 166) 45250* mcpu <6>: FRV Options. (line 212) 45251* mcpu <7>: DEC Alpha Options. (line 223) 45252* mcpu <8>: CRIS Options. (line 10) 45253* mcpu <9>: ARM Options. (line 79) 45254* mcpu: ARC Options. (line 23) 45255* mcpu32: M680x0 Options. (line 138) 45256* mcpu= <1>: MicroBlaze Options. (line 20) 45257* mcpu= <2>: M32C Options. (line 7) 45258* mcpu=: Blackfin Options. (line 7) 45259* mcrc32: i386 and x86-64 Options. 45260 (line 543) 45261* mcsync-anomaly: Blackfin Options. (line 56) 45262* mcx16: i386 and x86-64 Options. 45263 (line 521) 45264* MD: Preprocessor Options. 45265 (line 262) 45266* mdalign: SH Options. (line 80) 45267* mdata: ARC Options. (line 30) 45268* mdata-align: CRIS Options. (line 55) 45269* mdc: MeP Options. (line 62) 45270* mdebug <1>: S/390 and zSeries Options. 45271 (line 112) 45272* mdebug: M32R/D Options. (line 69) 45273* mdebug-main=PREFIX <1>: IA-64/VMS Options. (line 13) 45274* mdebug-main=PREFIX: DEC Alpha/VMS Options. 45275 (line 13) 45276* mdec-asm: PDP-11 Options. (line 72) 45277* mdisable-callt: V850 Options. (line 93) 45278* mdisable-fpregs: HPPA Options. (line 33) 45279* mdisable-indexing: HPPA Options. (line 40) 45280* mdiv <1>: MeP Options. (line 65) 45281* mdiv <2>: MCore Options. (line 15) 45282* mdiv: M680x0 Options. (line 209) 45283* mdiv=STRATEGY: SH Options. (line 158) 45284* mdivide-breaks: MIPS Options. (line 434) 45285* mdivide-enabled: LM32 Options. (line 12) 45286* mdivide-traps: MIPS Options. (line 434) 45287* mdivsi3_libfunc=NAME: SH Options. (line 205) 45288* mdll: i386 and x86-64 Windows Options. 45289 (line 16) 45290* mdlmzb: RS/6000 and PowerPC Options. 45291 (line 437) 45292* mdmx: MIPS Options. (line 281) 45293* mdouble: FRV Options. (line 38) 45294* mdouble-float <1>: RS/6000 and PowerPC Options. 45295 (line 361) 45296* mdouble-float: MIPS Options. (line 239) 45297* mdsp: MIPS Options. (line 258) 45298* mdspr2: MIPS Options. (line 264) 45299* mdual-nops: SPU Options. (line 90) 45300* mdwarf2-asm: IA-64 Options. (line 94) 45301* mdword: FRV Options. (line 32) 45302* mdynamic-no-pic: RS/6000 and PowerPC Options. 45303 (line 498) 45304* mea32: SPU Options. (line 55) 45305* mea64: SPU Options. (line 55) 45306* meabi: RS/6000 and PowerPC Options. 45307 (line 645) 45308* mearly-stop-bits: IA-64 Options. (line 100) 45309* meb <1>: Score Options. (line 9) 45310* meb: MeP Options. (line 68) 45311* mel <1>: Score Options. (line 12) 45312* mel: MeP Options. (line 71) 45313* melf <1>: MMIX Options. (line 44) 45314* melf: CRIS Options. (line 87) 45315* memb: RS/6000 and PowerPC Options. 45316 (line 640) 45317* membedded-data: MIPS Options. (line 375) 45318* memregs=: M32C Options. (line 21) 45319* mep: V850 Options. (line 16) 45320* mepsilon: MMIX Options. (line 15) 45321* merror-reloc: SPU Options. (line 10) 45322* mesa: S/390 and zSeries Options. 45323 (line 95) 45324* metrax100: CRIS Options. (line 26) 45325* metrax4: CRIS Options. (line 26) 45326* mexplicit-relocs <1>: MIPS Options. (line 419) 45327* mexplicit-relocs: DEC Alpha Options. (line 184) 45328* mextern-sdata: MIPS Options. (line 337) 45329* MF: Preprocessor Options. 45330 (line 208) 45331* mfast-fp: Blackfin Options. (line 129) 45332* mfast-indirect-calls: HPPA Options. (line 52) 45333* mfaster-structs: SPARC Options. (line 71) 45334* mfdpic: FRV Options. (line 56) 45335* mfentry: i386 and x86-64 Options. 45336 (line 668) 45337* mfix: DEC Alpha Options. (line 171) 45338* mfix-24k: MIPS Options. (line 487) 45339* mfix-and-continue: Darwin Options. (line 106) 45340* mfix-cortex-m3-ldrd: ARM Options. (line 295) 45341* mfix-r10000: MIPS Options. (line 514) 45342* mfix-r4000: MIPS Options. (line 493) 45343* mfix-r4400: MIPS Options. (line 507) 45344* mfix-sb1: MIPS Options. (line 546) 45345* mfix-vr4120: MIPS Options. (line 525) 45346* mfix-vr4130: MIPS Options. (line 539) 45347* mfixed-cc: FRV Options. (line 28) 45348* mfixed-range <1>: SPU Options. (line 47) 45349* mfixed-range <2>: SH Options. (line 212) 45350* mfixed-range <3>: IA-64 Options. (line 105) 45351* mfixed-range: HPPA Options. (line 59) 45352* mflip-mips16: MIPS Options. (line 112) 45353* mfloat-abi: ARM Options. (line 41) 45354* mfloat-gprs: RS/6000 and PowerPC Options. 45355 (line 249) 45356* mfloat-ieee: DEC Alpha Options. (line 179) 45357* mfloat-vax: DEC Alpha Options. (line 179) 45358* mfloat32: PDP-11 Options. (line 52) 45359* mfloat64: PDP-11 Options. (line 48) 45360* mflush-func: MIPS Options. (line 613) 45361* mflush-func=NAME: M32R/D Options. (line 94) 45362* mflush-trap=NUMBER: M32R/D Options. (line 87) 45363* mfmovd: SH Options. (line 97) 45364* mforce-no-pic: Xtensa Options. (line 41) 45365* mfp: ARM Options. (line 120) 45366* mfp-exceptions: MIPS Options. (line 640) 45367* mfp-reg: DEC Alpha Options. (line 25) 45368* mfp-rounding-mode: DEC Alpha Options. (line 85) 45369* mfp-trap-mode: DEC Alpha Options. (line 63) 45370* mfp16-format: ARM Options. (line 141) 45371* mfp32: MIPS Options. (line 222) 45372* mfp64: MIPS Options. (line 225) 45373* mfpe: ARM Options. (line 120) 45374* mfpmath <1>: i386 and x86-64 Options. 45375 (line 169) 45376* mfpmath: Optimize Options. (line 1835) 45377* mfpr-32: FRV Options. (line 13) 45378* mfpr-64: FRV Options. (line 16) 45379* mfprnd: RS/6000 and PowerPC Options. 45380 (line 33) 45381* mfpu <1>: SPARC Options. (line 20) 45382* mfpu <2>: RS/6000 and PowerPC Options. 45383 (line 369) 45384* mfpu <3>: PDP-11 Options. (line 9) 45385* mfpu: ARM Options. (line 120) 45386* mfriz: RS/6000 and PowerPC Options. 45387 (line 825) 45388* mfull-toc: RS/6000 and PowerPC Options. 45389 (line 277) 45390* mfused-madd <1>: Xtensa Options. (line 19) 45391* mfused-madd <2>: S/390 and zSeries Options. 45392 (line 137) 45393* mfused-madd <3>: RS/6000 and PowerPC Options. 45394 (line 421) 45395* mfused-madd <4>: MIPS Options. (line 469) 45396* mfused-madd <5>: IA-64 Options. (line 88) 45397* mfused-madd: i386 and x86-64 Options. 45398 (line 496) 45399* mg: VAX Options. (line 17) 45400* MG: Preprocessor Options. 45401 (line 217) 45402* mgas <1>: HPPA Options. (line 75) 45403* mgas: DEC Alpha Options. (line 159) 45404* mgen-cell-microcode: RS/6000 and PowerPC Options. 45405 (line 202) 45406* mgettrcost=NUMBER: SH Options. (line 234) 45407* mglibc: GNU/Linux Options. (line 9) 45408* mgnu: VAX Options. (line 13) 45409* mgnu-as: IA-64 Options. (line 18) 45410* mgnu-ld <1>: IA-64 Options. (line 23) 45411* mgnu-ld: HPPA Options. (line 111) 45412* mgotplt: CRIS Options. (line 81) 45413* mgp32: MIPS Options. (line 216) 45414* mgp64: MIPS Options. (line 219) 45415* mgpopt: MIPS Options. (line 360) 45416* mgpr-32: FRV Options. (line 7) 45417* mgpr-64: FRV Options. (line 10) 45418* mgprel-ro: FRV Options. (line 79) 45419* mh: H8/300 Options. (line 14) 45420* mhard-dfp <1>: S/390 and zSeries Options. 45421 (line 20) 45422* mhard-dfp: RS/6000 and PowerPC Options. 45423 (line 33) 45424* mhard-float <1>: SPARC Options. (line 20) 45425* mhard-float <2>: S/390 and zSeries Options. 45426 (line 11) 45427* mhard-float <3>: RS/6000 and PowerPC Options. 45428 (line 355) 45429* mhard-float <4>: MIPS Options. (line 228) 45430* mhard-float <5>: MicroBlaze Options. (line 10) 45431* mhard-float <6>: M680x0 Options. (line 197) 45432* mhard-float <7>: FRV Options. (line 19) 45433* mhard-float: ARM Options. (line 57) 45434* mhard-quad-float: SPARC Options. (line 41) 45435* mhardlit: MCore Options. (line 10) 45436* mhint-max-distance: SPU Options. (line 102) 45437* mhint-max-nops: SPU Options. (line 96) 45438* mhitachi: SH Options. (line 101) 45439* mhp-ld: HPPA Options. (line 123) 45440* micplb: Blackfin Options. (line 169) 45441* mid-shared-library: Blackfin Options. (line 77) 45442* mieee <1>: SH Options. (line 116) 45443* mieee: DEC Alpha Options. (line 39) 45444* mieee-conformant: DEC Alpha Options. (line 134) 45445* mieee-fp: i386 and x86-64 Options. 45446 (line 224) 45447* mieee-with-inexact: DEC Alpha Options. (line 52) 45448* milp32: IA-64 Options. (line 121) 45449* mimpure-text: Solaris 2 Options. (line 9) 45450* mincoming-stack-boundary: i386 and x86-64 Options. 45451 (line 402) 45452* mindexed-addressing: SH Options. (line 224) 45453* minline-all-stringops: i386 and x86-64 Options. 45454 (line 625) 45455* minline-float-divide-max-throughput: IA-64 Options. (line 58) 45456* minline-float-divide-min-latency: IA-64 Options. (line 54) 45457* minline-ic_invalidate: SH Options. (line 123) 45458* minline-int-divide-max-throughput: IA-64 Options. (line 69) 45459* minline-int-divide-min-latency: IA-64 Options. (line 65) 45460* minline-plt <1>: FRV Options. (line 64) 45461* minline-plt: Blackfin Options. (line 134) 45462* minline-sqrt-max-throughput: IA-64 Options. (line 80) 45463* minline-sqrt-min-latency: IA-64 Options. (line 76) 45464* minline-stringops-dynamically: i386 and x86-64 Options. 45465 (line 632) 45466* minmax: M68hc1x Options. (line 31) 45467* minsert-sched-nops: RS/6000 and PowerPC Options. 45468 (line 526) 45469* mint-register: RX Options. (line 99) 45470* mint16: PDP-11 Options. (line 40) 45471* mint32 <1>: PDP-11 Options. (line 44) 45472* mint32: H8/300 Options. (line 28) 45473* mint8: AVR Options. (line 43) 45474* minterlink-mips16: MIPS Options. (line 119) 45475* minvalid-symbols: SH Options. (line 257) 45476* mio-volatile: MeP Options. (line 74) 45477* mips1: MIPS Options. (line 77) 45478* mips16: MIPS Options. (line 103) 45479* mips16e: MIPS Options. (line 103) 45480* mips2: MIPS Options. (line 80) 45481* mips3: MIPS Options. (line 83) 45482* mips32: MIPS Options. (line 89) 45483* mips32r2: MIPS Options. (line 92) 45484* mips3d: MIPS Options. (line 287) 45485* mips4: MIPS Options. (line 86) 45486* mips64: MIPS Options. (line 95) 45487* mips64r2: MIPS Options. (line 98) 45488* misel: RS/6000 and PowerPC Options. 45489 (line 220) 45490* misize: SH Options. (line 135) 45491* missue-rate=NUMBER: M32R/D Options. (line 79) 45492* mivc2: MeP Options. (line 59) 45493* mjump-in-delay: HPPA Options. (line 28) 45494* mkernel: Darwin Options. (line 84) 45495* mknuthdiv: MMIX Options. (line 33) 45496* ml <1>: SH Options. (line 77) 45497* ml: MeP Options. (line 78) 45498* mlarge-data: DEC Alpha Options. (line 195) 45499* mlarge-data-threshold=NUMBER: i386 and x86-64 Options. 45500 (line 304) 45501* mlarge-mem: SPU Options. (line 35) 45502* mlarge-text: DEC Alpha Options. (line 213) 45503* mleadz: MeP Options. (line 81) 45504* mleaf-id-shared-library: Blackfin Options. (line 88) 45505* mlibfuncs: MMIX Options. (line 10) 45506* mlibrary-pic: FRV Options. (line 110) 45507* mlinked-fp: FRV Options. (line 94) 45508* mlinker-opt: HPPA Options. (line 85) 45509* mlinux: CRIS Options. (line 91) 45510* mlittle: RS/6000 and PowerPC Options. 45511 (line 487) 45512* mlittle-endian <1>: SPARC Options. (line 171) 45513* mlittle-endian <2>: RS/6000 and PowerPC Options. 45514 (line 487) 45515* mlittle-endian <3>: MCore Options. (line 39) 45516* mlittle-endian <4>: IA-64 Options. (line 13) 45517* mlittle-endian: ARM Options. (line 63) 45518* mlittle-endian-data: RX Options. (line 42) 45519* mliw: MN10300 Options. (line 55) 45520* mllsc: MIPS Options. (line 244) 45521* mlocal-sdata: MIPS Options. (line 325) 45522* mlong-calls <1>: V850 Options. (line 10) 45523* mlong-calls <2>: MIPS Options. (line 455) 45524* mlong-calls <3>: M68hc1x Options. (line 35) 45525* mlong-calls <4>: FRV Options. (line 99) 45526* mlong-calls <5>: Blackfin Options. (line 117) 45527* mlong-calls: ARM Options. (line 167) 45528* mlong-double-128: S/390 and zSeries Options. 45529 (line 29) 45530* mlong-double-64: S/390 and zSeries Options. 45531 (line 29) 45532* mlong-load-store: HPPA Options. (line 66) 45533* mlong32: MIPS Options. (line 300) 45534* mlong64: MIPS Options. (line 295) 45535* mlongcall: RS/6000 and PowerPC Options. 45536 (line 715) 45537* mlongcalls: Xtensa Options. (line 72) 45538* mlow-64k: Blackfin Options. (line 66) 45539* mlp64: IA-64 Options. (line 121) 45540* mm: MeP Options. (line 84) 45541* MM: Preprocessor Options. 45542 (line 198) 45543* mmac <1>: Score Options. (line 21) 45544* mmac: CRX Options. (line 9) 45545* mmad: MIPS Options. (line 464) 45546* mmalloc64 <1>: IA-64/VMS Options. (line 17) 45547* mmalloc64: DEC Alpha/VMS Options. 45548 (line 17) 45549* mmangle-cpu: ARC Options. (line 15) 45550* mmax: DEC Alpha Options. (line 171) 45551* mmax-constant-size: RX Options. (line 81) 45552* mmax-stack-frame: CRIS Options. (line 22) 45553* mmcount-ra-address: MIPS Options. (line 689) 45554* mmcu: AVR Options. (line 9) 45555* MMD: Preprocessor Options. 45556 (line 278) 45557* mmedia: FRV Options. (line 44) 45558* mmemcpy <1>: MIPS Options. (line 449) 45559* mmemcpy: MicroBlaze Options. (line 13) 45560* mmemory-latency: DEC Alpha Options. (line 276) 45561* mmfcrf: RS/6000 and PowerPC Options. 45562 (line 33) 45563* mmfpgpr: RS/6000 and PowerPC Options. 45564 (line 33) 45565* mminimal-toc: RS/6000 and PowerPC Options. 45566 (line 277) 45567* mminmax: MeP Options. (line 87) 45568* mmmx: i386 and x86-64 Options. 45569 (line 472) 45570* mmodel=large: M32R/D Options. (line 33) 45571* mmodel=medium: M32R/D Options. (line 27) 45572* mmodel=small: M32R/D Options. (line 18) 45573* mmovbe: i386 and x86-64 Options. 45574 (line 539) 45575* mmt: MIPS Options. (line 292) 45576* mmul-bug-workaround: CRIS Options. (line 31) 45577* mmuladd: FRV Options. (line 50) 45578* mmulhw: RS/6000 and PowerPC Options. 45579 (line 430) 45580* mmult: MeP Options. (line 90) 45581* mmult-bug: MN10300 Options. (line 9) 45582* mmulti-cond-exec: FRV Options. (line 176) 45583* mmulticore: Blackfin Options. (line 138) 45584* mmultiple: RS/6000 and PowerPC Options. 45585 (line 380) 45586* mmvcle: S/390 and zSeries Options. 45587 (line 105) 45588* mmvme: RS/6000 and PowerPC Options. 45589 (line 621) 45590* mn: H8/300 Options. (line 20) 45591* mnested-cond-exec: FRV Options. (line 189) 45592* mnew-mnemonics: RS/6000 and PowerPC Options. 45593 (line 104) 45594* mnhwloop: Score Options. (line 15) 45595* mno-3dnow: i386 and x86-64 Options. 45596 (line 472) 45597* mno-4byte-functions: MCore Options. (line 27) 45598* mno-abicalls: MIPS Options. (line 156) 45599* mno-abshi: PDP-11 Options. (line 58) 45600* mno-ac0: PDP-11 Options. (line 20) 45601* mno-address-space-conversion: SPU Options. (line 63) 45602* mno-align-double: i386 and x86-64 Options. 45603 (line 262) 45604* mno-align-int: M680x0 Options. (line 267) 45605* mno-align-loops: M32R/D Options. (line 76) 45606* mno-align-stringops: i386 and x86-64 Options. 45607 (line 620) 45608* mno-altivec: RS/6000 and PowerPC Options. 45609 (line 191) 45610* mno-am33: MN10300 Options. (line 20) 45611* mno-app-regs <1>: V850 Options. (line 61) 45612* mno-app-regs: SPARC Options. (line 10) 45613* mno-as100-syntax: RX Options. (line 75) 45614* mno-atomic-updates: SPU Options. (line 78) 45615* mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 45616 (line 412) 45617* mno-backchain: S/390 and zSeries Options. 45618 (line 35) 45619* mno-base-addresses: MMIX Options. (line 54) 45620* mno-bit-align: RS/6000 and PowerPC Options. 45621 (line 444) 45622* mno-bitfield: M680x0 Options. (line 231) 45623* mno-branch-likely: MIPS Options. (line 629) 45624* mno-branch-predict: MMIX Options. (line 49) 45625* mno-bwx: DEC Alpha Options. (line 171) 45626* mno-callgraph-data: MCore Options. (line 31) 45627* mno-check-zero-division: MIPS Options. (line 428) 45628* mno-cirrus-fix-invalid-insns: ARM Options. (line 202) 45629* mno-cix: DEC Alpha Options. (line 171) 45630* mno-clearbss: MicroBlaze Options. (line 16) 45631* mno-cmpb: RS/6000 and PowerPC Options. 45632 (line 33) 45633* mno-cond-exec: FRV Options. (line 158) 45634* mno-cond-move: FRV Options. (line 134) 45635* mno-const-align: CRIS Options. (line 55) 45636* mno-const16: Xtensa Options. (line 10) 45637* mno-crt0: MN10300 Options. (line 44) 45638* mno-csync-anomaly: Blackfin Options. (line 62) 45639* mno-data-align: CRIS Options. (line 55) 45640* mno-debug: S/390 and zSeries Options. 45641 (line 112) 45642* mno-div <1>: MCore Options. (line 15) 45643* mno-div: M680x0 Options. (line 209) 45644* mno-dlmzb: RS/6000 and PowerPC Options. 45645 (line 437) 45646* mno-double: FRV Options. (line 41) 45647* mno-dsp: MIPS Options. (line 258) 45648* mno-dspr2: MIPS Options. (line 264) 45649* mno-dwarf2-asm: IA-64 Options. (line 94) 45650* mno-dword: FRV Options. (line 35) 45651* mno-eabi: RS/6000 and PowerPC Options. 45652 (line 645) 45653* mno-early-stop-bits: IA-64 Options. (line 100) 45654* mno-eflags: FRV Options. (line 125) 45655* mno-embedded-data: MIPS Options. (line 375) 45656* mno-ep: V850 Options. (line 16) 45657* mno-epsilon: MMIX Options. (line 15) 45658* mno-explicit-relocs <1>: MIPS Options. (line 419) 45659* mno-explicit-relocs: DEC Alpha Options. (line 184) 45660* mno-extern-sdata: MIPS Options. (line 337) 45661* mno-fancy-math-387: i386 and x86-64 Options. 45662 (line 251) 45663* mno-faster-structs: SPARC Options. (line 71) 45664* mno-fix: DEC Alpha Options. (line 171) 45665* mno-fix-24k: MIPS Options. (line 487) 45666* mno-fix-r10000: MIPS Options. (line 514) 45667* mno-fix-r4000: MIPS Options. (line 493) 45668* mno-fix-r4400: MIPS Options. (line 507) 45669* mno-float32: PDP-11 Options. (line 48) 45670* mno-float64: PDP-11 Options. (line 52) 45671* mno-flush-func: M32R/D Options. (line 99) 45672* mno-flush-trap: M32R/D Options. (line 91) 45673* mno-fp-in-toc: RS/6000 and PowerPC Options. 45674 (line 277) 45675* mno-fp-regs: DEC Alpha Options. (line 25) 45676* mno-fp-ret-in-387: i386 and x86-64 Options. 45677 (line 241) 45678* mno-fprnd: RS/6000 and PowerPC Options. 45679 (line 33) 45680* mno-fpu: SPARC Options. (line 25) 45681* mno-fused-madd <1>: Xtensa Options. (line 19) 45682* mno-fused-madd <2>: S/390 and zSeries Options. 45683 (line 137) 45684* mno-fused-madd <3>: RS/6000 and PowerPC Options. 45685 (line 421) 45686* mno-fused-madd <4>: MIPS Options. (line 469) 45687* mno-fused-madd <5>: IA-64 Options. (line 88) 45688* mno-fused-madd: i386 and x86-64 Options. 45689 (line 496) 45690* mno-gnu-as: IA-64 Options. (line 18) 45691* mno-gnu-ld: IA-64 Options. (line 23) 45692* mno-gotplt: CRIS Options. (line 81) 45693* mno-gpopt: MIPS Options. (line 360) 45694* mno-hard-dfp <1>: S/390 and zSeries Options. 45695 (line 20) 45696* mno-hard-dfp: RS/6000 and PowerPC Options. 45697 (line 33) 45698* mno-hardlit: MCore Options. (line 10) 45699* mno-id-shared-library: Blackfin Options. (line 84) 45700* mno-ieee-fp: i386 and x86-64 Options. 45701 (line 224) 45702* mno-inline-float-divide: IA-64 Options. (line 62) 45703* mno-inline-int-divide: IA-64 Options. (line 73) 45704* mno-inline-sqrt: IA-64 Options. (line 84) 45705* mno-int16: PDP-11 Options. (line 44) 45706* mno-int32: PDP-11 Options. (line 40) 45707* mno-interlink-mips16: MIPS Options. (line 119) 45708* mno-interrupts: AVR Options. (line 32) 45709* mno-isel: RS/6000 and PowerPC Options. 45710 (line 220) 45711* mno-knuthdiv: MMIX Options. (line 33) 45712* mno-leaf-id-shared-library: Blackfin Options. (line 94) 45713* mno-libfuncs: MMIX Options. (line 10) 45714* mno-llsc: MIPS Options. (line 244) 45715* mno-local-sdata: MIPS Options. (line 325) 45716* mno-long-calls <1>: V850 Options. (line 10) 45717* mno-long-calls <2>: MIPS Options. (line 455) 45718* mno-long-calls <3>: M68hc1x Options. (line 35) 45719* mno-long-calls <4>: HPPA Options. (line 136) 45720* mno-long-calls <5>: Blackfin Options. (line 117) 45721* mno-long-calls: ARM Options. (line 167) 45722* mno-longcall: RS/6000 and PowerPC Options. 45723 (line 715) 45724* mno-longcalls: Xtensa Options. (line 72) 45725* mno-low-64k: Blackfin Options. (line 70) 45726* mno-lsim <1>: MCore Options. (line 46) 45727* mno-lsim: FR30 Options. (line 14) 45728* mno-mad: MIPS Options. (line 464) 45729* mno-max: DEC Alpha Options. (line 171) 45730* mno-mcount-ra-address: MIPS Options. (line 689) 45731* mno-mdmx: MIPS Options. (line 281) 45732* mno-media: FRV Options. (line 47) 45733* mno-memcpy: MIPS Options. (line 449) 45734* mno-mfcrf: RS/6000 and PowerPC Options. 45735 (line 33) 45736* mno-mfpgpr: RS/6000 and PowerPC Options. 45737 (line 33) 45738* mno-mips16: MIPS Options. (line 103) 45739* mno-mips3d: MIPS Options. (line 287) 45740* mno-mmx: i386 and x86-64 Options. 45741 (line 472) 45742* mno-mt: MIPS Options. (line 292) 45743* mno-mul-bug-workaround: CRIS Options. (line 31) 45744* mno-muladd: FRV Options. (line 53) 45745* mno-mulhw: RS/6000 and PowerPC Options. 45746 (line 430) 45747* mno-mult-bug: MN10300 Options. (line 13) 45748* mno-multi-cond-exec: FRV Options. (line 183) 45749* mno-multiple: RS/6000 and PowerPC Options. 45750 (line 380) 45751* mno-mvcle: S/390 and zSeries Options. 45752 (line 105) 45753* mno-nested-cond-exec: FRV Options. (line 195) 45754* mno-optimize-membar: FRV Options. (line 205) 45755* mno-opts: MeP Options. (line 93) 45756* mno-pack: FRV Options. (line 122) 45757* mno-packed-stack: S/390 and zSeries Options. 45758 (line 54) 45759* mno-paired: RS/6000 and PowerPC Options. 45760 (line 234) 45761* mno-paired-single: MIPS Options. (line 275) 45762* mno-pic: IA-64 Options. (line 26) 45763* mno-plt: MIPS Options. (line 183) 45764* mno-popcntb: RS/6000 and PowerPC Options. 45765 (line 33) 45766* mno-popcntd: RS/6000 and PowerPC Options. 45767 (line 33) 45768* mno-power: RS/6000 and PowerPC Options. 45769 (line 33) 45770* mno-power2: RS/6000 and PowerPC Options. 45771 (line 33) 45772* mno-powerpc: RS/6000 and PowerPC Options. 45773 (line 33) 45774* mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 45775 (line 33) 45776* mno-powerpc-gpopt: RS/6000 and PowerPC Options. 45777 (line 33) 45778* mno-powerpc64: RS/6000 and PowerPC Options. 45779 (line 33) 45780* mno-prolog-function: V850 Options. (line 23) 45781* mno-prologue-epilogue: CRIS Options. (line 71) 45782* mno-prototype: RS/6000 and PowerPC Options. 45783 (line 605) 45784* mno-push-args: i386 and x86-64 Options. 45785 (line 597) 45786* mno-red-zone: i386 and x86-64 Options. 45787 (line 695) 45788* mno-register-names: IA-64 Options. (line 37) 45789* mno-regnames: RS/6000 and PowerPC Options. 45790 (line 709) 45791* mno-relax-immediate: MCore Options. (line 19) 45792* mno-relocatable: RS/6000 and PowerPC Options. 45793 (line 461) 45794* mno-relocatable-lib: RS/6000 and PowerPC Options. 45795 (line 472) 45796* mno-rtd: M680x0 Options. (line 262) 45797* mno-scc: FRV Options. (line 146) 45798* mno-sched-ar-data-spec: IA-64 Options. (line 135) 45799* mno-sched-ar-in-data-spec: IA-64 Options. (line 156) 45800* mno-sched-br-data-spec: IA-64 Options. (line 128) 45801* mno-sched-br-in-data-spec: IA-64 Options. (line 149) 45802* mno-sched-control-spec: IA-64 Options. (line 142) 45803* mno-sched-count-spec-in-critical-path: IA-64 Options. (line 183) 45804* mno-sched-in-control-spec: IA-64 Options. (line 163) 45805* mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 176) 45806* mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 169) 45807* mno-sched-prolog: ARM Options. (line 32) 45808* mno-sdata <1>: RS/6000 and PowerPC Options. 45809 (line 690) 45810* mno-sdata: IA-64 Options. (line 42) 45811* mno-sep-data: Blackfin Options. (line 112) 45812* mno-serialize-volatile: Xtensa Options. (line 35) 45813* mno-short: M680x0 Options. (line 226) 45814* mno-side-effects: CRIS Options. (line 46) 45815* mno-sim: RX Options. (line 70) 45816* mno-single-exit: MMIX Options. (line 66) 45817* mno-slow-bytes: MCore Options. (line 35) 45818* mno-small-exec: S/390 and zSeries Options. 45819 (line 80) 45820* mno-smartmips: MIPS Options. (line 271) 45821* mno-soft-float: DEC Alpha Options. (line 10) 45822* mno-space-regs: HPPA Options. (line 45) 45823* mno-spe: RS/6000 and PowerPC Options. 45824 (line 229) 45825* mno-specld-anomaly: Blackfin Options. (line 52) 45826* mno-split-addresses: MIPS Options. (line 413) 45827* mno-sse: i386 and x86-64 Options. 45828 (line 472) 45829* mno-stack-align: CRIS Options. (line 55) 45830* mno-stack-bias: SPARC Options. (line 208) 45831* mno-strict-align <1>: RS/6000 and PowerPC Options. 45832 (line 456) 45833* mno-strict-align: M680x0 Options. (line 287) 45834* mno-string: RS/6000 and PowerPC Options. 45835 (line 391) 45836* mno-sum-in-toc: RS/6000 and PowerPC Options. 45837 (line 277) 45838* mno-sym32: MIPS Options. (line 310) 45839* mno-target-align: Xtensa Options. (line 59) 45840* mno-text-section-literals: Xtensa Options. (line 47) 45841* mno-tls-markers: RS/6000 and PowerPC Options. 45842 (line 748) 45843* mno-toc: RS/6000 and PowerPC Options. 45844 (line 481) 45845* mno-toplevel-symbols: MMIX Options. (line 40) 45846* mno-tpf-trace: S/390 and zSeries Options. 45847 (line 131) 45848* mno-unaligned-doubles: SPARC Options. (line 59) 45849* mno-uninit-const-in-rodata: MIPS Options. (line 383) 45850* mno-update: RS/6000 and PowerPC Options. 45851 (line 402) 45852* mno-v8plus: SPARC Options. (line 156) 45853* mno-vis: SPARC Options. (line 163) 45854* mno-vliw-branch: FRV Options. (line 170) 45855* mno-volatile-asm-stop: IA-64 Options. (line 32) 45856* mno-vrsave: RS/6000 and PowerPC Options. 45857 (line 199) 45858* mno-vsx: RS/6000 and PowerPC Options. 45859 (line 243) 45860* mno-wide-bitfields: MCore Options. (line 23) 45861* mno-xgot <1>: MIPS Options. (line 193) 45862* mno-xgot: M680x0 Options. (line 319) 45863* mno-xl-compat: RS/6000 and PowerPC Options. 45864 (line 312) 45865* mno-zero-extend: MMIX Options. (line 27) 45866* mnobitfield: M680x0 Options. (line 231) 45867* mnoliw: MN10300 Options. (line 60) 45868* mnomacsave: SH Options. (line 112) 45869* mnominmax: M68hc1x Options. (line 31) 45870* mnop-fun-dllimport: i386 and x86-64 Windows Options. 45871 (line 22) 45872* mold-mnemonics: RS/6000 and PowerPC Options. 45873 (line 104) 45874* momit-leaf-frame-pointer <1>: i386 and x86-64 Options. 45875 (line 645) 45876* momit-leaf-frame-pointer: Blackfin Options. (line 40) 45877* mone-byte-bool: Darwin Options. (line 92) 45878* moptimize-membar: FRV Options. (line 201) 45879* MP: Preprocessor Options. 45880 (line 227) 45881* mpa-risc-1-0: HPPA Options. (line 19) 45882* mpa-risc-1-1: HPPA Options. (line 19) 45883* mpa-risc-2-0: HPPA Options. (line 19) 45884* mpack: FRV Options. (line 119) 45885* mpacked-stack: S/390 and zSeries Options. 45886 (line 54) 45887* mpadstruct: SH Options. (line 138) 45888* mpaired: RS/6000 and PowerPC Options. 45889 (line 234) 45890* mpaired-single: MIPS Options. (line 275) 45891* mpc32: i386 and x86-64 Options. 45892 (line 367) 45893* mpc64: i386 and x86-64 Options. 45894 (line 367) 45895* mpc80: i386 and x86-64 Options. 45896 (line 367) 45897* mpcrel: M680x0 Options. (line 279) 45898* mpdebug: CRIS Options. (line 35) 45899* mpe: RS/6000 and PowerPC Options. 45900 (line 332) 45901* mpe-aligned-commons: i386 and x86-64 Windows Options. 45902 (line 53) 45903* mpic-register: ARM Options. (line 198) 45904* mplt: MIPS Options. (line 183) 45905* mpoke-function-name: ARM Options. (line 212) 45906* mpopcntb: RS/6000 and PowerPC Options. 45907 (line 33) 45908* mpopcntd: RS/6000 and PowerPC Options. 45909 (line 33) 45910* mportable-runtime: HPPA Options. (line 71) 45911* mpower: RS/6000 and PowerPC Options. 45912 (line 33) 45913* mpower2: RS/6000 and PowerPC Options. 45914 (line 33) 45915* mpowerpc: RS/6000 and PowerPC Options. 45916 (line 33) 45917* mpowerpc-gfxopt: RS/6000 and PowerPC Options. 45918 (line 33) 45919* mpowerpc-gpopt: RS/6000 and PowerPC Options. 45920 (line 33) 45921* mpowerpc64: RS/6000 and PowerPC Options. 45922 (line 33) 45923* mprefergot: SH Options. (line 145) 45924* mpreferred-stack-boundary: i386 and x86-64 Options. 45925 (line 397) 45926* mprioritize-restricted-insns: RS/6000 and PowerPC Options. 45927 (line 510) 45928* mprolog-function: V850 Options. (line 23) 45929* mprologue-epilogue: CRIS Options. (line 71) 45930* mprototype: RS/6000 and PowerPC Options. 45931 (line 605) 45932* mpt-fixed: SH Options. (line 238) 45933* mpush-args <1>: i386 and x86-64 Options. 45934 (line 597) 45935* mpush-args: CRX Options. (line 13) 45936* MQ: Preprocessor Options. 45937 (line 253) 45938* mr10k-cache-barrier: MIPS Options. (line 551) 45939* mrecip <1>: RS/6000 and PowerPC Options. 45940 (line 760) 45941* mrecip: i386 and x86-64 Options. 45942 (line 549) 45943* mrecip-precision: RS/6000 and PowerPC Options. 45944 (line 796) 45945* mrecip=opt: RS/6000 and PowerPC Options. 45946 (line 773) 45947* mregister-names: IA-64 Options. (line 37) 45948* mregnames: RS/6000 and PowerPC Options. 45949 (line 709) 45950* mregparm: i386 and x86-64 Options. 45951 (line 334) 45952* mrelax <1>: SH Options. (line 86) 45953* mrelax <2>: RX Options. (line 94) 45954* mrelax <3>: MN10300 Options. (line 47) 45955* mrelax: H8/300 Options. (line 9) 45956* mrelax-immediate: MCore Options. (line 19) 45957* mrelax-pic-calls: MIPS Options. (line 676) 45958* mrelocatable: RS/6000 and PowerPC Options. 45959 (line 461) 45960* mrelocatable-lib: RS/6000 and PowerPC Options. 45961 (line 472) 45962* mrepeat: MeP Options. (line 96) 45963* mreturn-pointer-on-d0: MN10300 Options. (line 37) 45964* mrodata: ARC Options. (line 30) 45965* mrtd <1>: Function Attributes. 45966 (line 177) 45967* mrtd <2>: M680x0 Options. (line 240) 45968* mrtd: i386 and x86-64 Options. 45969 (line 310) 45970* mrtp: VxWorks Options. (line 11) 45971* ms <1>: MeP Options. (line 100) 45972* ms: H8/300 Options. (line 17) 45973* ms2600: H8/300 Options. (line 24) 45974* msafe-dma: SPU Options. (line 17) 45975* msafe-hints: SPU Options. (line 107) 45976* msahf: i386 and x86-64 Options. 45977 (line 529) 45978* msatur: MeP Options. (line 105) 45979* msave-acc-in-interrupts: RX Options. (line 108) 45980* mscc: FRV Options. (line 140) 45981* msched-ar-data-spec: IA-64 Options. (line 135) 45982* msched-ar-in-data-spec: IA-64 Options. (line 156) 45983* msched-br-data-spec: IA-64 Options. (line 128) 45984* msched-br-in-data-spec: IA-64 Options. (line 149) 45985* msched-control-spec: IA-64 Options. (line 142) 45986* msched-costly-dep: RS/6000 and PowerPC Options. 45987 (line 517) 45988* msched-count-spec-in-critical-path: IA-64 Options. (line 183) 45989* msched-fp-mem-deps-zero-cost: IA-64 Options. (line 200) 45990* msched-in-control-spec: IA-64 Options. (line 163) 45991* msched-max-memory-insns: IA-64 Options. (line 209) 45992* msched-max-memory-insns-hard-limit: IA-64 Options. (line 215) 45993* msched-prefer-non-control-spec-insns: IA-64 Options. (line 176) 45994* msched-prefer-non-data-spec-insns: IA-64 Options. (line 169) 45995* msched-spec-ldc: IA-64 Options. (line 189) 45996* msched-stop-bits-after-every-cycle: IA-64 Options. (line 196) 45997* mschedule: HPPA Options. (line 78) 45998* mscore5: Score Options. (line 25) 45999* mscore5u: Score Options. (line 28) 46000* mscore7: Score Options. (line 31) 46001* mscore7d: Score Options. (line 34) 46002* msda: V850 Options. (line 40) 46003* msdata <1>: RS/6000 and PowerPC Options. 46004 (line 677) 46005* msdata: IA-64 Options. (line 42) 46006* msdata=data: RS/6000 and PowerPC Options. 46007 (line 682) 46008* msdata=default: RS/6000 and PowerPC Options. 46009 (line 677) 46010* msdata=eabi: RS/6000 and PowerPC Options. 46011 (line 657) 46012* msdata=none <1>: RS/6000 and PowerPC Options. 46013 (line 690) 46014* msdata=none: M32R/D Options. (line 40) 46015* msdata=sdata: M32R/D Options. (line 49) 46016* msdata=sysv: RS/6000 and PowerPC Options. 46017 (line 668) 46018* msdata=use: M32R/D Options. (line 53) 46019* msdram <1>: MeP Options. (line 110) 46020* msdram: Blackfin Options. (line 163) 46021* msecure-plt: RS/6000 and PowerPC Options. 46022 (line 209) 46023* msel-sched-dont-check-control-spec: IA-64 Options. (line 205) 46024* msep-data: Blackfin Options. (line 106) 46025* mserialize-volatile: Xtensa Options. (line 35) 46026* mshared-library-id: Blackfin Options. (line 99) 46027* mshort <1>: M68hc1x Options. (line 40) 46028* mshort: M680x0 Options. (line 220) 46029* msign-extend-enabled: LM32 Options. (line 18) 46030* msim <1>: Xstormy16 Options. (line 9) 46031* msim <2>: RX Options. (line 70) 46032* msim <3>: RS/6000 and PowerPC Options. 46033 (line 615) 46034* msim <4>: MeP Options. (line 114) 46035* msim <5>: M32C Options. (line 13) 46036* msim: Blackfin Options. (line 33) 46037* msimnovec: MeP Options. (line 117) 46038* msimple-fpu: RS/6000 and PowerPC Options. 46039 (line 365) 46040* msingle-exit: MMIX Options. (line 66) 46041* msingle-float <1>: RS/6000 and PowerPC Options. 46042 (line 361) 46043* msingle-float: MIPS Options. (line 235) 46044* msingle-pic-base <1>: RS/6000 and PowerPC Options. 46045 (line 504) 46046* msingle-pic-base: ARM Options. (line 192) 46047* msio: HPPA Options. (line 105) 46048* mslow-bytes: MCore Options. (line 35) 46049* msmall-data: DEC Alpha Options. (line 195) 46050* msmall-data-limit: RX Options. (line 47) 46051* msmall-divides: MicroBlaze Options. (line 38) 46052* msmall-exec: S/390 and zSeries Options. 46053 (line 80) 46054* msmall-mem: SPU Options. (line 35) 46055* msmall-model: FR30 Options. (line 9) 46056* msmall-text: DEC Alpha Options. (line 213) 46057* msmartmips: MIPS Options. (line 271) 46058* msoft-float <1>: SPARC Options. (line 25) 46059* msoft-float <2>: S/390 and zSeries Options. 46060 (line 11) 46061* msoft-float <3>: RS/6000 and PowerPC Options. 46062 (line 355) 46063* msoft-float <4>: PDP-11 Options. (line 13) 46064* msoft-float <5>: MIPS Options. (line 231) 46065* msoft-float <6>: MicroBlaze Options. (line 7) 46066* msoft-float <7>: M680x0 Options. (line 203) 46067* msoft-float <8>: i386 and x86-64 Options. 46068 (line 229) 46069* msoft-float <9>: HPPA Options. (line 91) 46070* msoft-float <10>: FRV Options. (line 22) 46071* msoft-float <11>: DEC Alpha Options. (line 10) 46072* msoft-float: ARM Options. (line 60) 46073* msoft-quad-float: SPARC Options. (line 45) 46074* msoft-reg-count: M68hc1x Options. (line 43) 46075* mspace <1>: V850 Options. (line 30) 46076* mspace: SH Options. (line 142) 46077* mspe: RS/6000 and PowerPC Options. 46078 (line 229) 46079* mspecld-anomaly: Blackfin Options. (line 47) 46080* msplit-addresses: MIPS Options. (line 413) 46081* msse: i386 and x86-64 Options. 46082 (line 472) 46083* msse2avx: i386 and x86-64 Options. 46084 (line 663) 46085* msseregparm: i386 and x86-64 Options. 46086 (line 345) 46087* mstack-align: CRIS Options. (line 55) 46088* mstack-bias: SPARC Options. (line 208) 46089* mstack-check-l1: Blackfin Options. (line 73) 46090* mstack-guard: S/390 and zSeries Options. 46091 (line 156) 46092* mstack-increment: MCore Options. (line 50) 46093* mstack-size: S/390 and zSeries Options. 46094 (line 156) 46095* mstackrealign: i386 and x86-64 Options. 46096 (line 388) 46097* mstdmain: SPU Options. (line 40) 46098* mstrict-align <1>: RS/6000 and PowerPC Options. 46099 (line 456) 46100* mstrict-align: M680x0 Options. (line 287) 46101* mstring: RS/6000 and PowerPC Options. 46102 (line 391) 46103* mstringop-strategy=ALG: i386 and x86-64 Options. 46104 (line 637) 46105* mstructure-size-boundary: ARM Options. (line 147) 46106* msvr4-struct-return: RS/6000 and PowerPC Options. 46107 (line 579) 46108* msym32: MIPS Options. (line 310) 46109* msynci: MIPS Options. (line 661) 46110* MT: Preprocessor Options. 46111 (line 239) 46112* mtarget-align: Xtensa Options. (line 59) 46113* mtda: V850 Options. (line 34) 46114* mtext: ARC Options. (line 30) 46115* mtext-section-literals: Xtensa Options. (line 47) 46116* mtf: MeP Options. (line 121) 46117* mthread: i386 and x86-64 Windows Options. 46118 (line 26) 46119* mthreads: i386 and x86-64 Options. 46120 (line 612) 46121* mthumb: ARM Options. (line 233) 46122* mthumb-interwork: ARM Options. (line 25) 46123* mtiny-stack: AVR Options. (line 40) 46124* mtiny=: MeP Options. (line 125) 46125* mtls: FRV Options. (line 75) 46126* mTLS: FRV Options. (line 72) 46127* mtls-dialect: ARM Options. (line 278) 46128* mtls-direct-seg-refs: i386 and x86-64 Options. 46129 (line 653) 46130* mtls-markers: RS/6000 and PowerPC Options. 46131 (line 748) 46132* mtls-size: IA-64 Options. (line 112) 46133* mtoc: RS/6000 and PowerPC Options. 46134 (line 481) 46135* mtomcat-stats: FRV Options. (line 209) 46136* mtoplevel-symbols: MMIX Options. (line 40) 46137* mtp: ARM Options. (line 270) 46138* mtpcs-frame: ARM Options. (line 243) 46139* mtpcs-leaf-frame: ARM Options. (line 249) 46140* mtpf-trace: S/390 and zSeries Options. 46141 (line 131) 46142* mtrap-precision: DEC Alpha Options. (line 109) 46143* mtune <1>: SPARC Options. (line 143) 46144* mtune <2>: S/390 and zSeries Options. 46145 (line 124) 46146* mtune <3>: RS/6000 and PowerPC Options. 46147 (line 168) 46148* mtune <4>: MN10300 Options. (line 31) 46149* mtune <5>: MIPS Options. (line 62) 46150* mtune <6>: M680x0 Options. (line 70) 46151* mtune <7>: IA-64 Options. (line 116) 46152* mtune <8>: i386 and x86-64 Options. 46153 (line 10) 46154* mtune <9>: DEC Alpha Options. (line 267) 46155* mtune <10>: CRIS Options. (line 16) 46156* mtune: ARM Options. (line 98) 46157* muclibc: GNU/Linux Options. (line 13) 46158* muls: Score Options. (line 18) 46159* multcost=NUMBER: SH Options. (line 155) 46160* multi_module: Darwin Options. (line 199) 46161* multilib-library-pic: FRV Options. (line 89) 46162* multiply-enabled: LM32 Options. (line 15) 46163* multiply_defined: Darwin Options. (line 199) 46164* multiply_defined_unused: Darwin Options. (line 199) 46165* munaligned-doubles: SPARC Options. (line 59) 46166* municode: i386 and x86-64 Windows Options. 46167 (line 30) 46168* muninit-const-in-rodata: MIPS Options. (line 383) 46169* munix: VAX Options. (line 9) 46170* munix-asm: PDP-11 Options. (line 68) 46171* munsafe-dma: SPU Options. (line 17) 46172* mupdate: RS/6000 and PowerPC Options. 46173 (line 402) 46174* muser-enabled: LM32 Options. (line 21) 46175* musermode: SH Options. (line 150) 46176* mv850: V850 Options. (line 49) 46177* mv850e: V850 Options. (line 81) 46178* mv850e1: V850 Options. (line 73) 46179* mv850e2: V850 Options. (line 69) 46180* mv850e2v3: V850 Options. (line 64) 46181* mv850es: V850 Options. (line 77) 46182* mv8plus: SPARC Options. (line 156) 46183* mveclibabi <1>: RS/6000 and PowerPC Options. 46184 (line 805) 46185* mveclibabi: i386 and x86-64 Options. 46186 (line 566) 46187* mvect8-ret-in-mem: i386 and x86-64 Options. 46188 (line 355) 46189* mvis: SPARC Options. (line 163) 46190* mvliw-branch: FRV Options. (line 164) 46191* mvms-return-codes <1>: IA-64/VMS Options. (line 9) 46192* mvms-return-codes: DEC Alpha/VMS Options. 46193 (line 9) 46194* mvolatile-asm-stop: IA-64 Options. (line 32) 46195* mvr4130-align: MIPS Options. (line 650) 46196* mvrsave: RS/6000 and PowerPC Options. 46197 (line 199) 46198* mvsx: RS/6000 and PowerPC Options. 46199 (line 243) 46200* mvxworks: RS/6000 and PowerPC Options. 46201 (line 636) 46202* mvzeroupper: i386 and x86-64 Options. 46203 (line 515) 46204* mwarn-cell-microcode: RS/6000 and PowerPC Options. 46205 (line 205) 46206* mwarn-dynamicstack: S/390 and zSeries Options. 46207 (line 150) 46208* mwarn-framesize: S/390 and zSeries Options. 46209 (line 142) 46210* mwarn-reloc: SPU Options. (line 10) 46211* mwide-bitfields: MCore Options. (line 23) 46212* mwin32: i386 and x86-64 Windows Options. 46213 (line 35) 46214* mwindows: i386 and x86-64 Windows Options. 46215 (line 41) 46216* mword-relocations: ARM Options. (line 289) 46217* mwords-little-endian: ARM Options. (line 71) 46218* mxgot <1>: MIPS Options. (line 193) 46219* mxgot: M680x0 Options. (line 319) 46220* mxilinx-fpu: RS/6000 and PowerPC Options. 46221 (line 375) 46222* mxl-barrel-shift: MicroBlaze Options. (line 32) 46223* mxl-compat: RS/6000 and PowerPC Options. 46224 (line 312) 46225* mxl-float-convert: MicroBlaze Options. (line 50) 46226* mxl-float-sqrt: MicroBlaze Options. (line 53) 46227* mxl-gp-opt: MicroBlaze Options. (line 44) 46228* mxl-multiply-high: MicroBlaze Options. (line 47) 46229* mxl-pattern-compare: MicroBlaze Options. (line 35) 46230* mxl-soft-div: MicroBlaze Options. (line 29) 46231* mxl-soft-mul: MicroBlaze Options. (line 26) 46232* mxl-stack-check: MicroBlaze Options. (line 41) 46233* myellowknife: RS/6000 and PowerPC Options. 46234 (line 631) 46235* mzarch: S/390 and zSeries Options. 46236 (line 95) 46237* mzda: V850 Options. (line 45) 46238* mzero-extend: MMIX Options. (line 27) 46239* no-canonical-prefixes: Overall Options. (line 338) 46240* no-integrated-cpp: C Dialect Options. (line 272) 46241* no_dead_strip_inits_and_terms: Darwin Options. (line 199) 46242* noall_load: Darwin Options. (line 199) 46243* nocpp: MIPS Options. (line 481) 46244* nodefaultlibs: Link Options. (line 62) 46245* nofixprebinding: Darwin Options. (line 199) 46246* nofpu: RX Options. (line 17) 46247* nolibdld: HPPA Options. (line 188) 46248* nomultidefs: Darwin Options. (line 199) 46249* non-static: VxWorks Options. (line 16) 46250* noprebind: Darwin Options. (line 199) 46251* noseglinkedit: Darwin Options. (line 199) 46252* nostartfiles: Link Options. (line 57) 46253* nostdinc: Preprocessor Options. 46254 (line 385) 46255* nostdinc++ <1>: Preprocessor Options. 46256 (line 390) 46257* nostdinc++: C++ Dialect Options. 46258 (line 322) 46259* nostdlib: Link Options. (line 73) 46260* o: Preprocessor Options. 46261 (line 75) 46262* O: Optimize Options. (line 39) 46263* o: Overall Options. (line 192) 46264* O0: Optimize Options. (line 127) 46265* O1: Optimize Options. (line 39) 46266* O2: Optimize Options. (line 82) 46267* O3: Optimize Options. (line 120) 46268* Ofast: Optimize Options. (line 141) 46269* Os: Optimize Options. (line 131) 46270* P: Preprocessor Options. 46271 (line 603) 46272* p: Debugging Options. (line 291) 46273* pagezero_size: Darwin Options. (line 199) 46274* param: Optimize Options. (line 2190) 46275* pass-exit-codes: Overall Options. (line 150) 46276* pedantic <1>: Warnings and Errors. 46277 (line 25) 46278* pedantic <2>: Alternate Keywords. (line 30) 46279* pedantic <3>: C Extensions. (line 6) 46280* pedantic <4>: Preprocessor Options. 46281 (line 163) 46282* pedantic <5>: Warning Options. (line 72) 46283* pedantic: Standards. (line 16) 46284* pedantic-errors <1>: Warnings and Errors. 46285 (line 25) 46286* pedantic-errors <2>: Non-bugs. (line 216) 46287* pedantic-errors <3>: Preprocessor Options. 46288 (line 168) 46289* pedantic-errors <4>: Warning Options. (line 114) 46290* pedantic-errors: Standards. (line 16) 46291* pg: Debugging Options. (line 297) 46292* pie: Link Options. (line 95) 46293* pipe: Overall Options. (line 215) 46294* prebind: Darwin Options. (line 199) 46295* prebind_all_twolevel_modules: Darwin Options. (line 199) 46296* print-file-name: Debugging Options. (line 1070) 46297* print-libgcc-file-name: Debugging Options. (line 1100) 46298* print-multi-directory: Debugging Options. (line 1076) 46299* print-multi-lib: Debugging Options. (line 1081) 46300* print-multi-os-directory: Debugging Options. (line 1088) 46301* print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 46302 (line 203) 46303* print-prog-name: Debugging Options. (line 1097) 46304* print-search-dirs: Debugging Options. (line 1108) 46305* print-sysroot: Debugging Options. (line 1121) 46306* print-sysroot-headers-suffix: Debugging Options. (line 1128) 46307* private_bundle: Darwin Options. (line 199) 46308* pthread <1>: Solaris 2 Options. (line 37) 46309* pthread: RS/6000 and PowerPC Options. 46310 (line 755) 46311* pthreads: Solaris 2 Options. (line 31) 46312* Q: Debugging Options. (line 303) 46313* Qn: System V Options. (line 18) 46314* Qy: System V Options. (line 14) 46315* rdynamic: Link Options. (line 101) 46316* read_only_relocs: Darwin Options. (line 199) 46317* remap: Preprocessor Options. 46318 (line 651) 46319* s: Link Options. (line 108) 46320* S <1>: Link Options. (line 20) 46321* S: Overall Options. (line 175) 46322* save-temps: Debugging Options. (line 978) 46323* save-temps=obj: Debugging Options. (line 1004) 46324* sectalign: Darwin Options. (line 199) 46325* sectcreate: Darwin Options. (line 199) 46326* sectobjectsymbols: Darwin Options. (line 199) 46327* sectorder: Darwin Options. (line 199) 46328* seg1addr: Darwin Options. (line 199) 46329* seg_addr_table: Darwin Options. (line 199) 46330* seg_addr_table_filename: Darwin Options. (line 199) 46331* segaddr: Darwin Options. (line 199) 46332* seglinkedit: Darwin Options. (line 199) 46333* segprot: Darwin Options. (line 199) 46334* segs_read_only_addr: Darwin Options. (line 199) 46335* segs_read_write_addr: Darwin Options. (line 199) 46336* shared: Link Options. (line 117) 46337* shared-libgcc: Link Options. (line 125) 46338* sim: CRIS Options. (line 95) 46339* sim2: CRIS Options. (line 101) 46340* single_module: Darwin Options. (line 199) 46341* specs: Directory Options. (line 89) 46342* static <1>: HPPA Options. (line 192) 46343* static <2>: Darwin Options. (line 199) 46344* static: Link Options. (line 112) 46345* static-libgcc: Link Options. (line 125) 46346* std <1>: Non-bugs. (line 107) 46347* std <2>: Other Builtins. (line 22) 46348* std <3>: C Dialect Options. (line 47) 46349* std: Standards. (line 16) 46350* std=: Preprocessor Options. 46351 (line 326) 46352* sub_library: Darwin Options. (line 199) 46353* sub_umbrella: Darwin Options. (line 199) 46354* symbolic: Link Options. (line 172) 46355* sysroot: Directory Options. (line 97) 46356* T: Link Options. (line 178) 46357* target-help <1>: Preprocessor Options. 46358 (line 656) 46359* target-help: Overall Options. (line 230) 46360* threads <1>: Solaris 2 Options. (line 25) 46361* threads: HPPA Options. (line 205) 46362* time: Debugging Options. (line 1019) 46363* tno-android-cc: GNU/Linux Options. (line 31) 46364* tno-android-ld: GNU/Linux Options. (line 35) 46365* traditional <1>: Incompatibilities. (line 6) 46366* traditional: C Dialect Options. (line 284) 46367* traditional-cpp <1>: Preprocessor Options. 46368 (line 634) 46369* traditional-cpp: C Dialect Options. (line 284) 46370* trigraphs <1>: Preprocessor Options. 46371 (line 638) 46372* trigraphs: C Dialect Options. (line 268) 46373* twolevel_namespace: Darwin Options. (line 199) 46374* u: Link Options. (line 211) 46375* U: Preprocessor Options. 46376 (line 57) 46377* umbrella: Darwin Options. (line 199) 46378* undef: Preprocessor Options. 46379 (line 61) 46380* undefined: Darwin Options. (line 199) 46381* unexported_symbols_list: Darwin Options. (line 199) 46382* v <1>: Preprocessor Options. 46383 (line 660) 46384* v: Overall Options. (line 203) 46385* version <1>: Preprocessor Options. 46386 (line 673) 46387* version: Overall Options. (line 342) 46388* W: Incompatibilities. (line 64) 46389* w: Preprocessor Options. 46390 (line 159) 46391* W: Warning Options. (line 166) 46392* w: Warning Options. (line 25) 46393* Wa: Assembler Options. (line 9) 46394* Wabi: C++ Dialect Options. 46395 (line 336) 46396* Waddress: Warning Options. (line 1094) 46397* Waggregate-return: Warning Options. (line 1112) 46398* Wall <1>: Standard Libraries. (line 6) 46399* Wall <2>: Preprocessor Options. 46400 (line 81) 46401* Wall: Warning Options. (line 118) 46402* Warray-bounds: Warning Options. (line 786) 46403* Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 46404 (line 157) 46405* Wattributes: Warning Options. (line 1117) 46406* Wbad-function-cast: Warning Options. (line 984) 46407* Wbuiltin-macro-redefined: Warning Options. (line 1123) 46408* Wcast-align: Warning Options. (line 1015) 46409* Wcast-qual: Warning Options. (line 999) 46410* Wchar-subscripts: Warning Options. (line 205) 46411* Wclobbered: Warning Options. (line 1035) 46412* Wcomment <1>: Preprocessor Options. 46413 (line 89) 46414* Wcomment: Warning Options. (line 210) 46415* Wcomments: Preprocessor Options. 46416 (line 89) 46417* Wconversion: Warning Options. (line 1039) 46418* Wconversion-null: Warning Options. (line 1057) 46419* Wcoverage-mismatch: Language Independent Options. 46420 (line 42) 46421* Wctor-dtor-privacy: C++ Dialect Options. 46422 (line 446) 46423* Wdeclaration-after-statement: Warning Options. (line 925) 46424* Wdeprecated: Warning Options. (line 1252) 46425* Wdeprecated-declarations: Warning Options. (line 1256) 46426* Wdisabled-optimization: Warning Options. (line 1383) 46427* Wdiv-by-zero: Warning Options. (line 791) 46428* Wdouble-promotion: Warning Options. (line 220) 46429* weak_reference_mismatches: Darwin Options. (line 199) 46430* Weffc++: C++ Dialect Options. 46431 (line 479) 46432* Wempty-body: Warning Options. (line 1061) 46433* Wendif-labels <1>: Preprocessor Options. 46434 (line 136) 46435* Wendif-labels: Warning Options. (line 935) 46436* Wenum-compare: Warning Options. (line 1065) 46437* Werror <1>: Preprocessor Options. 46438 (line 149) 46439* Werror: Warning Options. (line 28) 46440* Werror=: Warning Options. (line 31) 46441* Wextra: Warning Options. (line 166) 46442* Wfatal-errors: Warning Options. (line 48) 46443* Wfloat-equal: Warning Options. (line 825) 46444* Wformat <1>: Function Attributes. 46445 (line 420) 46446* Wformat: Warning Options. (line 238) 46447* Wformat-contains-nul: Warning Options. (line 277) 46448* Wformat-extra-args: Warning Options. (line 281) 46449* Wformat-nonliteral <1>: Function Attributes. 46450 (line 485) 46451* Wformat-nonliteral: Warning Options. (line 299) 46452* Wformat-security: Warning Options. (line 304) 46453* Wformat-y2k: Warning Options. (line 273) 46454* Wformat-zero-length: Warning Options. (line 295) 46455* Wformat=2: Warning Options. (line 315) 46456* Wframe-larger-than: Warning Options. (line 949) 46457* whatsloaded: Darwin Options. (line 199) 46458* whyload: Darwin Options. (line 199) 46459* Wignored-qualifiers: Warning Options. (line 354) 46460* Wimplicit: Warning Options. (line 350) 46461* Wimplicit-function-declaration: Warning Options. (line 344) 46462* Wimplicit-int: Warning Options. (line 340) 46463* Winit-self: Warning Options. (line 327) 46464* Winline <1>: Inline. (line 63) 46465* Winline: Warning Options. (line 1322) 46466* Wint-to-pointer-cast: Warning Options. (line 1349) 46467* Winvalid-offsetof: Warning Options. (line 1335) 46468* Winvalid-pch: Warning Options. (line 1358) 46469* Wjump-misses-init: Warning Options. (line 1070) 46470* Wl: Link Options. (line 203) 46471* Wlarger-than-LEN: Warning Options. (line 946) 46472* Wlarger-than=LEN: Warning Options. (line 946) 46473* Wlogical-op: Warning Options. (line 1107) 46474* Wlong-long: Warning Options. (line 1362) 46475* Wmain: Warning Options. (line 365) 46476* Wmissing-braces: Warning Options. (line 372) 46477* Wmissing-declarations: Warning Options. (line 1158) 46478* Wmissing-field-initializers: Warning Options. (line 1166) 46479* Wmissing-format-attribute: Warning Options. (line 1184) 46480* Wmissing-include-dirs: Warning Options. (line 382) 46481* Wmissing-parameter-type: Warning Options. (line 1144) 46482* Wmissing-prototypes: Warning Options. (line 1152) 46483* Wmultichar: Warning Options. (line 1203) 46484* Wnested-externs: Warning Options. (line 1319) 46485* Wno-abi: C++ Dialect Options. 46486 (line 336) 46487* Wno-address: Warning Options. (line 1094) 46488* Wno-aggregate-return: Warning Options. (line 1112) 46489* Wno-all: Warning Options. (line 118) 46490* Wno-array-bounds: Warning Options. (line 786) 46491* Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 46492 (line 157) 46493* Wno-attributes: Warning Options. (line 1117) 46494* Wno-bad-function-cast: Warning Options. (line 984) 46495* Wno-builtin-macro-redefined: Warning Options. (line 1123) 46496* Wno-cast-align: Warning Options. (line 1015) 46497* Wno-cast-qual: Warning Options. (line 999) 46498* Wno-char-subscripts: Warning Options. (line 205) 46499* Wno-clobbered: Warning Options. (line 1035) 46500* Wno-comment: Warning Options. (line 210) 46501* Wno-conversion: Warning Options. (line 1039) 46502* Wno-conversion-null: Warning Options. (line 1057) 46503* Wno-ctor-dtor-privacy: C++ Dialect Options. 46504 (line 446) 46505* Wno-declaration-after-statement: Warning Options. (line 925) 46506* Wno-deprecated: Warning Options. (line 1252) 46507* Wno-deprecated-declarations: Warning Options. (line 1256) 46508* Wno-disabled-optimization: Warning Options. (line 1383) 46509* Wno-div-by-zero: Warning Options. (line 791) 46510* Wno-double-promotion: Warning Options. (line 220) 46511* Wno-effc++: C++ Dialect Options. 46512 (line 479) 46513* Wno-empty-body: Warning Options. (line 1061) 46514* Wno-endif-labels: Warning Options. (line 935) 46515* Wno-enum-compare: Warning Options. (line 1065) 46516* Wno-error: Warning Options. (line 28) 46517* Wno-error=: Warning Options. (line 31) 46518* Wno-extra: Warning Options. (line 166) 46519* Wno-fatal-errors: Warning Options. (line 48) 46520* Wno-float-equal: Warning Options. (line 825) 46521* Wno-format: Warning Options. (line 238) 46522* Wno-format-contains-nul: Warning Options. (line 277) 46523* Wno-format-extra-args: Warning Options. (line 281) 46524* Wno-format-nonliteral: Warning Options. (line 299) 46525* Wno-format-security: Warning Options. (line 304) 46526* Wno-format-y2k: Warning Options. (line 273) 46527* Wno-format-zero-length: Warning Options. (line 295) 46528* Wno-format=2: Warning Options. (line 315) 46529* Wno-ignored-qualifiers: Warning Options. (line 354) 46530* Wno-implicit: Warning Options. (line 350) 46531* Wno-implicit-function-declaration: Warning Options. (line 344) 46532* Wno-implicit-int: Warning Options. (line 340) 46533* Wno-init-self: Warning Options. (line 327) 46534* Wno-inline: Warning Options. (line 1322) 46535* Wno-int-to-pointer-cast: Warning Options. (line 1349) 46536* Wno-invalid-offsetof: Warning Options. (line 1335) 46537* Wno-invalid-pch: Warning Options. (line 1358) 46538* Wno-jump-misses-init: Warning Options. (line 1070) 46539* Wno-logical-op: Warning Options. (line 1107) 46540* Wno-long-long: Warning Options. (line 1362) 46541* Wno-main: Warning Options. (line 365) 46542* Wno-missing-braces: Warning Options. (line 372) 46543* Wno-missing-declarations: Warning Options. (line 1158) 46544* Wno-missing-field-initializers: Warning Options. (line 1166) 46545* Wno-missing-format-attribute: Warning Options. (line 1184) 46546* Wno-missing-include-dirs: Warning Options. (line 382) 46547* Wno-missing-parameter-type: Warning Options. (line 1144) 46548* Wno-missing-prototypes: Warning Options. (line 1152) 46549* Wno-mudflap: Warning Options. (line 1403) 46550* Wno-multichar: Warning Options. (line 1203) 46551* Wno-nested-externs: Warning Options. (line 1319) 46552* Wno-noexcept: C++ Dialect Options. 46553 (line 451) 46554* Wno-non-template-friend: C++ Dialect Options. 46555 (line 516) 46556* Wno-non-virtual-dtor: C++ Dialect Options. 46557 (line 457) 46558* Wno-nonnull: Warning Options. (line 320) 46559* Wno-old-style-cast: C++ Dialect Options. 46560 (line 532) 46561* Wno-old-style-declaration: Warning Options. (line 1134) 46562* Wno-old-style-definition: Warning Options. (line 1140) 46563* Wno-overflow: Warning Options. (line 1262) 46564* Wno-overlength-strings: Warning Options. (line 1407) 46565* Wno-overloaded-virtual: C++ Dialect Options. 46566 (line 538) 46567* Wno-override-init: Warning Options. (line 1265) 46568* Wno-packed: Warning Options. (line 1273) 46569* Wno-packed-bitfield-compat: Warning Options. (line 1290) 46570* Wno-padded: Warning Options. (line 1307) 46571* Wno-parentheses: Warning Options. (line 385) 46572* Wno-pedantic-ms-format: Warning Options. (line 964) 46573* Wno-pmf-conversions <1>: Bound member functions. 46574 (line 35) 46575* Wno-pmf-conversions: C++ Dialect Options. 46576 (line 557) 46577* Wno-pointer-arith: Warning Options. (line 970) 46578* Wno-pointer-sign: Warning Options. (line 1392) 46579* Wno-pointer-to-int-cast: Warning Options. (line 1354) 46580* Wno-poison-system-directories: Warning Options. (line 818) 46581* Wno-pragmas: Warning Options. (line 671) 46582* Wno-protocol: Objective-C and Objective-C++ Dialect Options. 46583 (line 161) 46584* Wno-redundant-decls: Warning Options. (line 1314) 46585* Wno-reorder: C++ Dialect Options. 46586 (line 463) 46587* Wno-return-type: Warning Options. (line 481) 46588* Wno-selector: Objective-C and Objective-C++ Dialect Options. 46589 (line 171) 46590* Wno-sequence-point: Warning Options. (line 435) 46591* Wno-shadow: Warning Options. (line 939) 46592* Wno-sign-compare: Warning Options. (line 1081) 46593* Wno-sign-conversion: Warning Options. (line 1088) 46594* Wno-sign-promo: C++ Dialect Options. 46595 (line 561) 46596* Wno-stack-protector: Warning Options. (line 1398) 46597* Wno-strict-aliasing: Warning Options. (line 676) 46598* Wno-strict-aliasing=n: Warning Options. (line 684) 46599* Wno-strict-null-sentinel: C++ Dialect Options. 46600 (line 509) 46601* Wno-strict-overflow: Warning Options. (line 717) 46602* Wno-strict-prototypes: Warning Options. (line 1128) 46603* Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 46604 (line 183) 46605* Wno-suggest-attribute=: Warning Options. (line 768) 46606* Wno-suggest-attribute=const: Warning Options. (line 774) 46607* Wno-suggest-attribute=noreturn: Warning Options. (line 774) 46608* Wno-suggest-attribute=pure: Warning Options. (line 774) 46609* Wno-switch: Warning Options. (line 496) 46610* Wno-switch-default: Warning Options. (line 504) 46611* Wno-switch-enum: Warning Options. (line 507) 46612* Wno-sync-nand: Warning Options. (line 516) 46613* Wno-system-headers: Warning Options. (line 796) 46614* Wno-traditional: Warning Options. (line 840) 46615* Wno-traditional-conversion: Warning Options. (line 917) 46616* Wno-trampolines: Warning Options. (line 807) 46617* Wno-trigraphs: Warning Options. (line 521) 46618* Wno-type-limits: Warning Options. (line 977) 46619* Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 46620 (line 191) 46621* Wno-undef: Warning Options. (line 932) 46622* Wno-uninitialized: Warning Options. (line 594) 46623* Wno-unknown-pragmas: Warning Options. (line 664) 46624* Wno-unsafe-loop-optimizations: Warning Options. (line 958) 46625* Wno-unused: Warning Options. (line 587) 46626* Wno-unused-but-set-parameter: Warning Options. (line 526) 46627* Wno-unused-but-set-variable: Warning Options. (line 535) 46628* Wno-unused-function: Warning Options. (line 545) 46629* Wno-unused-label: Warning Options. (line 550) 46630* Wno-unused-parameter: Warning Options. (line 557) 46631* Wno-unused-result: Warning Options. (line 564) 46632* Wno-unused-value: Warning Options. (line 577) 46633* Wno-unused-variable: Warning Options. (line 569) 46634* Wno-variadic-macros: Warning Options. (line 1367) 46635* Wno-vla: Warning Options. (line 1373) 46636* Wno-volatile-register-var: Warning Options. (line 1377) 46637* Wno-write-strings: Warning Options. (line 1021) 46638* Wnoexcept: C++ Dialect Options. 46639 (line 451) 46640* Wnon-template-friend: C++ Dialect Options. 46641 (line 516) 46642* Wnon-virtual-dtor: C++ Dialect Options. 46643 (line 457) 46644* Wnonnull: Warning Options. (line 320) 46645* Wnormalized=: Warning Options. (line 1209) 46646* Wold-style-cast: C++ Dialect Options. 46647 (line 532) 46648* Wold-style-declaration: Warning Options. (line 1134) 46649* Wold-style-definition: Warning Options. (line 1140) 46650* Woverflow: Warning Options. (line 1262) 46651* Woverlength-strings: Warning Options. (line 1407) 46652* Woverloaded-virtual: C++ Dialect Options. 46653 (line 538) 46654* Woverride-init: Warning Options. (line 1265) 46655* Wp: Preprocessor Options. 46656 (line 14) 46657* Wpacked: Warning Options. (line 1273) 46658* Wpacked-bitfield-compat: Warning Options. (line 1290) 46659* Wpadded: Warning Options. (line 1307) 46660* Wparentheses: Warning Options. (line 385) 46661* Wpedantic-ms-format: Warning Options. (line 964) 46662* Wpmf-conversions: C++ Dialect Options. 46663 (line 557) 46664* Wpointer-arith <1>: Pointer Arith. (line 13) 46665* Wpointer-arith: Warning Options. (line 970) 46666* Wpointer-sign: Warning Options. (line 1392) 46667* Wpointer-to-int-cast: Warning Options. (line 1354) 46668* Wpragmas: Warning Options. (line 671) 46669* Wprotocol: Objective-C and Objective-C++ Dialect Options. 46670 (line 161) 46671* wrapper: Overall Options. (line 345) 46672* Wredundant-decls: Warning Options. (line 1314) 46673* Wreorder: C++ Dialect Options. 46674 (line 463) 46675* Wreturn-type: Warning Options. (line 481) 46676* Wselector: Objective-C and Objective-C++ Dialect Options. 46677 (line 171) 46678* Wsequence-point: Warning Options. (line 435) 46679* Wshadow: Warning Options. (line 939) 46680* Wsign-compare: Warning Options. (line 1081) 46681* Wsign-conversion: Warning Options. (line 1088) 46682* Wsign-promo: C++ Dialect Options. 46683 (line 561) 46684* Wstack-protector: Warning Options. (line 1398) 46685* Wstrict-aliasing: Warning Options. (line 676) 46686* Wstrict-aliasing=n: Warning Options. (line 684) 46687* Wstrict-null-sentinel: C++ Dialect Options. 46688 (line 509) 46689* Wstrict-overflow: Warning Options. (line 717) 46690* Wstrict-prototypes: Warning Options. (line 1128) 46691* Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 46692 (line 183) 46693* Wsuggest-attribute=: Warning Options. (line 768) 46694* Wsuggest-attribute=const: Warning Options. (line 774) 46695* Wsuggest-attribute=noreturn: Warning Options. (line 774) 46696* Wsuggest-attribute=pure: Warning Options. (line 774) 46697* Wswitch: Warning Options. (line 496) 46698* Wswitch-default: Warning Options. (line 504) 46699* Wswitch-enum: Warning Options. (line 507) 46700* Wsync-nand: Warning Options. (line 516) 46701* Wsystem-headers <1>: Preprocessor Options. 46702 (line 153) 46703* Wsystem-headers: Warning Options. (line 796) 46704* Wtraditional <1>: Preprocessor Options. 46705 (line 106) 46706* Wtraditional: Warning Options. (line 840) 46707* Wtraditional-conversion: Warning Options. (line 917) 46708* Wtrampolines: Warning Options. (line 807) 46709* Wtrigraphs <1>: Preprocessor Options. 46710 (line 94) 46711* Wtrigraphs: Warning Options. (line 521) 46712* Wtype-limits: Warning Options. (line 977) 46713* Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 46714 (line 191) 46715* Wundef <1>: Preprocessor Options. 46716 (line 112) 46717* Wundef: Warning Options. (line 932) 46718* Wuninitialized: Warning Options. (line 594) 46719* Wunknown-pragmas: Warning Options. (line 664) 46720* Wunsafe-loop-optimizations: Warning Options. (line 958) 46721* Wunsuffixed-float-constants: Warning Options. (line 1422) 46722* Wunused: Warning Options. (line 587) 46723* Wunused-but-set-parameter: Warning Options. (line 526) 46724* Wunused-but-set-variable: Warning Options. (line 535) 46725* Wunused-function: Warning Options. (line 545) 46726* Wunused-label: Warning Options. (line 550) 46727* Wunused-macros: Preprocessor Options. 46728 (line 117) 46729* Wunused-parameter: Warning Options. (line 557) 46730* Wunused-result: Warning Options. (line 564) 46731* Wunused-value: Warning Options. (line 577) 46732* Wunused-variable: Warning Options. (line 569) 46733* Wvariadic-macros: Warning Options. (line 1367) 46734* Wvla: Warning Options. (line 1373) 46735* Wvolatile-register-var: Warning Options. (line 1377) 46736* Wwrite-strings: Warning Options. (line 1021) 46737* x <1>: Preprocessor Options. 46738 (line 310) 46739* x: Overall Options. (line 126) 46740* Xassembler: Assembler Options. (line 13) 46741* Xbind-lazy: VxWorks Options. (line 26) 46742* Xbind-now: VxWorks Options. (line 30) 46743* Xlinker: Link Options. (line 184) 46744* Xpreprocessor: Preprocessor Options. 46745 (line 25) 46746* Ym: System V Options. (line 26) 46747* YP: System V Options. (line 22) 46748 46749 46750File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 46751 46752Keyword Index 46753************* 46754 46755[index] 46756* Menu: 46757 46758* ! in constraint: Multi-Alternative. (line 33) 46759* # in constraint: Modifiers. (line 57) 46760* #pragma: Pragmas. (line 6) 46761* #pragma implementation: C++ Interface. (line 39) 46762* #pragma implementation, implied: C++ Interface. (line 46) 46763* #pragma interface: C++ Interface. (line 20) 46764* #pragma, reason for not using: Function Attributes. 46765 (line 1738) 46766* $: Dollar Signs. (line 6) 46767* % in constraint: Modifiers. (line 45) 46768* %include: Spec Files. (line 27) 46769* %include_noerr: Spec Files. (line 31) 46770* %rename: Spec Files. (line 35) 46771* & in constraint: Modifiers. (line 25) 46772* ': Incompatibilities. (line 116) 46773* * in constraint: Modifiers. (line 62) 46774* + in constraint: Modifiers. (line 12) 46775* -lgcc, use with -nodefaultlibs: Link Options. (line 82) 46776* -lgcc, use with -nostdlib: Link Options. (line 82) 46777* -nodefaultlibs and unresolved references: Link Options. (line 82) 46778* -nostdlib and unresolved references: Link Options. (line 82) 46779* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 46780 (line 701) 46781* //: C++ Comments. (line 6) 46782* 0 in constraint: Simple Constraints. (line 127) 46783* < in constraint: Simple Constraints. (line 48) 46784* = in constraint: Modifiers. (line 8) 46785* > in constraint: Simple Constraints. (line 61) 46786* ? in constraint: Multi-Alternative. (line 27) 46787* ?: extensions: Conditionals. (line 6) 46788* ?: side effect: Conditionals. (line 20) 46789* _ in variables in macros: Typeof. (line 46) 46790* __builtin___clear_cache: Other Builtins. (line 329) 46791* __builtin___fprintf_chk: Object Size Checking. 46792 (line 6) 46793* __builtin___memcpy_chk: Object Size Checking. 46794 (line 6) 46795* __builtin___memmove_chk: Object Size Checking. 46796 (line 6) 46797* __builtin___mempcpy_chk: Object Size Checking. 46798 (line 6) 46799* __builtin___memset_chk: Object Size Checking. 46800 (line 6) 46801* __builtin___printf_chk: Object Size Checking. 46802 (line 6) 46803* __builtin___snprintf_chk: Object Size Checking. 46804 (line 6) 46805* __builtin___sprintf_chk: Object Size Checking. 46806 (line 6) 46807* __builtin___stpcpy_chk: Object Size Checking. 46808 (line 6) 46809* __builtin___strcat_chk: Object Size Checking. 46810 (line 6) 46811* __builtin___strcpy_chk: Object Size Checking. 46812 (line 6) 46813* __builtin___strncat_chk: Object Size Checking. 46814 (line 6) 46815* __builtin___strncpy_chk: Object Size Checking. 46816 (line 6) 46817* __builtin___vfprintf_chk: Object Size Checking. 46818 (line 6) 46819* __builtin___vprintf_chk: Object Size Checking. 46820 (line 6) 46821* __builtin___vsnprintf_chk: Object Size Checking. 46822 (line 6) 46823* __builtin___vsprintf_chk: Object Size Checking. 46824 (line 6) 46825* __builtin_apply: Constructing Calls. (line 31) 46826* __builtin_apply_args: Constructing Calls. (line 20) 46827* __builtin_bswap32: Other Builtins. (line 548) 46828* __builtin_bswap64: Other Builtins. (line 553) 46829* __builtin_choose_expr: Other Builtins. (line 157) 46830* __builtin_clz: Other Builtins. (line 481) 46831* __builtin_clzl: Other Builtins. (line 499) 46832* __builtin_clzll: Other Builtins. (line 519) 46833* __builtin_constant_p: Other Builtins. (line 197) 46834* __builtin_ctz: Other Builtins. (line 485) 46835* __builtin_ctzl: Other Builtins. (line 503) 46836* __builtin_ctzll: Other Builtins. (line 523) 46837* __builtin_expect: Other Builtins. (line 247) 46838* __builtin_extract_return_address: Return Address. (line 37) 46839* __builtin_ffs: Other Builtins. (line 477) 46840* __builtin_ffsl: Other Builtins. (line 495) 46841* __builtin_ffsll: Other Builtins. (line 515) 46842* __builtin_fpclassify: Other Builtins. (line 6) 46843* __builtin_frame_address: Return Address. (line 51) 46844* __builtin_frob_return_address: Return Address. (line 46) 46845* __builtin_huge_val: Other Builtins. (line 380) 46846* __builtin_huge_valf: Other Builtins. (line 385) 46847* __builtin_huge_vall: Other Builtins. (line 388) 46848* __builtin_huge_valq: X86 Built-in Functions. 46849 (line 51) 46850* __builtin_inf: Other Builtins. (line 403) 46851* __builtin_infd128: Other Builtins. (line 413) 46852* __builtin_infd32: Other Builtins. (line 407) 46853* __builtin_infd64: Other Builtins. (line 410) 46854* __builtin_inff: Other Builtins. (line 417) 46855* __builtin_infl: Other Builtins. (line 422) 46856* __builtin_infq: X86 Built-in Functions. 46857 (line 47) 46858* __builtin_isfinite: Other Builtins. (line 6) 46859* __builtin_isgreater: Other Builtins. (line 6) 46860* __builtin_isgreaterequal: Other Builtins. (line 6) 46861* __builtin_isinf_sign: Other Builtins. (line 6) 46862* __builtin_isless: Other Builtins. (line 6) 46863* __builtin_islessequal: Other Builtins. (line 6) 46864* __builtin_islessgreater: Other Builtins. (line 6) 46865* __builtin_isnormal: Other Builtins. (line 6) 46866* __builtin_isunordered: Other Builtins. (line 6) 46867* __builtin_nan: Other Builtins. (line 433) 46868* __builtin_nand128: Other Builtins. (line 455) 46869* __builtin_nand32: Other Builtins. (line 449) 46870* __builtin_nand64: Other Builtins. (line 452) 46871* __builtin_nanf: Other Builtins. (line 459) 46872* __builtin_nanl: Other Builtins. (line 462) 46873* __builtin_nans: Other Builtins. (line 466) 46874* __builtin_nansf: Other Builtins. (line 470) 46875* __builtin_nansl: Other Builtins. (line 473) 46876* __builtin_object_size: Object Size Checking. 46877 (line 6) 46878* __builtin_offsetof: Offsetof. (line 6) 46879* __builtin_parity: Other Builtins. (line 492) 46880* __builtin_parityl: Other Builtins. (line 511) 46881* __builtin_parityll: Other Builtins. (line 531) 46882* __builtin_popcount: Other Builtins. (line 489) 46883* __builtin_popcountl: Other Builtins. (line 507) 46884* __builtin_popcountll: Other Builtins. (line 527) 46885* __builtin_powi: Other Builtins. (line 6) 46886* __builtin_powif: Other Builtins. (line 6) 46887* __builtin_powil: Other Builtins. (line 6) 46888* __builtin_prefetch: Other Builtins. (line 341) 46889* __builtin_return: Constructing Calls. (line 48) 46890* __builtin_return_address: Return Address. (line 11) 46891* __builtin_rx_brk: RX Built-in Functions. 46892 (line 11) 46893* __builtin_rx_clrpsw: RX Built-in Functions. 46894 (line 14) 46895* __builtin_rx_int: RX Built-in Functions. 46896 (line 18) 46897* __builtin_rx_machi: RX Built-in Functions. 46898 (line 22) 46899* __builtin_rx_maclo: RX Built-in Functions. 46900 (line 27) 46901* __builtin_rx_mulhi: RX Built-in Functions. 46902 (line 32) 46903* __builtin_rx_mullo: RX Built-in Functions. 46904 (line 37) 46905* __builtin_rx_mvfachi: RX Built-in Functions. 46906 (line 42) 46907* __builtin_rx_mvfacmi: RX Built-in Functions. 46908 (line 46) 46909* __builtin_rx_mvfc: RX Built-in Functions. 46910 (line 50) 46911* __builtin_rx_mvtachi: RX Built-in Functions. 46912 (line 54) 46913* __builtin_rx_mvtaclo: RX Built-in Functions. 46914 (line 58) 46915* __builtin_rx_mvtc: RX Built-in Functions. 46916 (line 62) 46917* __builtin_rx_mvtipl: RX Built-in Functions. 46918 (line 66) 46919* __builtin_rx_racw: RX Built-in Functions. 46920 (line 70) 46921* __builtin_rx_revw: RX Built-in Functions. 46922 (line 74) 46923* __builtin_rx_rmpa: RX Built-in Functions. 46924 (line 79) 46925* __builtin_rx_round: RX Built-in Functions. 46926 (line 83) 46927* __builtin_rx_sat: RX Built-in Functions. 46928 (line 88) 46929* __builtin_rx_setpsw: RX Built-in Functions. 46930 (line 92) 46931* __builtin_rx_wait: RX Built-in Functions. 46932 (line 96) 46933* __builtin_trap: Other Builtins. (line 271) 46934* __builtin_types_compatible_p: Other Builtins. (line 111) 46935* __builtin_unreachable: Other Builtins. (line 278) 46936* __builtin_va_arg_pack: Constructing Calls. (line 53) 46937* __builtin_va_arg_pack_len: Constructing Calls. (line 76) 46938* __complex__ keyword: Complex. (line 6) 46939* __declspec(dllexport): Function Attributes. 46940 (line 259) 46941* __declspec(dllimport): Function Attributes. 46942 (line 294) 46943* __extension__: Alternate Keywords. (line 30) 46944* __float128 data type: Floating Types. (line 6) 46945* __float80 data type: Floating Types. (line 6) 46946* __fp16 data type: Half-Precision. (line 6) 46947* __func__ identifier: Function Names. (line 6) 46948* __FUNCTION__ identifier: Function Names. (line 6) 46949* __imag__ keyword: Complex. (line 27) 46950* __int128 data types: __int128. (line 6) 46951* __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 46952* __real__ keyword: Complex. (line 27) 46953* __STDC_HOSTED__: Standards. (line 13) 46954* __sync_add_and_fetch: Atomic Builtins. (line 61) 46955* __sync_and_and_fetch: Atomic Builtins. (line 61) 46956* __sync_bool_compare_and_swap: Atomic Builtins. (line 73) 46957* __sync_fetch_and_add: Atomic Builtins. (line 45) 46958* __sync_fetch_and_and: Atomic Builtins. (line 45) 46959* __sync_fetch_and_nand: Atomic Builtins. (line 45) 46960* __sync_fetch_and_or: Atomic Builtins. (line 45) 46961* __sync_fetch_and_sub: Atomic Builtins. (line 45) 46962* __sync_fetch_and_xor: Atomic Builtins. (line 45) 46963* __sync_lock_release: Atomic Builtins. (line 103) 46964* __sync_lock_test_and_set: Atomic Builtins. (line 85) 46965* __sync_nand_and_fetch: Atomic Builtins. (line 61) 46966* __sync_or_and_fetch: Atomic Builtins. (line 61) 46967* __sync_sub_and_fetch: Atomic Builtins. (line 61) 46968* __sync_synchronize: Atomic Builtins. (line 82) 46969* __sync_val_compare_and_swap: Atomic Builtins. (line 73) 46970* __sync_xor_and_fetch: Atomic Builtins. (line 61) 46971* __thread: Thread-Local. (line 6) 46972* _Accum data type: Fixed-Point. (line 6) 46973* _Complex keyword: Complex. (line 6) 46974* _Decimal128 data type: Decimal Float. (line 6) 46975* _Decimal32 data type: Decimal Float. (line 6) 46976* _Decimal64 data type: Decimal Float. (line 6) 46977* _exit: Other Builtins. (line 6) 46978* _Exit: Other Builtins. (line 6) 46979* _Fract data type: Fixed-Point. (line 6) 46980* _Sat data type: Fixed-Point. (line 6) 46981* ABI: Compatibility. (line 6) 46982* abort: Other Builtins. (line 6) 46983* abs: Other Builtins. (line 6) 46984* accessing volatiles <1>: C++ Volatiles. (line 6) 46985* accessing volatiles: Volatiles. (line 6) 46986* acos: Other Builtins. (line 6) 46987* acosf: Other Builtins. (line 6) 46988* acosh: Other Builtins. (line 6) 46989* acoshf: Other Builtins. (line 6) 46990* acoshl: Other Builtins. (line 6) 46991* acosl: Other Builtins. (line 6) 46992* Ada: G++ and GCC. (line 6) 46993* additional floating types: Floating Types. (line 6) 46994* address constraints: Simple Constraints. (line 154) 46995* address of a label: Labels as Values. (line 6) 46996* address_operand: Simple Constraints. (line 158) 46997* alias attribute: Function Attributes. 46998 (line 36) 46999* aligned attribute <1>: Type Attributes. (line 31) 47000* aligned attribute <2>: Variable Attributes. 47001 (line 23) 47002* aligned attribute: Function Attributes. 47003 (line 49) 47004* alignment: Alignment. (line 6) 47005* alloc_size attribute: Function Attributes. 47006 (line 69) 47007* alloca: Other Builtins. (line 6) 47008* alloca vs variable-length arrays: Variable Length. (line 26) 47009* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 47010 (line 888) 47011* alternate keywords: Alternate Keywords. (line 6) 47012* always_inline function attribute: Function Attributes. 47013 (line 90) 47014* AMD x86-64 Options: i386 and x86-64 Options. 47015 (line 6) 47016* AMD1: Standards. (line 13) 47017* ANSI C: Standards. (line 13) 47018* ANSI C standard: Standards. (line 13) 47019* ANSI C89: Standards. (line 13) 47020* ANSI support: C Dialect Options. (line 10) 47021* ANSI X3.159-1989: Standards. (line 13) 47022* apostrophes: Incompatibilities. (line 116) 47023* application binary interface: Compatibility. (line 6) 47024* ARC Options: ARC Options. (line 6) 47025* ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 47026 (line 6) 47027* ARM options: ARM Options. (line 6) 47028* arrays of length zero: Zero Length. (line 6) 47029* arrays of variable length: Variable Length. (line 6) 47030* arrays, non-lvalue: Subscripting. (line 6) 47031* artificial function attribute: Function Attributes. 47032 (line 133) 47033* asin: Other Builtins. (line 6) 47034* asinf: Other Builtins. (line 6) 47035* asinh: Other Builtins. (line 6) 47036* asinhf: Other Builtins. (line 6) 47037* asinhl: Other Builtins. (line 6) 47038* asinl: Other Builtins. (line 6) 47039* asm constraints: Constraints. (line 6) 47040* asm expressions: Extended Asm. (line 6) 47041* assembler instructions: Extended Asm. (line 6) 47042* assembler names for identifiers: Asm Labels. (line 6) 47043* assembly code, invalid: Bug Criteria. (line 12) 47044* atan: Other Builtins. (line 6) 47045* atan2: Other Builtins. (line 6) 47046* atan2f: Other Builtins. (line 6) 47047* atan2l: Other Builtins. (line 6) 47048* atanf: Other Builtins. (line 6) 47049* atanh: Other Builtins. (line 6) 47050* atanhf: Other Builtins. (line 6) 47051* atanhl: Other Builtins. (line 6) 47052* atanl: Other Builtins. (line 6) 47053* attribute of types: Type Attributes. (line 6) 47054* attribute of variables: Variable Attributes. 47055 (line 6) 47056* attribute syntax: Attribute Syntax. (line 6) 47057* autoincrement/decrement addressing: Simple Constraints. (line 30) 47058* automatic inline for C++ member fns: Inline. (line 71) 47059* AVR Options: AVR Options. (line 6) 47060* Backwards Compatibility: Backwards Compatibility. 47061 (line 6) 47062* base class members: Name lookup. (line 6) 47063* bcmp: Other Builtins. (line 6) 47064* below100 attribute: Variable Attributes. 47065 (line 550) 47066* binary compatibility: Compatibility. (line 6) 47067* Binary constants using the 0b prefix: Binary constants. (line 6) 47068* Blackfin Options: Blackfin Options. (line 6) 47069* bound pointer to member function: Bound member functions. 47070 (line 6) 47071* bounds checking: Optimize Options. (line 394) 47072* bug criteria: Bug Criteria. (line 6) 47073* bugs: Bugs. (line 6) 47074* bugs, known: Trouble. (line 6) 47075* built-in functions <1>: Other Builtins. (line 6) 47076* built-in functions: C Dialect Options. (line 184) 47077* bzero: Other Builtins. (line 6) 47078* C compilation options: Invoking GCC. (line 17) 47079* C intermediate output, nonexistent: G++ and GCC. (line 35) 47080* C language extensions: C Extensions. (line 6) 47081* C language, traditional: C Dialect Options. (line 282) 47082* C standard: Standards. (line 13) 47083* C standards: Standards. (line 13) 47084* c++: Invoking G++. (line 14) 47085* C++: G++ and GCC. (line 30) 47086* C++ comments: C++ Comments. (line 6) 47087* C++ compilation options: Invoking GCC. (line 23) 47088* C++ interface and implementation headers: C++ Interface. (line 6) 47089* C++ language extensions: C++ Extensions. (line 6) 47090* C++ member fns, automatically inline: Inline. (line 71) 47091* C++ misunderstandings: C++ Misunderstandings. 47092 (line 6) 47093* C++ options, command line: C++ Dialect Options. 47094 (line 6) 47095* C++ pragmas, effect on inlining: C++ Interface. (line 66) 47096* C++ source file suffixes: Invoking G++. (line 6) 47097* C++ static data, declaring and defining: Static Definitions. 47098 (line 6) 47099* C1X: Standards. (line 13) 47100* C89: Standards. (line 13) 47101* C90: Standards. (line 13) 47102* C94: Standards. (line 13) 47103* C95: Standards. (line 13) 47104* C99: Standards. (line 13) 47105* C9X: Standards. (line 13) 47106* C_INCLUDE_PATH: Environment Variables. 47107 (line 127) 47108* cabs: Other Builtins. (line 6) 47109* cabsf: Other Builtins. (line 6) 47110* cabsl: Other Builtins. (line 6) 47111* cacos: Other Builtins. (line 6) 47112* cacosf: Other Builtins. (line 6) 47113* cacosh: Other Builtins. (line 6) 47114* cacoshf: Other Builtins. (line 6) 47115* cacoshl: Other Builtins. (line 6) 47116* cacosl: Other Builtins. (line 6) 47117* callee_pop_aggregate_return attribute: Function Attributes. 47118 (line 847) 47119* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 47120 (line 532) 47121* calloc: Other Builtins. (line 6) 47122* carg: Other Builtins. (line 6) 47123* cargf: Other Builtins. (line 6) 47124* cargl: Other Builtins. (line 6) 47125* case labels in initializers: Designated Inits. (line 6) 47126* case ranges: Case Ranges. (line 6) 47127* casin: Other Builtins. (line 6) 47128* casinf: Other Builtins. (line 6) 47129* casinh: Other Builtins. (line 6) 47130* casinhf: Other Builtins. (line 6) 47131* casinhl: Other Builtins. (line 6) 47132* casinl: Other Builtins. (line 6) 47133* cast to a union: Cast to Union. (line 6) 47134* catan: Other Builtins. (line 6) 47135* catanf: Other Builtins. (line 6) 47136* catanh: Other Builtins. (line 6) 47137* catanhf: Other Builtins. (line 6) 47138* catanhl: Other Builtins. (line 6) 47139* catanl: Other Builtins. (line 6) 47140* cbrt: Other Builtins. (line 6) 47141* cbrtf: Other Builtins. (line 6) 47142* cbrtl: Other Builtins. (line 6) 47143* ccos: Other Builtins. (line 6) 47144* ccosf: Other Builtins. (line 6) 47145* ccosh: Other Builtins. (line 6) 47146* ccoshf: Other Builtins. (line 6) 47147* ccoshl: Other Builtins. (line 6) 47148* ccosl: Other Builtins. (line 6) 47149* ceil: Other Builtins. (line 6) 47150* ceilf: Other Builtins. (line 6) 47151* ceill: Other Builtins. (line 6) 47152* cexp: Other Builtins. (line 6) 47153* cexpf: Other Builtins. (line 6) 47154* cexpl: Other Builtins. (line 6) 47155* character set, execution: Preprocessor Options. 47156 (line 508) 47157* character set, input: Preprocessor Options. 47158 (line 521) 47159* character set, input normalization: Warning Options. (line 1209) 47160* character set, wide execution: Preprocessor Options. 47161 (line 513) 47162* cimag: Other Builtins. (line 6) 47163* cimagf: Other Builtins. (line 6) 47164* cimagl: Other Builtins. (line 6) 47165* cleanup attribute: Variable Attributes. 47166 (line 89) 47167* clog: Other Builtins. (line 6) 47168* clogf: Other Builtins. (line 6) 47169* clogl: Other Builtins. (line 6) 47170* COBOL: G++ and GCC. (line 23) 47171* code generation conventions: Code Gen Options. (line 6) 47172* code, mixed with declarations: Mixed Declarations. (line 6) 47173* cold function attribute: Function Attributes. 47174 (line 1069) 47175* command options: Invoking GCC. (line 6) 47176* comments, C++ style: C++ Comments. (line 6) 47177* common attribute: Variable Attributes. 47178 (line 105) 47179* comparison of signed and unsigned values, warning: Warning Options. 47180 (line 1081) 47181* compiler bugs, reporting: Bug Reporting. (line 6) 47182* compiler compared to C++ preprocessor: G++ and GCC. (line 35) 47183* compiler options, C++: C++ Dialect Options. 47184 (line 6) 47185* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 47186 (line 6) 47187* compiler version, specifying: Target Options. (line 6) 47188* COMPILER_PATH: Environment Variables. 47189 (line 88) 47190* complex conjugation: Complex. (line 34) 47191* complex numbers: Complex. (line 6) 47192* compound literals: Compound Literals. (line 6) 47193* computed gotos: Labels as Values. (line 6) 47194* conditional expressions, extensions: Conditionals. (line 6) 47195* conflicting types: Disappointments. (line 21) 47196* conj: Other Builtins. (line 6) 47197* conjf: Other Builtins. (line 6) 47198* conjl: Other Builtins. (line 6) 47199* const applied to function: Function Attributes. 47200 (line 6) 47201* const function attribute: Function Attributes. 47202 (line 183) 47203* constants in constraints: Simple Constraints. (line 70) 47204* constraint modifier characters: Modifiers. (line 6) 47205* constraint, matching: Simple Constraints. (line 139) 47206* constraints, asm: Constraints. (line 6) 47207* constraints, machine specific: Machine Constraints. 47208 (line 6) 47209* constructing calls: Constructing Calls. (line 6) 47210* constructor expressions: Compound Literals. (line 6) 47211* constructor function attribute: Function Attributes. 47212 (line 211) 47213* contributors: Contributors. (line 6) 47214* copysign: Other Builtins. (line 6) 47215* copysignf: Other Builtins. (line 6) 47216* copysignl: Other Builtins. (line 6) 47217* core dump: Bug Criteria. (line 9) 47218* cos: Other Builtins. (line 6) 47219* cosf: Other Builtins. (line 6) 47220* cosh: Other Builtins. (line 6) 47221* coshf: Other Builtins. (line 6) 47222* coshl: Other Builtins. (line 6) 47223* cosl: Other Builtins. (line 6) 47224* CPATH: Environment Variables. 47225 (line 126) 47226* CPLUS_INCLUDE_PATH: Environment Variables. 47227 (line 128) 47228* cpow: Other Builtins. (line 6) 47229* cpowf: Other Builtins. (line 6) 47230* cpowl: Other Builtins. (line 6) 47231* cproj: Other Builtins. (line 6) 47232* cprojf: Other Builtins. (line 6) 47233* cprojl: Other Builtins. (line 6) 47234* creal: Other Builtins. (line 6) 47235* crealf: Other Builtins. (line 6) 47236* creall: Other Builtins. (line 6) 47237* CRIS Options: CRIS Options. (line 6) 47238* cross compiling: Target Options. (line 6) 47239* CRX Options: CRX Options. (line 6) 47240* csin: Other Builtins. (line 6) 47241* csinf: Other Builtins. (line 6) 47242* csinh: Other Builtins. (line 6) 47243* csinhf: Other Builtins. (line 6) 47244* csinhl: Other Builtins. (line 6) 47245* csinl: Other Builtins. (line 6) 47246* csqrt: Other Builtins. (line 6) 47247* csqrtf: Other Builtins. (line 6) 47248* csqrtl: Other Builtins. (line 6) 47249* ctan: Other Builtins. (line 6) 47250* ctanf: Other Builtins. (line 6) 47251* ctanh: Other Builtins. (line 6) 47252* ctanhf: Other Builtins. (line 6) 47253* ctanhl: Other Builtins. (line 6) 47254* ctanl: Other Builtins. (line 6) 47255* Darwin options: Darwin Options. (line 6) 47256* dcgettext: Other Builtins. (line 6) 47257* DD integer suffix: Decimal Float. (line 6) 47258* dd integer suffix: Decimal Float. (line 6) 47259* deallocating variable length arrays: Variable Length. (line 22) 47260* debugging information options: Debugging Options. (line 6) 47261* decimal floating types: Decimal Float. (line 6) 47262* declaration scope: Incompatibilities. (line 80) 47263* declarations inside expressions: Statement Exprs. (line 6) 47264* declarations, mixed with code: Mixed Declarations. (line 6) 47265* declaring attributes of functions: Function Attributes. 47266 (line 6) 47267* declaring static data in C++: Static Definitions. (line 6) 47268* defining static data in C++: Static Definitions. (line 6) 47269* dependencies for make as output: Environment Variables. 47270 (line 154) 47271* dependencies, make: Preprocessor Options. 47272 (line 173) 47273* DEPENDENCIES_OUTPUT: Environment Variables. 47274 (line 153) 47275* dependent name lookup: Name lookup. (line 6) 47276* deprecated attribute: Variable Attributes. 47277 (line 114) 47278* deprecated attribute.: Function Attributes. 47279 (line 234) 47280* designated initializers: Designated Inits. (line 6) 47281* designator lists: Designated Inits. (line 94) 47282* designators: Designated Inits. (line 61) 47283* destructor function attribute: Function Attributes. 47284 (line 211) 47285* DF integer suffix: Decimal Float. (line 6) 47286* df integer suffix: Decimal Float. (line 6) 47287* dgettext: Other Builtins. (line 6) 47288* diagnostic messages: Language Independent Options. 47289 (line 6) 47290* dialect options: C Dialect Options. (line 6) 47291* digits in constraint: Simple Constraints. (line 127) 47292* directory options: Directory Options. (line 6) 47293* disinterrupt attribute: Function Attributes. 47294 (line 254) 47295* DL integer suffix: Decimal Float. (line 6) 47296* dl integer suffix: Decimal Float. (line 6) 47297* dollar signs in identifier names: Dollar Signs. (line 6) 47298* double-word arithmetic: Long Long. (line 6) 47299* downward funargs: Nested Functions. (line 6) 47300* drem: Other Builtins. (line 6) 47301* dremf: Other Builtins. (line 6) 47302* dreml: Other Builtins. (line 6) 47303* E in constraint: Simple Constraints. (line 89) 47304* earlyclobber operand: Modifiers. (line 25) 47305* eight bit data on the H8/300, H8/300H, and H8S: Function Attributes. 47306 (line 347) 47307* empty structures: Empty Structures. (line 6) 47308* environment variables: Environment Variables. 47309 (line 6) 47310* erf: Other Builtins. (line 6) 47311* erfc: Other Builtins. (line 6) 47312* erfcf: Other Builtins. (line 6) 47313* erfcl: Other Builtins. (line 6) 47314* erff: Other Builtins. (line 6) 47315* erfl: Other Builtins. (line 6) 47316* error function attribute: Function Attributes. 47317 (line 152) 47318* error messages: Warnings and Errors. 47319 (line 6) 47320* escaped newlines: Escaped Newlines. (line 6) 47321* exception handler functions on the Blackfin processor: Function Attributes. 47322 (line 357) 47323* exclamation point: Multi-Alternative. (line 33) 47324* exit: Other Builtins. (line 6) 47325* exp: Other Builtins. (line 6) 47326* exp10: Other Builtins. (line 6) 47327* exp10f: Other Builtins. (line 6) 47328* exp10l: Other Builtins. (line 6) 47329* exp2: Other Builtins. (line 6) 47330* exp2f: Other Builtins. (line 6) 47331* exp2l: Other Builtins. (line 6) 47332* expf: Other Builtins. (line 6) 47333* expl: Other Builtins. (line 6) 47334* explicit register variables: Explicit Reg Vars. (line 6) 47335* expm1: Other Builtins. (line 6) 47336* expm1f: Other Builtins. (line 6) 47337* expm1l: Other Builtins. (line 6) 47338* expressions containing statements: Statement Exprs. (line 6) 47339* expressions, constructor: Compound Literals. (line 6) 47340* extended asm: Extended Asm. (line 6) 47341* extensible constraints: Simple Constraints. (line 163) 47342* extensions, ?:: Conditionals. (line 6) 47343* extensions, C language: C Extensions. (line 6) 47344* extensions, C++ language: C++ Extensions. (line 6) 47345* external declaration scope: Incompatibilities. (line 80) 47346* externally_visible attribute.: Function Attributes. 47347 (line 363) 47348* F in constraint: Simple Constraints. (line 94) 47349* fabs: Other Builtins. (line 6) 47350* fabsf: Other Builtins. (line 6) 47351* fabsl: Other Builtins. (line 6) 47352* fatal signal: Bug Criteria. (line 9) 47353* fdim: Other Builtins. (line 6) 47354* fdimf: Other Builtins. (line 6) 47355* fdiml: Other Builtins. (line 6) 47356* FDL, GNU Free Documentation License: GNU Free Documentation License. 47357 (line 6) 47358* ffs: Other Builtins. (line 6) 47359* file name suffix: Overall Options. (line 14) 47360* file names: Link Options. (line 10) 47361* fixed-point types: Fixed-Point. (line 6) 47362* flatten function attribute: Function Attributes. 47363 (line 145) 47364* flexible array members: Zero Length. (line 6) 47365* float as function value type: Incompatibilities. (line 141) 47366* floating point precision <1>: Disappointments. (line 68) 47367* floating point precision: Optimize Options. (line 1810) 47368* floor: Other Builtins. (line 6) 47369* floorf: Other Builtins. (line 6) 47370* floorl: Other Builtins. (line 6) 47371* fma: Other Builtins. (line 6) 47372* fmaf: Other Builtins. (line 6) 47373* fmal: Other Builtins. (line 6) 47374* fmax: Other Builtins. (line 6) 47375* fmaxf: Other Builtins. (line 6) 47376* fmaxl: Other Builtins. (line 6) 47377* fmin: Other Builtins. (line 6) 47378* fminf: Other Builtins. (line 6) 47379* fminl: Other Builtins. (line 6) 47380* fmod: Other Builtins. (line 6) 47381* fmodf: Other Builtins. (line 6) 47382* fmodl: Other Builtins. (line 6) 47383* force_align_arg_pointer attribute: Function Attributes. 47384 (line 1111) 47385* format function attribute: Function Attributes. 47386 (line 420) 47387* format_arg function attribute: Function Attributes. 47388 (line 485) 47389* Fortran: G++ and GCC. (line 6) 47390* forwarding calls: Constructing Calls. (line 6) 47391* fprintf: Other Builtins. (line 6) 47392* fprintf_unlocked: Other Builtins. (line 6) 47393* fputs: Other Builtins. (line 6) 47394* fputs_unlocked: Other Builtins. (line 6) 47395* FR30 Options: FR30 Options. (line 6) 47396* freestanding environment: Standards. (line 13) 47397* freestanding implementation: Standards. (line 13) 47398* frexp: Other Builtins. (line 6) 47399* frexpf: Other Builtins. (line 6) 47400* frexpl: Other Builtins. (line 6) 47401* FRV Options: FRV Options. (line 6) 47402* fscanf: Other Builtins. (line 6) 47403* fscanf, and constant strings: Incompatibilities. (line 17) 47404* function addressability on the M32R/D: Function Attributes. 47405 (line 807) 47406* function attributes: Function Attributes. 47407 (line 6) 47408* function pointers, arithmetic: Pointer Arith. (line 6) 47409* function prototype declarations: Function Prototypes. 47410 (line 6) 47411* function without a prologue/epilogue code: Function Attributes. 47412 (line 865) 47413* function, size of pointer to: Pointer Arith. (line 6) 47414* functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 47415 (line 761) 47416* functions in arbitrary sections: Function Attributes. 47417 (line 6) 47418* functions that are dynamically resolved: Function Attributes. 47419 (line 6) 47420* functions that are passed arguments in registers on the 386: Function Attributes. 47421 (line 6) 47422* functions that behave like malloc: Function Attributes. 47423 (line 6) 47424* functions that do not pop the argument stack on the 386: Function Attributes. 47425 (line 6) 47426* functions that do pop the argument stack on the 386: Function Attributes. 47427 (line 177) 47428* functions that have different compilation options on the 386: Function Attributes. 47429 (line 6) 47430* functions that have different optimization options: Function Attributes. 47431 (line 6) 47432* functions that have no side effects: Function Attributes. 47433 (line 6) 47434* functions that never return: Function Attributes. 47435 (line 6) 47436* functions that pop the argument stack on the 386: Function Attributes. 47437 (line 6) 47438* functions that return more than once: Function Attributes. 47439 (line 6) 47440* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 47441 (line 878) 47442* functions which handle memory bank switching: Function Attributes. 47443 (line 375) 47444* functions with non-null pointer arguments: Function Attributes. 47445 (line 6) 47446* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 47447 (line 6) 47448* g in constraint: Simple Constraints. (line 120) 47449* G in constraint: Simple Constraints. (line 98) 47450* g++: Invoking G++. (line 14) 47451* G++: G++ and GCC. (line 30) 47452* gamma: Other Builtins. (line 6) 47453* gamma_r: Other Builtins. (line 6) 47454* gammaf: Other Builtins. (line 6) 47455* gammaf_r: Other Builtins. (line 6) 47456* gammal: Other Builtins. (line 6) 47457* gammal_r: Other Builtins. (line 6) 47458* GCC: G++ and GCC. (line 6) 47459* GCC command options: Invoking GCC. (line 6) 47460* GCC_EXEC_PREFIX: Environment Variables. 47461 (line 52) 47462* gcc_struct: Type Attributes. (line 319) 47463* gcc_struct attribute: Variable Attributes. 47464 (line 407) 47465* gcov: Debugging Options. (line 366) 47466* gettext: Other Builtins. (line 6) 47467* global offset table: Code Gen Options. (line 184) 47468* global register after longjmp: Global Reg Vars. (line 66) 47469* global register variables: Global Reg Vars. (line 6) 47470* GNAT: G++ and GCC. (line 30) 47471* GNU C Compiler: G++ and GCC. (line 6) 47472* GNU Compiler Collection: G++ and GCC. (line 6) 47473* gnu_inline function attribute: Function Attributes. 47474 (line 95) 47475* Go: G++ and GCC. (line 6) 47476* goto with computed label: Labels as Values. (line 6) 47477* gprof: Debugging Options. (line 296) 47478* grouping options: Invoking GCC. (line 26) 47479* H in constraint: Simple Constraints. (line 98) 47480* half-precision floating point: Half-Precision. (line 6) 47481* hardware models and configurations, specifying: Submodel Options. 47482 (line 6) 47483* hex floats: Hex Floats. (line 6) 47484* HK fixed-suffix: Fixed-Point. (line 6) 47485* hk fixed-suffix: Fixed-Point. (line 6) 47486* hosted environment <1>: C Dialect Options. (line 218) 47487* hosted environment: Standards. (line 13) 47488* hosted implementation: Standards. (line 13) 47489* hot function attribute: Function Attributes. 47490 (line 1056) 47491* HPPA Options: HPPA Options. (line 6) 47492* HR fixed-suffix: Fixed-Point. (line 6) 47493* hr fixed-suffix: Fixed-Point. (line 6) 47494* hypot: Other Builtins. (line 6) 47495* hypotf: Other Builtins. (line 6) 47496* hypotl: Other Builtins. (line 6) 47497* I in constraint: Simple Constraints. (line 81) 47498* i in constraint: Simple Constraints. (line 70) 47499* i386 and x86-64 Windows Options: i386 and x86-64 Windows Options. 47500 (line 6) 47501* i386 Options: i386 and x86-64 Options. 47502 (line 6) 47503* IA-64 Options: IA-64 Options. (line 6) 47504* IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 47505 (line 6) 47506* identifier names, dollar signs in: Dollar Signs. (line 6) 47507* identifiers, names in assembler code: Asm Labels. (line 6) 47508* ifunc attribute: Function Attributes. 47509 (line 648) 47510* ilogb: Other Builtins. (line 6) 47511* ilogbf: Other Builtins. (line 6) 47512* ilogbl: Other Builtins. (line 6) 47513* imaxabs: Other Builtins. (line 6) 47514* implementation-defined behavior, C language: C Implementation. 47515 (line 6) 47516* implementation-defined behavior, C++ language: C++ Implementation. 47517 (line 6) 47518* implied #pragma implementation: C++ Interface. (line 46) 47519* incompatibilities of GCC: Incompatibilities. (line 6) 47520* increment operators: Bug Criteria. (line 17) 47521* index: Other Builtins. (line 6) 47522* indirect calls on ARM: Function Attributes. 47523 (line 751) 47524* indirect calls on MIPS: Function Attributes. 47525 (line 773) 47526* init_priority attribute: C++ Attributes. (line 9) 47527* initializations in expressions: Compound Literals. (line 6) 47528* initializers with labeled elements: Designated Inits. (line 6) 47529* initializers, non-constant: Initializers. (line 6) 47530* inline automatic for C++ member fns: Inline. (line 71) 47531* inline functions: Inline. (line 6) 47532* inline functions, omission of: Inline. (line 51) 47533* inlining and C++ pragmas: C++ Interface. (line 66) 47534* installation trouble: Trouble. (line 6) 47535* integrating function code: Inline. (line 6) 47536* Intel 386 Options: i386 and x86-64 Options. 47537 (line 6) 47538* interface and implementation headers, C++: C++ Interface. (line 6) 47539* intermediate C version, nonexistent: G++ and GCC. (line 35) 47540* interrupt handler functions: Function Attributes. 47541 (line 140) 47542* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 47543 (line 688) 47544* interrupt service routines on ARM: Function Attributes. 47545 (line 703) 47546* interrupt thread functions on fido: Function Attributes. 47547 (line 695) 47548* introduction: Top. (line 6) 47549* invalid assembly code: Bug Criteria. (line 12) 47550* invalid input: Bug Criteria. (line 42) 47551* invoking g++: Invoking G++. (line 22) 47552* isalnum: Other Builtins. (line 6) 47553* isalpha: Other Builtins. (line 6) 47554* isascii: Other Builtins. (line 6) 47555* isblank: Other Builtins. (line 6) 47556* iscntrl: Other Builtins. (line 6) 47557* isdigit: Other Builtins. (line 6) 47558* isgraph: Other Builtins. (line 6) 47559* islower: Other Builtins. (line 6) 47560* ISO 9899: Standards. (line 13) 47561* ISO C: Standards. (line 13) 47562* ISO C standard: Standards. (line 13) 47563* ISO C1X: Standards. (line 13) 47564* ISO C90: Standards. (line 13) 47565* ISO C94: Standards. (line 13) 47566* ISO C95: Standards. (line 13) 47567* ISO C99: Standards. (line 13) 47568* ISO C9X: Standards. (line 13) 47569* ISO support: C Dialect Options. (line 10) 47570* ISO/IEC 9899: Standards. (line 13) 47571* isprint: Other Builtins. (line 6) 47572* ispunct: Other Builtins. (line 6) 47573* isspace: Other Builtins. (line 6) 47574* isupper: Other Builtins. (line 6) 47575* iswalnum: Other Builtins. (line 6) 47576* iswalpha: Other Builtins. (line 6) 47577* iswblank: Other Builtins. (line 6) 47578* iswcntrl: Other Builtins. (line 6) 47579* iswdigit: Other Builtins. (line 6) 47580* iswgraph: Other Builtins. (line 6) 47581* iswlower: Other Builtins. (line 6) 47582* iswprint: Other Builtins. (line 6) 47583* iswpunct: Other Builtins. (line 6) 47584* iswspace: Other Builtins. (line 6) 47585* iswupper: Other Builtins. (line 6) 47586* iswxdigit: Other Builtins. (line 6) 47587* isxdigit: Other Builtins. (line 6) 47588* j0: Other Builtins. (line 6) 47589* j0f: Other Builtins. (line 6) 47590* j0l: Other Builtins. (line 6) 47591* j1: Other Builtins. (line 6) 47592* j1f: Other Builtins. (line 6) 47593* j1l: Other Builtins. (line 6) 47594* Java: G++ and GCC. (line 6) 47595* java_interface attribute: C++ Attributes. (line 29) 47596* jn: Other Builtins. (line 6) 47597* jnf: Other Builtins. (line 6) 47598* jnl: Other Builtins. (line 6) 47599* K fixed-suffix: Fixed-Point. (line 6) 47600* k fixed-suffix: Fixed-Point. (line 6) 47601* keep_interrupts_masked attribute: Function Attributes. 47602 (line 624) 47603* keywords, alternate: Alternate Keywords. (line 6) 47604* known causes of trouble: Trouble. (line 6) 47605* l1_data variable attribute: Variable Attributes. 47606 (line 318) 47607* l1_data_A variable attribute: Variable Attributes. 47608 (line 318) 47609* l1_data_B variable attribute: Variable Attributes. 47610 (line 318) 47611* l1_text function attribute: Function Attributes. 47612 (line 712) 47613* l2 function attribute: Function Attributes. 47614 (line 718) 47615* l2 variable attribute: Variable Attributes. 47616 (line 326) 47617* labeled elements in initializers: Designated Inits. (line 6) 47618* labels as values: Labels as Values. (line 6) 47619* labs: Other Builtins. (line 6) 47620* LANG: Environment Variables. 47621 (line 21) 47622* language dialect options: C Dialect Options. (line 6) 47623* LC_ALL: Environment Variables. 47624 (line 21) 47625* LC_CTYPE: Environment Variables. 47626 (line 21) 47627* LC_MESSAGES: Environment Variables. 47628 (line 21) 47629* ldexp: Other Builtins. (line 6) 47630* ldexpf: Other Builtins. (line 6) 47631* ldexpl: Other Builtins. (line 6) 47632* leaf function attribute: Function Attributes. 47633 (line 724) 47634* length-zero arrays: Zero Length. (line 6) 47635* lgamma: Other Builtins. (line 6) 47636* lgamma_r: Other Builtins. (line 6) 47637* lgammaf: Other Builtins. (line 6) 47638* lgammaf_r: Other Builtins. (line 6) 47639* lgammal: Other Builtins. (line 6) 47640* lgammal_r: Other Builtins. (line 6) 47641* Libraries: Link Options. (line 24) 47642* LIBRARY_PATH: Environment Variables. 47643 (line 94) 47644* link options: Link Options. (line 6) 47645* linker script: Link Options. (line 178) 47646* LK fixed-suffix: Fixed-Point. (line 6) 47647* lk fixed-suffix: Fixed-Point. (line 6) 47648* LL integer suffix: Long Long. (line 6) 47649* llabs: Other Builtins. (line 6) 47650* LLK fixed-suffix: Fixed-Point. (line 6) 47651* llk fixed-suffix: Fixed-Point. (line 6) 47652* LLR fixed-suffix: Fixed-Point. (line 6) 47653* llr fixed-suffix: Fixed-Point. (line 6) 47654* llrint: Other Builtins. (line 6) 47655* llrintf: Other Builtins. (line 6) 47656* llrintl: Other Builtins. (line 6) 47657* llround: Other Builtins. (line 6) 47658* llroundf: Other Builtins. (line 6) 47659* llroundl: Other Builtins. (line 6) 47660* LM32 options: LM32 Options. (line 6) 47661* load address instruction: Simple Constraints. (line 154) 47662* local labels: Local Labels. (line 6) 47663* local variables in macros: Typeof. (line 46) 47664* local variables, specifying registers: Local Reg Vars. (line 6) 47665* locale: Environment Variables. 47666 (line 21) 47667* locale definition: Environment Variables. 47668 (line 103) 47669* log: Other Builtins. (line 6) 47670* log10: Other Builtins. (line 6) 47671* log10f: Other Builtins. (line 6) 47672* log10l: Other Builtins. (line 6) 47673* log1p: Other Builtins. (line 6) 47674* log1pf: Other Builtins. (line 6) 47675* log1pl: Other Builtins. (line 6) 47676* log2: Other Builtins. (line 6) 47677* log2f: Other Builtins. (line 6) 47678* log2l: Other Builtins. (line 6) 47679* logb: Other Builtins. (line 6) 47680* logbf: Other Builtins. (line 6) 47681* logbl: Other Builtins. (line 6) 47682* logf: Other Builtins. (line 6) 47683* logl: Other Builtins. (line 6) 47684* long long data types: Long Long. (line 6) 47685* longjmp: Global Reg Vars. (line 66) 47686* longjmp incompatibilities: Incompatibilities. (line 39) 47687* longjmp warnings: Warning Options. (line 647) 47688* LR fixed-suffix: Fixed-Point. (line 6) 47689* lr fixed-suffix: Fixed-Point. (line 6) 47690* lrint: Other Builtins. (line 6) 47691* lrintf: Other Builtins. (line 6) 47692* lrintl: Other Builtins. (line 6) 47693* lround: Other Builtins. (line 6) 47694* lroundf: Other Builtins. (line 6) 47695* lroundl: Other Builtins. (line 6) 47696* m in constraint: Simple Constraints. (line 17) 47697* M32C options: M32C Options. (line 6) 47698* M32R/D options: M32R/D Options. (line 6) 47699* M680x0 options: M680x0 Options. (line 6) 47700* M68hc1x options: M68hc1x Options. (line 6) 47701* machine dependent options: Submodel Options. (line 6) 47702* machine specific constraints: Machine Constraints. 47703 (line 6) 47704* macro with variable arguments: Variadic Macros. (line 6) 47705* macros containing asm: Extended Asm. (line 242) 47706* macros, inline alternative: Inline. (line 6) 47707* macros, local labels: Local Labels. (line 6) 47708* macros, local variables in: Typeof. (line 46) 47709* macros, statements in expressions: Statement Exprs. (line 6) 47710* macros, types of arguments: Typeof. (line 6) 47711* make: Preprocessor Options. 47712 (line 173) 47713* malloc: Other Builtins. (line 6) 47714* malloc attribute: Function Attributes. 47715 (line 783) 47716* matching constraint: Simple Constraints. (line 139) 47717* MCore options: MCore Options. (line 6) 47718* member fns, automatically inline: Inline. (line 71) 47719* memchr: Other Builtins. (line 6) 47720* memcmp: Other Builtins. (line 6) 47721* memcpy: Other Builtins. (line 6) 47722* memory references in constraints: Simple Constraints. (line 17) 47723* mempcpy: Other Builtins. (line 6) 47724* memset: Other Builtins. (line 6) 47725* MeP options: MeP Options. (line 6) 47726* Mercury: G++ and GCC. (line 23) 47727* message formatting: Language Independent Options. 47728 (line 6) 47729* messages, warning: Warning Options. (line 6) 47730* messages, warning and error: Warnings and Errors. 47731 (line 6) 47732* MicroBlaze Options: MicroBlaze Options. (line 6) 47733* middle-operands, omitted: Conditionals. (line 6) 47734* MIPS options: MIPS Options. (line 6) 47735* mips16 attribute: Function Attributes. 47736 (line 793) 47737* misunderstandings in C++: C++ Misunderstandings. 47738 (line 6) 47739* mixed declarations and code: Mixed Declarations. (line 6) 47740* mktemp, and constant strings: Incompatibilities. (line 13) 47741* MMIX Options: MMIX Options. (line 6) 47742* MN10300 options: MN10300 Options. (line 6) 47743* mode attribute: Variable Attributes. 47744 (line 134) 47745* modf: Other Builtins. (line 6) 47746* modff: Other Builtins. (line 6) 47747* modfl: Other Builtins. (line 6) 47748* modifiers in constraints: Modifiers. (line 6) 47749* ms_abi attribute: Function Attributes. 47750 (line 835) 47751* ms_hook_prologue attribute: Function Attributes. 47752 (line 859) 47753* ms_struct: Type Attributes. (line 319) 47754* ms_struct attribute: Variable Attributes. 47755 (line 407) 47756* mudflap: Optimize Options. (line 394) 47757* multiple alternative constraints: Multi-Alternative. (line 6) 47758* multiprecision arithmetic: Long Long. (line 6) 47759* n in constraint: Simple Constraints. (line 75) 47760* named address spaces: Named Address Spaces. 47761 (line 6) 47762* names used in assembler code: Asm Labels. (line 6) 47763* naming convention, implementation headers: C++ Interface. (line 46) 47764* nearbyint: Other Builtins. (line 6) 47765* nearbyintf: Other Builtins. (line 6) 47766* nearbyintl: Other Builtins. (line 6) 47767* nested functions: Nested Functions. (line 6) 47768* newlines (escaped): Escaped Newlines. (line 6) 47769* nextafter: Other Builtins. (line 6) 47770* nextafterf: Other Builtins. (line 6) 47771* nextafterl: Other Builtins. (line 6) 47772* nexttoward: Other Builtins. (line 6) 47773* nexttowardf: Other Builtins. (line 6) 47774* nexttowardl: Other Builtins. (line 6) 47775* NFC: Warning Options. (line 1209) 47776* NFKC: Warning Options. (line 1209) 47777* NMI handler functions on the Blackfin processor: Function Attributes. 47778 (line 893) 47779* no_instrument_function function attribute: Function Attributes. 47780 (line 899) 47781* no_split_stack function attribute: Function Attributes. 47782 (line 904) 47783* noclone function attribute: Function Attributes. 47784 (line 920) 47785* nocommon attribute: Variable Attributes. 47786 (line 105) 47787* noinline function attribute: Function Attributes. 47788 (line 910) 47789* nomips16 attribute: Function Attributes. 47790 (line 793) 47791* non-constant initializers: Initializers. (line 6) 47792* non-static inline function: Inline. (line 85) 47793* nonnull function attribute: Function Attributes. 47794 (line 926) 47795* noreturn function attribute: Function Attributes. 47796 (line 949) 47797* nothrow function attribute: Function Attributes. 47798 (line 991) 47799* o in constraint: Simple Constraints. (line 23) 47800* OBJC_INCLUDE_PATH: Environment Variables. 47801 (line 129) 47802* Objective-C <1>: Standards. (line 157) 47803* Objective-C: G++ and GCC. (line 6) 47804* Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options. 47805 (line 6) 47806* Objective-C++ <1>: Standards. (line 157) 47807* Objective-C++: G++ and GCC. (line 6) 47808* offsettable address: Simple Constraints. (line 23) 47809* old-style function definitions: Function Prototypes. 47810 (line 6) 47811* omitted middle-operands: Conditionals. (line 6) 47812* open coding: Inline. (line 6) 47813* OpenMP parallel: C Dialect Options. (line 235) 47814* operand constraints, asm: Constraints. (line 6) 47815* optimize function attribute: Function Attributes. 47816 (line 999) 47817* optimize options: Optimize Options. (line 6) 47818* options to control diagnostics formatting: Language Independent Options. 47819 (line 6) 47820* options to control warnings: Warning Options. (line 6) 47821* options, C++: C++ Dialect Options. 47822 (line 6) 47823* options, code generation: Code Gen Options. (line 6) 47824* options, debugging: Debugging Options. (line 6) 47825* options, dialect: C Dialect Options. (line 6) 47826* options, directory search: Directory Options. (line 6) 47827* options, GCC command: Invoking GCC. (line 6) 47828* options, grouping: Invoking GCC. (line 26) 47829* options, linking: Link Options. (line 6) 47830* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 47831 (line 6) 47832* options, optimization: Optimize Options. (line 6) 47833* options, order: Invoking GCC. (line 30) 47834* options, preprocessor: Preprocessor Options. 47835 (line 6) 47836* order of evaluation, side effects: Non-bugs. (line 196) 47837* order of options: Invoking GCC. (line 30) 47838* other register constraints: Simple Constraints. (line 163) 47839* output file option: Overall Options. (line 191) 47840* overloaded virtual function, warning: C++ Dialect Options. 47841 (line 538) 47842* p in constraint: Simple Constraints. (line 154) 47843* packed attribute: Variable Attributes. 47844 (line 145) 47845* parameter forward declaration: Variable Length. (line 59) 47846* Pascal: G++ and GCC. (line 23) 47847* pcs function attribute: Function Attributes. 47848 (line 1016) 47849* PDP-11 Options: PDP-11 Options. (line 6) 47850* PIC: Code Gen Options. (line 184) 47851* picoChip options: picoChip Options. (line 6) 47852* pmf: Bound member functions. 47853 (line 6) 47854* pointer arguments: Function Attributes. 47855 (line 188) 47856* pointer to member function: Bound member functions. 47857 (line 6) 47858* portions of temporary objects, pointers to: Temporaries. (line 6) 47859* pow: Other Builtins. (line 6) 47860* pow10: Other Builtins. (line 6) 47861* pow10f: Other Builtins. (line 6) 47862* pow10l: Other Builtins. (line 6) 47863* PowerPC options: PowerPC Options. (line 6) 47864* powf: Other Builtins. (line 6) 47865* powl: Other Builtins. (line 6) 47866* pragma GCC optimize: Function Specific Option Pragmas. 47867 (line 21) 47868* pragma GCC pop_options: Function Specific Option Pragmas. 47869 (line 34) 47870* pragma GCC push_options: Function Specific Option Pragmas. 47871 (line 34) 47872* pragma GCC reset_options: Function Specific Option Pragmas. 47873 (line 44) 47874* pragma GCC target: Function Specific Option Pragmas. 47875 (line 7) 47876* pragma, address: M32C Pragmas. (line 15) 47877* pragma, align: Solaris Pragmas. (line 11) 47878* pragma, call: MeP Pragmas. (line 48) 47879* pragma, coprocessor available: MeP Pragmas. (line 13) 47880* pragma, coprocessor call_saved: MeP Pragmas. (line 20) 47881* pragma, coprocessor subclass: MeP Pragmas. (line 28) 47882* pragma, custom io_volatile: MeP Pragmas. (line 7) 47883* pragma, diagnostic: Diagnostic Pragmas. (line 14) 47884* pragma, disinterrupt: MeP Pragmas. (line 38) 47885* pragma, extern_prefix: Symbol-Renaming Pragmas. 47886 (line 20) 47887* pragma, fini: Solaris Pragmas. (line 19) 47888* pragma, init: Solaris Pragmas. (line 24) 47889* pragma, long_calls: ARM Pragmas. (line 11) 47890* pragma, long_calls_off: ARM Pragmas. (line 17) 47891* pragma, longcall: RS/6000 and PowerPC Pragmas. 47892 (line 14) 47893* pragma, mark: Darwin Pragmas. (line 11) 47894* pragma, memregs: M32C Pragmas. (line 7) 47895* pragma, no_long_calls: ARM Pragmas. (line 14) 47896* pragma, options align: Darwin Pragmas. (line 14) 47897* pragma, pop_macro: Push/Pop Macro Pragmas. 47898 (line 15) 47899* pragma, push_macro: Push/Pop Macro Pragmas. 47900 (line 11) 47901* pragma, reason for not using: Function Attributes. 47902 (line 1738) 47903* pragma, redefine_extname: Symbol-Renaming Pragmas. 47904 (line 14) 47905* pragma, segment: Darwin Pragmas. (line 21) 47906* pragma, unused: Darwin Pragmas. (line 24) 47907* pragma, visibility: Visibility Pragmas. (line 8) 47908* pragma, weak: Weak Pragmas. (line 10) 47909* pragmas: Pragmas. (line 6) 47910* pragmas in C++, effect on inlining: C++ Interface. (line 66) 47911* pragmas, interface and implementation: C++ Interface. (line 6) 47912* pragmas, warning of unknown: Warning Options. (line 664) 47913* precompiled headers: Precompiled Headers. 47914 (line 6) 47915* preprocessing numbers: Incompatibilities. (line 173) 47916* preprocessing tokens: Incompatibilities. (line 173) 47917* preprocessor options: Preprocessor Options. 47918 (line 6) 47919* printf: Other Builtins. (line 6) 47920* printf_unlocked: Other Builtins. (line 6) 47921* prof: Debugging Options. (line 290) 47922* progmem variable attribute: Variable Attributes. 47923 (line 561) 47924* promotion of formal parameters: Function Prototypes. 47925 (line 6) 47926* pure function attribute: Function Attributes. 47927 (line 1034) 47928* push address instruction: Simple Constraints. (line 154) 47929* putchar: Other Builtins. (line 6) 47930* puts: Other Builtins. (line 6) 47931* Q floating point suffix: Floating Types. (line 6) 47932* q floating point suffix: Floating Types. (line 6) 47933* qsort, and global register variables: Global Reg Vars. (line 42) 47934* question mark: Multi-Alternative. (line 27) 47935* R fixed-suffix: Fixed-Point. (line 6) 47936* r fixed-suffix: Fixed-Point. (line 6) 47937* r in constraint: Simple Constraints. (line 66) 47938* ranges in case statements: Case Ranges. (line 6) 47939* read-only strings: Incompatibilities. (line 9) 47940* register variable after longjmp: Global Reg Vars. (line 66) 47941* registers: Extended Asm. (line 6) 47942* registers for local variables: Local Reg Vars. (line 6) 47943* registers in constraints: Simple Constraints. (line 66) 47944* registers, global allocation: Explicit Reg Vars. (line 6) 47945* registers, global variables in: Global Reg Vars. (line 6) 47946* regparm attribute: Function Attributes. 47947 (line 1087) 47948* relocation truncated to fit (ColdFire): M680x0 Options. (line 329) 47949* relocation truncated to fit (MIPS): MIPS Options. (line 201) 47950* remainder: Other Builtins. (line 6) 47951* remainderf: Other Builtins. (line 6) 47952* remainderl: Other Builtins. (line 6) 47953* remquo: Other Builtins. (line 6) 47954* remquof: Other Builtins. (line 6) 47955* remquol: Other Builtins. (line 6) 47956* reordering, warning: C++ Dialect Options. 47957 (line 463) 47958* reporting bugs: Bugs. (line 6) 47959* resbank attribute: Function Attributes. 47960 (line 1119) 47961* rest argument (in macro): Variadic Macros. (line 6) 47962* restricted pointers: Restricted Pointers. 47963 (line 6) 47964* restricted references: Restricted Pointers. 47965 (line 6) 47966* restricted this pointer: Restricted Pointers. 47967 (line 6) 47968* returns_twice attribute: Function Attributes. 47969 (line 1133) 47970* rindex: Other Builtins. (line 6) 47971* rint: Other Builtins. (line 6) 47972* rintf: Other Builtins. (line 6) 47973* rintl: Other Builtins. (line 6) 47974* round: Other Builtins. (line 6) 47975* roundf: Other Builtins. (line 6) 47976* roundl: Other Builtins. (line 6) 47977* RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 47978 (line 6) 47979* RTTI: Vague Linkage. (line 43) 47980* run-time options: Code Gen Options. (line 6) 47981* RX Options: RX Options. (line 6) 47982* s in constraint: Simple Constraints. (line 102) 47983* S/390 and zSeries Options: S/390 and zSeries Options. 47984 (line 6) 47985* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 47986 (line 1142) 47987* save volatile registers on the MicroBlaze: Function Attributes. 47988 (line 1147) 47989* scalb: Other Builtins. (line 6) 47990* scalbf: Other Builtins. (line 6) 47991* scalbl: Other Builtins. (line 6) 47992* scalbln: Other Builtins. (line 6) 47993* scalblnf: Other Builtins. (line 6) 47994* scalbn: Other Builtins. (line 6) 47995* scalbnf: Other Builtins. (line 6) 47996* scanf, and constant strings: Incompatibilities. (line 17) 47997* scanfnl: Other Builtins. (line 6) 47998* scope of a variable length array: Variable Length. (line 22) 47999* scope of declaration: Disappointments. (line 21) 48000* scope of external declarations: Incompatibilities. (line 80) 48001* Score Options: Score Options. (line 6) 48002* search path: Directory Options. (line 6) 48003* section function attribute: Function Attributes. 48004 (line 1155) 48005* section variable attribute: Variable Attributes. 48006 (line 166) 48007* sentinel function attribute: Function Attributes. 48008 (line 1171) 48009* setjmp: Global Reg Vars. (line 66) 48010* setjmp incompatibilities: Incompatibilities. (line 39) 48011* shared strings: Incompatibilities. (line 9) 48012* shared variable attribute: Variable Attributes. 48013 (line 211) 48014* side effect in ?:: Conditionals. (line 20) 48015* side effects, macro argument: Statement Exprs. (line 35) 48016* side effects, order of evaluation: Non-bugs. (line 196) 48017* signal handler functions on the AVR processors: Function Attributes. 48018 (line 1202) 48019* signbit: Other Builtins. (line 6) 48020* signbitd128: Other Builtins. (line 6) 48021* signbitd32: Other Builtins. (line 6) 48022* signbitd64: Other Builtins. (line 6) 48023* signbitf: Other Builtins. (line 6) 48024* signbitl: Other Builtins. (line 6) 48025* signed and unsigned values, comparison warning: Warning Options. 48026 (line 1081) 48027* significand: Other Builtins. (line 6) 48028* significandf: Other Builtins. (line 6) 48029* significandl: Other Builtins. (line 6) 48030* simple constraints: Simple Constraints. (line 6) 48031* sin: Other Builtins. (line 6) 48032* sincos: Other Builtins. (line 6) 48033* sincosf: Other Builtins. (line 6) 48034* sincosl: Other Builtins. (line 6) 48035* sinf: Other Builtins. (line 6) 48036* sinh: Other Builtins. (line 6) 48037* sinhf: Other Builtins. (line 6) 48038* sinhl: Other Builtins. (line 6) 48039* sinl: Other Builtins. (line 6) 48040* sizeof: Typeof. (line 6) 48041* smaller data references: M32R/D Options. (line 57) 48042* smaller data references (PowerPC): RS/6000 and PowerPC Options. 48043 (line 701) 48044* snprintf: Other Builtins. (line 6) 48045* Solaris 2 options: Solaris 2 Options. (line 6) 48046* SPARC options: SPARC Options. (line 6) 48047* Spec Files: Spec Files. (line 6) 48048* specified registers: Explicit Reg Vars. (line 6) 48049* specifying compiler version and target machine: Target Options. 48050 (line 6) 48051* specifying hardware config: Submodel Options. (line 6) 48052* specifying machine version: Target Options. (line 6) 48053* specifying registers for local variables: Local Reg Vars. (line 6) 48054* speed of compilation: Precompiled Headers. 48055 (line 6) 48056* sprintf: Other Builtins. (line 6) 48057* SPU options: SPU Options. (line 6) 48058* sqrt: Other Builtins. (line 6) 48059* sqrtf: Other Builtins. (line 6) 48060* sqrtl: Other Builtins. (line 6) 48061* sscanf: Other Builtins. (line 6) 48062* sscanf, and constant strings: Incompatibilities. (line 17) 48063* sseregparm attribute: Function Attributes. 48064 (line 1104) 48065* statements inside expressions: Statement Exprs. (line 6) 48066* static data in C++, declaring and defining: Static Definitions. 48067 (line 6) 48068* stpcpy: Other Builtins. (line 6) 48069* stpncpy: Other Builtins. (line 6) 48070* strcasecmp: Other Builtins. (line 6) 48071* strcat: Other Builtins. (line 6) 48072* strchr: Other Builtins. (line 6) 48073* strcmp: Other Builtins. (line 6) 48074* strcpy: Other Builtins. (line 6) 48075* strcspn: Other Builtins. (line 6) 48076* strdup: Other Builtins. (line 6) 48077* strfmon: Other Builtins. (line 6) 48078* strftime: Other Builtins. (line 6) 48079* string constants: Incompatibilities. (line 9) 48080* strlen: Other Builtins. (line 6) 48081* strncasecmp: Other Builtins. (line 6) 48082* strncat: Other Builtins. (line 6) 48083* strncmp: Other Builtins. (line 6) 48084* strncpy: Other Builtins. (line 6) 48085* strndup: Other Builtins. (line 6) 48086* strpbrk: Other Builtins. (line 6) 48087* strrchr: Other Builtins. (line 6) 48088* strspn: Other Builtins. (line 6) 48089* strstr: Other Builtins. (line 6) 48090* struct: Unnamed Fields. (line 6) 48091* structures: Incompatibilities. (line 146) 48092* structures, constructor expression: Compound Literals. (line 6) 48093* submodel options: Submodel Options. (line 6) 48094* subscripting: Subscripting. (line 6) 48095* subscripting and function values: Subscripting. (line 6) 48096* suffixes for C++ source: Invoking G++. (line 6) 48097* SUNPRO_DEPENDENCIES: Environment Variables. 48098 (line 169) 48099* suppressing warnings: Warning Options. (line 6) 48100* surprises in C++: C++ Misunderstandings. 48101 (line 6) 48102* syntax checking: Warning Options. (line 13) 48103* syscall_linkage attribute: Function Attributes. 48104 (line 1224) 48105* system headers, warnings from: Warning Options. (line 796) 48106* sysv_abi attribute: Function Attributes. 48107 (line 835) 48108* tan: Other Builtins. (line 6) 48109* tanf: Other Builtins. (line 6) 48110* tanh: Other Builtins. (line 6) 48111* tanhf: Other Builtins. (line 6) 48112* tanhl: Other Builtins. (line 6) 48113* tanl: Other Builtins. (line 6) 48114* target function attribute: Function Attributes. 48115 (line 1231) 48116* target machine, specifying: Target Options. (line 6) 48117* target options: Target Options. (line 6) 48118* target("abm") attribute: Function Attributes. 48119 (line 1258) 48120* target("aes") attribute: Function Attributes. 48121 (line 1263) 48122* target("align-stringops") attribute: Function Attributes. 48123 (line 1353) 48124* target("altivec") attribute: Function Attributes. 48125 (line 1379) 48126* target("arch=ARCH") attribute: Function Attributes. 48127 (line 1362) 48128* target("avoid-indexed-addresses") attribute: Function Attributes. 48129 (line 1499) 48130* target("cld") attribute: Function Attributes. 48131 (line 1324) 48132* target("cmpb") attribute: Function Attributes. 48133 (line 1385) 48134* target("cpu=CPU") attribute: Function Attributes. 48135 (line 1514) 48136* target("dlmzb") attribute: Function Attributes. 48137 (line 1391) 48138* target("fancy-math-387") attribute: Function Attributes. 48139 (line 1328) 48140* target("fma4") attribute: Function Attributes. 48141 (line 1308) 48142* target("fpmath=FPMATH") attribute: Function Attributes. 48143 (line 1370) 48144* target("fprnd") attribute: Function Attributes. 48145 (line 1398) 48146* target("friz") attribute: Function Attributes. 48147 (line 1490) 48148* target("fused-madd") attribute: Function Attributes. 48149 (line 1333) 48150* target("hard-dfp") attribute: Function Attributes. 48151 (line 1404) 48152* target("ieee-fp") attribute: Function Attributes. 48153 (line 1338) 48154* target("inline-all-stringops") attribute: Function Attributes. 48155 (line 1343) 48156* target("inline-stringops-dynamically") attribute: Function Attributes. 48157 (line 1347) 48158* target("isel") attribute: Function Attributes. 48159 (line 1409) 48160* target("longcall") attribute: Function Attributes. 48161 (line 1509) 48162* target("lwp") attribute: Function Attributes. 48163 (line 1316) 48164* target("mfcrf") attribute: Function Attributes. 48165 (line 1413) 48166* target("mfpgpr") attribute: Function Attributes. 48167 (line 1420) 48168* target("mmx") attribute: Function Attributes. 48169 (line 1267) 48170* target("mulhw") attribute: Function Attributes. 48171 (line 1427) 48172* target("multiple") attribute: Function Attributes. 48173 (line 1434) 48174* target("paired") attribute: Function Attributes. 48175 (line 1504) 48176* target("pclmul") attribute: Function Attributes. 48177 (line 1271) 48178* target("popcnt") attribute: Function Attributes. 48179 (line 1275) 48180* target("popcntb") attribute: Function Attributes. 48181 (line 1445) 48182* target("popcntd") attribute: Function Attributes. 48183 (line 1452) 48184* target("powerpc-gfxopt") attribute: Function Attributes. 48185 (line 1458) 48186* target("powerpc-gpopt") attribute: Function Attributes. 48187 (line 1464) 48188* target("recip") attribute: Function Attributes. 48189 (line 1357) 48190* target("recip-precision") attribute: Function Attributes. 48191 (line 1470) 48192* target("sse") attribute: Function Attributes. 48193 (line 1279) 48194* target("sse2") attribute: Function Attributes. 48195 (line 1283) 48196* target("sse3") attribute: Function Attributes. 48197 (line 1287) 48198* target("sse4") attribute: Function Attributes. 48199 (line 1291) 48200* target("sse4.1") attribute: Function Attributes. 48201 (line 1296) 48202* target("sse4.2") attribute: Function Attributes. 48203 (line 1300) 48204* target("sse4a") attribute: Function Attributes. 48205 (line 1304) 48206* target("ssse3") attribute: Function Attributes. 48207 (line 1320) 48208* target("string") attribute: Function Attributes. 48209 (line 1476) 48210* target("tune=TUNE") attribute: Function Attributes. 48211 (line 1366) 48212* target("update") attribute: Function Attributes. 48213 (line 1439) 48214* target("vsx") attribute: Function Attributes. 48215 (line 1482) 48216* target("xop") attribute: Function Attributes. 48217 (line 1312) 48218* TC1: Standards. (line 13) 48219* TC2: Standards. (line 13) 48220* TC3: Standards. (line 13) 48221* Technical Corrigenda: Standards. (line 13) 48222* Technical Corrigendum 1: Standards. (line 13) 48223* Technical Corrigendum 2: Standards. (line 13) 48224* Technical Corrigendum 3: Standards. (line 13) 48225* template instantiation: Template Instantiation. 48226 (line 6) 48227* temporaries, lifetime of: Temporaries. (line 6) 48228* tgamma: Other Builtins. (line 6) 48229* tgammaf: Other Builtins. (line 6) 48230* tgammal: Other Builtins. (line 6) 48231* Thread-Local Storage: Thread-Local. (line 6) 48232* thunks: Nested Functions. (line 6) 48233* tiny data section on the H8/300H and H8S: Function Attributes. 48234 (line 1543) 48235* TLS: Thread-Local. (line 6) 48236* tls_model attribute: Variable Attributes. 48237 (line 235) 48238* TMPDIR: Environment Variables. 48239 (line 45) 48240* toascii: Other Builtins. (line 6) 48241* tolower: Other Builtins. (line 6) 48242* toupper: Other Builtins. (line 6) 48243* towlower: Other Builtins. (line 6) 48244* towupper: Other Builtins. (line 6) 48245* traditional C language: C Dialect Options. (line 282) 48246* trunc: Other Builtins. (line 6) 48247* truncf: Other Builtins. (line 6) 48248* truncl: Other Builtins. (line 6) 48249* two-stage name lookup: Name lookup. (line 6) 48250* type alignment: Alignment. (line 6) 48251* type attributes: Type Attributes. (line 6) 48252* type_info: Vague Linkage. (line 43) 48253* typedef names as function parameters: Incompatibilities. (line 97) 48254* typeof: Typeof. (line 6) 48255* UHK fixed-suffix: Fixed-Point. (line 6) 48256* uhk fixed-suffix: Fixed-Point. (line 6) 48257* UHR fixed-suffix: Fixed-Point. (line 6) 48258* uhr fixed-suffix: Fixed-Point. (line 6) 48259* UK fixed-suffix: Fixed-Point. (line 6) 48260* uk fixed-suffix: Fixed-Point. (line 6) 48261* ULK fixed-suffix: Fixed-Point. (line 6) 48262* ulk fixed-suffix: Fixed-Point. (line 6) 48263* ULL integer suffix: Long Long. (line 6) 48264* ULLK fixed-suffix: Fixed-Point. (line 6) 48265* ullk fixed-suffix: Fixed-Point. (line 6) 48266* ULLR fixed-suffix: Fixed-Point. (line 6) 48267* ullr fixed-suffix: Fixed-Point. (line 6) 48268* ULR fixed-suffix: Fixed-Point. (line 6) 48269* ulr fixed-suffix: Fixed-Point. (line 6) 48270* undefined behavior: Bug Criteria. (line 17) 48271* undefined function value: Bug Criteria. (line 17) 48272* underscores in variables in macros: Typeof. (line 46) 48273* union: Unnamed Fields. (line 6) 48274* union, casting to a: Cast to Union. (line 6) 48275* unions: Incompatibilities. (line 146) 48276* unknown pragmas, warning: Warning Options. (line 664) 48277* unresolved references and -nodefaultlibs: Link Options. (line 82) 48278* unresolved references and -nostdlib: Link Options. (line 82) 48279* unused attribute.: Function Attributes. 48280 (line 1555) 48281* UR fixed-suffix: Fixed-Point. (line 6) 48282* ur fixed-suffix: Fixed-Point. (line 6) 48283* use_debug_exception_return attribute: Function Attributes. 48284 (line 629) 48285* use_shadow_register_set attribute: Function Attributes. 48286 (line 620) 48287* used attribute.: Function Attributes. 48288 (line 1560) 48289* User stack pointer in interrupts on the Blackfin: Function Attributes. 48290 (line 707) 48291* V in constraint: Simple Constraints. (line 43) 48292* V850 Options: V850 Options. (line 6) 48293* vague linkage: Vague Linkage. (line 6) 48294* value after longjmp: Global Reg Vars. (line 66) 48295* variable addressability on the IA-64: Function Attributes. 48296 (line 807) 48297* variable addressability on the M32R/D: Variable Attributes. 48298 (line 336) 48299* variable alignment: Alignment. (line 6) 48300* variable attributes: Variable Attributes. 48301 (line 6) 48302* variable number of arguments: Variadic Macros. (line 6) 48303* variable-length array scope: Variable Length. (line 22) 48304* variable-length arrays: Variable Length. (line 6) 48305* variables in specified registers: Explicit Reg Vars. (line 6) 48306* variables, local, in macros: Typeof. (line 46) 48307* variadic macros: Variadic Macros. (line 6) 48308* VAX options: VAX Options. (line 6) 48309* version_id attribute: Function Attributes. 48310 (line 1566) 48311* vfprintf: Other Builtins. (line 6) 48312* vfscanf: Other Builtins. (line 6) 48313* visibility attribute: Function Attributes. 48314 (line 1576) 48315* VLAs: Variable Length. (line 6) 48316* vliw attribute: Function Attributes. 48317 (line 1670) 48318* void pointers, arithmetic: Pointer Arith. (line 6) 48319* void, size of pointer to: Pointer Arith. (line 6) 48320* volatile access <1>: C++ Volatiles. (line 6) 48321* volatile access: Volatiles. (line 6) 48322* volatile applied to function: Function Attributes. 48323 (line 6) 48324* volatile read <1>: C++ Volatiles. (line 6) 48325* volatile read: Volatiles. (line 6) 48326* volatile write <1>: C++ Volatiles. (line 6) 48327* volatile write: Volatiles. (line 6) 48328* vprintf: Other Builtins. (line 6) 48329* vscanf: Other Builtins. (line 6) 48330* vsnprintf: Other Builtins. (line 6) 48331* vsprintf: Other Builtins. (line 6) 48332* vsscanf: Other Builtins. (line 6) 48333* vtable: Vague Linkage. (line 28) 48334* VxWorks Options: VxWorks Options. (line 6) 48335* W floating point suffix: Floating Types. (line 6) 48336* w floating point suffix: Floating Types. (line 6) 48337* warn_unused_result attribute: Function Attributes. 48338 (line 1676) 48339* warning for comparison of signed and unsigned values: Warning Options. 48340 (line 1081) 48341* warning for overloaded virtual function: C++ Dialect Options. 48342 (line 538) 48343* warning for reordering of member initializers: C++ Dialect Options. 48344 (line 463) 48345* warning for unknown pragmas: Warning Options. (line 664) 48346* warning function attribute: Function Attributes. 48347 (line 165) 48348* warning messages: Warning Options. (line 6) 48349* warnings from system headers: Warning Options. (line 796) 48350* warnings vs errors: Warnings and Errors. 48351 (line 6) 48352* weak attribute: Function Attributes. 48353 (line 1693) 48354* weakref attribute: Function Attributes. 48355 (line 1702) 48356* whitespace: Incompatibilities. (line 112) 48357* X in constraint: Simple Constraints. (line 124) 48358* X3.159-1989: Standards. (line 13) 48359* x86-64 options: x86-64 Options. (line 6) 48360* x86-64 Options: i386 and x86-64 Options. 48361 (line 6) 48362* Xstormy16 Options: Xstormy16 Options. (line 6) 48363* Xtensa Options: Xtensa Options. (line 6) 48364* y0: Other Builtins. (line 6) 48365* y0f: Other Builtins. (line 6) 48366* y0l: Other Builtins. (line 6) 48367* y1: Other Builtins. (line 6) 48368* y1f: Other Builtins. (line 6) 48369* y1l: Other Builtins. (line 6) 48370* yn: Other Builtins. (line 6) 48371* ynf: Other Builtins. (line 6) 48372* ynl: Other Builtins. (line 6) 48373* zero-length arrays: Zero Length. (line 6) 48374* zero-size structures: Empty Structures. (line 6) 48375* zSeries options: zSeries Options. (line 6) 48376 48377 48378 48379Tag Table: 48380Node: Top2122 48381Node: G++ and GCC3919 48382Node: Standards5988 48383Node: Invoking GCC18155 48384Node: Option Summary21906 48385Node: Overall Options58727 48386Node: Invoking G++73063 48387Node: C Dialect Options74586 48388Node: C++ Dialect Options89666 48389Node: Objective-C and Objective-C++ Dialect Options114666 48390Node: Language Independent Options125205 48391Node: Warning Options128129 48392Node: Debugging Options192125 48393Node: Optimize Options239905 48394Ref: Type-punning296272 48395Node: Preprocessor Options370342 48396Ref: Wtrigraphs374440 48397Ref: dashMF379188 48398Ref: fdollars-in-identifiers390032 48399Node: Assembler Options398593 48400Node: Link Options399298 48401Ref: Link Options-Footnote-1409656 48402Node: Directory Options409990 48403Node: Spec Files416279 48404Node: Target Options437875 48405Node: Submodel Options438274 48406Node: ARC Options439893 48407Node: ARM Options441083 48408Node: AVR Options455448 48409Node: Blackfin Options457303 48410Node: CRIS Options465251 48411Node: CRX Options468992 48412Node: Darwin Options469417 48413Node: DEC Alpha Options476909 48414Node: DEC Alpha/VMS Options488825 48415Node: FR30 Options489399 48416Node: FRV Options489974 48417Node: GNU/Linux Options496691 48418Node: H8/300 Options497952 48419Node: HPPA Options499019 48420Node: i386 and x86-64 Options508519 48421Node: i386 and x86-64 Windows Options539363 48422Node: IA-64 Options541911 48423Node: IA-64/VMS Options549929 48424Node: LM32 Options550484 48425Node: M32C Options551013 48426Node: M32R/D Options552303 48427Node: M680x0 Options555890 48428Node: M68hc1x Options569965 48429Node: MCore Options571534 48430Node: MeP Options573041 48431Node: MicroBlaze Options577014 48432Node: MIPS Options579585 48433Node: MMIX Options607947 48434Node: MN10300 Options610429 48435Node: PDP-11 Options612637 48436Node: picoChip Options614331 48437Node: PowerPC Options616530 48438Node: RS/6000 and PowerPC Options616766 48439Node: RX Options653369 48440Node: S/390 and zSeries Options658941 48441Node: Score Options666872 48442Node: SH Options667700 48443Node: Solaris 2 Options678839 48444Node: SPARC Options680359 48445Node: SPU Options690000 48446Node: System V Options695004 48447Node: V850 Options695827 48448Node: VAX Options699406 48449Node: VxWorks Options699954 48450Node: x86-64 Options701109 48451Node: Xstormy16 Options701327 48452Node: Xtensa Options701616 48453Node: zSeries Options705950 48454Node: Code Gen Options706146 48455Node: Environment Variables733626 48456Node: Precompiled Headers741522 48457Node: C Implementation747721 48458Node: Translation implementation749384 48459Node: Environment implementation749958 48460Node: Identifiers implementation750508 48461Node: Characters implementation751562 48462Node: Integers implementation754368 48463Node: Floating point implementation756193 48464Node: Arrays and pointers implementation759122 48465Ref: Arrays and pointers implementation-Footnote-1760557 48466Node: Hints implementation760681 48467Node: Structures unions enumerations and bit-fields implementation762147 48468Node: Qualifiers implementation764133 48469Node: Declarators implementation765905 48470Node: Statements implementation766247 48471Node: Preprocessing directives implementation766574 48472Node: Library functions implementation768679 48473Node: Architecture implementation769319 48474Node: Locale-specific behavior implementation770022 48475Node: C++ Implementation770327 48476Node: Conditionally-supported behavior771607 48477Node: Exception handling772117 48478Node: C Extensions772526 48479Node: Statement Exprs777361 48480Node: Local Labels781874 48481Node: Labels as Values784853 48482Ref: Labels as Values-Footnote-1787262 48483Node: Nested Functions787445 48484Node: Constructing Calls791378 48485Node: Typeof796109 48486Node: Conditionals799424 48487Node: __int128800315 48488Node: Long Long800835 48489Node: Complex802337 48490Node: Floating Types804908 48491Node: Half-Precision806046 48492Node: Decimal Float808228 48493Node: Hex Floats810095 48494Node: Fixed-Point811136 48495Node: Named Address Spaces814430 48496Node: Zero Length815729 48497Node: Empty Structures819016 48498Node: Variable Length819432 48499Node: Variadic Macros822085 48500Node: Escaped Newlines824467 48501Node: Subscripting825306 48502Node: Pointer Arith826029 48503Node: Initializers826597 48504Node: Compound Literals827093 48505Node: Designated Inits829268 48506Node: Case Ranges832923 48507Node: Cast to Union833606 48508Node: Mixed Declarations834702 48509Node: Function Attributes835208 48510Node: Attribute Syntax915014 48511Node: Function Prototypes925460 48512Node: C++ Comments927241 48513Node: Dollar Signs927760 48514Node: Character Escapes928225 48515Node: Variable Attributes928519 48516Ref: MeP Variable Attributes943410 48517Ref: i386 Variable Attributes945371 48518Node: Type Attributes951356 48519Ref: MeP Type Attributes965097 48520Ref: i386 Type Attributes965371 48521Ref: PowerPC Type Attributes966211 48522Ref: SPU Type Attributes967073 48523Node: Alignment967364 48524Node: Inline968738 48525Node: Volatiles973722 48526Node: Extended Asm976617 48527Ref: Example of asm with clobbered asm reg982706 48528Ref: Extended asm with goto992473 48529Node: Constraints1000208 48530Node: Simple Constraints1001292 48531Node: Multi-Alternative1008613 48532Node: Modifiers1010330 48533Node: Machine Constraints1013224 48534Node: Asm Labels1051868 48535Node: Explicit Reg Vars1053544 48536Node: Global Reg Vars1055152 48537Node: Local Reg Vars1059702 48538Node: Alternate Keywords1062143 48539Node: Incomplete Enums1063629 48540Node: Function Names1064386 48541Node: Return Address1066548 48542Node: Vector Extensions1070101 48543Node: Offsetof1074507 48544Node: Atomic Builtins1075321 48545Node: Object Size Checking1080699 48546Node: Other Builtins1086127 48547Node: Target Builtins1112807 48548Node: Alpha Built-in Functions1113731 48549Node: ARM iWMMXt Built-in Functions1116730 48550Node: ARM NEON Intrinsics1123449 48551Node: Blackfin Built-in Functions1329649 48552Node: FR-V Built-in Functions1330263 48553Node: Argument Types1331122 48554Node: Directly-mapped Integer Functions1332878 48555Node: Directly-mapped Media Functions1333960 48556Node: Raw read/write Functions1340992 48557Node: Other Built-in Functions1341904 48558Node: X86 Built-in Functions1343093 48559Node: MIPS DSP Built-in Functions1388229 48560Node: MIPS Paired-Single Support1400676 48561Node: MIPS Loongson Built-in Functions1402177 48562Node: Paired-Single Arithmetic1408695 48563Node: Paired-Single Built-in Functions1409641 48564Node: MIPS-3D Built-in Functions1412311 48565Node: picoChip Built-in Functions1417686 48566Node: Other MIPS Built-in Functions1419052 48567Node: PowerPC AltiVec/VSX Built-in Functions1419576 48568Node: RX Built-in Functions1535772 48569Node: SPARC VIS Built-in Functions1539782 48570Node: SPU Built-in Functions1541461 48571Node: Target Format Checks1543243 48572Node: Solaris Format Checks1543675 48573Node: Darwin Format Checks1544101 48574Node: Pragmas1544928 48575Node: ARM Pragmas1545638 48576Node: M32C Pragmas1546241 48577Node: MeP Pragmas1547315 48578Node: RS/6000 and PowerPC Pragmas1549384 48579Node: Darwin Pragmas1550125 48580Node: Solaris Pragmas1551192 48581Node: Symbol-Renaming Pragmas1552353 48582Node: Structure-Packing Pragmas1554987 48583Node: Weak Pragmas1556637 48584Node: Diagnostic Pragmas1557371 48585Node: Visibility Pragmas1560399 48586Node: Push/Pop Macro Pragmas1561151 48587Node: Function Specific Option Pragmas1562124 48588Node: Unnamed Fields1564388 48589Node: Thread-Local1566626 48590Node: C99 Thread-Local Edits1568733 48591Node: C++98 Thread-Local Edits1570745 48592Node: Binary constants1574190 48593Node: C++ Extensions1574861 48594Node: C++ Volatiles1576509 48595Node: Restricted Pointers1578869 48596Node: Vague Linkage1580467 48597Node: C++ Interface1584129 48598Ref: C++ Interface-Footnote-11588426 48599Node: Template Instantiation1588563 48600Node: Bound member functions1595575 48601Node: C++ Attributes1597118 48602Node: Namespace Association1598776 48603Node: Type Traits1600190 48604Node: Java Exceptions1606545 48605Node: Deprecated Features1607942 48606Node: Backwards Compatibility1610907 48607Node: Objective-C1612265 48608Node: GNU Objective-C runtime API1612874 48609Node: Modern GNU Objective-C runtime API1613881 48610Node: Traditional GNU Objective-C runtime API1616318 48611Node: Executing code before main1617940 48612Node: What you can and what you cannot do in +load1620678 48613Node: Type encoding1623068 48614Node: Legacy type encoding1628144 48615Node: @encode1629235 48616Node: Method signatures1629776 48617Node: Garbage Collection1631771 48618Node: Constant string objects1634405 48619Node: compatibility_alias1636913 48620Node: Exceptions1637635 48621Node: Synchronization1640346 48622Node: Fast enumeration1641530 48623Node: Using fast enumeration1641842 48624Node: c99-like fast enumeration syntax1643053 48625Node: Fast enumeration details1643756 48626Node: Fast enumeration protocol1646097 48627Node: Messaging with the GNU Objective-C runtime1649249 48628Node: Dynamically registering methods1650620 48629Node: Forwarding hook1652311 48630Node: Compatibility1655350 48631Node: Gcov1661917 48632Node: Gcov Intro1662450 48633Node: Invoking Gcov1665168 48634Node: Gcov and Optimization1677108 48635Node: Gcov Data Files1679763 48636Node: Cross-profiling1680903 48637Node: Trouble1682754 48638Node: Actual Bugs1684239 48639Node: Cross-Compiler Problems1684695 48640Node: Interoperation1685109 48641Node: Incompatibilities1692246 48642Node: Fixed Headers1700397 48643Node: Standard Libraries1702060 48644Node: Disappointments1703432 48645Node: C++ Misunderstandings1707790 48646Node: Static Definitions1708601 48647Node: Name lookup1709654 48648Ref: Name lookup-Footnote-11714432 48649Node: Temporaries1714619 48650Node: Copy Assignment1716595 48651Node: Non-bugs1718402 48652Node: Warnings and Errors1728909 48653Node: Bugs1730673 48654Node: Bug Criteria1731237 48655Node: Bug Reporting1733447 48656Node: Service1733686 48657Node: Contributing1734505 48658Node: Funding1735245 48659Node: GNU Project1737734 48660Node: Copying1738380 48661Node: GNU Free Documentation License1775908 48662Node: Contributors1801045 48663Node: Option Index1837914 48664Node: Keyword Index2015097 48665 48666End Tag Table 48667